gpt4 book ai didi

python - 使用 pygame 动态控制 sprite blit 顺序

转载 作者:行者123 更新时间:2023-12-01 02:26:34 24 4
gpt4 key购买 nike

我目前正在编写一款塔防游戏。一切正常,但有一个视觉问题困扰着我。

基本上,一个 rect.y 较低且在 map 上应该较高的 Sprite 可以通过具有较高 rect.y 的速度较慢的生物后面。 blitted 前景 Sprite 之后(因此在前景 Sprite 之前)。

我可以修复它,但不能同时保留我喜欢的随机分布生成点。

有人可以提出任何帮助吗?我省略了不相关的代码,因此没有太多需要筛选的内容。

class Pokemon(pygame.sprite.Sprite):
def __init__(self, name, health, speed, attack, typeOf, typeOf2, level, order):
pygame.sprite.Sprite.__init__(self)
self.order = order
self.image = pygame.image.load('C:/Users/#/#/#/pygames/tower_defense/Distributable/images/POKEMON/%sright.png'%(name))

self.rect = self.image.get_rect()
# X/Y axis locations
self.rect.centerx = 0-self.rect.width - self.order*100
self.rect.centery = random.randint(500, 540)

然后是创建 block -

for e in range(numberOfEnemies):
poke = random.randint(1, 2)
if poke == 1:
level = random.randint(2, 5)
Pidgey = Pokemon('Pidgey', 15, 2, 5, 'Normal', 'Flying', level, e)
enemies.append(Pidgey)
enemy_sprites.add(Pidgey)
else:
level = random.randint(2, 4)
Rattata = Pokemon('Rattata', 13, 3, 5, 'Normal', None, level, e)
enemies.append(Rattata)
enemy_sprites.add(Rattata)
enemyNumber += 1

最佳答案

如果需要控制 Sprite 的图层,可以使用LayeredUpdates Sprite 组。 Sprite 需要一个 self._layer 属性,或者您可以在添加 Sprite 到组时传递该图层,例如:

layered_group.add(sprite, layer=desired_layer)

当 Sprite 移动时,可以调用 Sprite 组的change_layer方法:

layered_group.change_layer(sprite, sprite.rect.bottom)

但是,如果您必须每帧更新所有 Sprite 的图层,则按 Sprite 的 rect.bottom 位置对 Sprite 进行排序、迭代列表并对它们进行 blit 会更有效:

blit = screen.blit  # Local variable to improve the performance.
for sprite in sorted(all_sprites, key=lambda spr: spr.rect.bottom):
blit(sprite.image, sprite.rect)

关于python - 使用 pygame 动态控制 sprite blit 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47330479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com