Python 用pygame动态控制精灵blit顺序
我现在正在写一个塔防游戏。一切正常,但有一个视觉问题困扰着我 基本上,一个具有较低的Python 用pygame动态控制精灵blit顺序,python,pygame,Python,Pygame,我现在正在写一个塔防游戏。一切正常,但有一个视觉问题困扰着我 基本上,一个具有较低的rect.y且在地图上应该较高的精灵可以在具有较高rect.y的较慢怪物后面通过,可以在前景精灵后面(因此在前面)闪烁 我可以修复它,但不能同时保持随机分散的产卵点,我喜欢 有人能给我提些建议吗?我省略了不相关的代码,所以没有太多要筛选的内容 class Pokemon(pygame.sprite.Sprite): def __init__(self, name, health, speed, attac
rect.y
且在地图上应该较高的精灵可以在具有较高rect.y
的较慢怪物后面通过,可以在前景精灵后面(因此在前面)闪烁
我可以修复它,但不能同时保持随机分散的产卵点,我喜欢
有人能给我提些建议吗?我省略了不相关的代码,所以没有太多要筛选的内容
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)
然后是创建块-
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
如果需要控制精灵的层,可以使用精灵组。精灵需要一个
self.\u layer
属性,或者当您将精灵添加到组中时,您可以传递该层,例如:
layered_group.add(sprite, layer=desired_layer)
移动精灵时,可以调用精灵组的change\u layer
方法:
layered_group.change_layer(sprite, sprite.rect.bottom)
但是,如果必须在每帧更新所有精灵的图层,则按精灵的rect.bottom
位置对精灵进行排序会更有效,可以迭代列表并对其进行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)
我不是100%确定你想要实现什么,但听起来你可以使用一个精灵小组。我认为精灵需要一个self.\u层
属性IIRC。如果你把它们放在列表中,那么使用sort()/sorted()
和key=
一起使用rect.y
。我查看了layeredUpdates()
,这正是我所需要的。再次感谢!