使用pygame动态控制sprite blit顺序

时间:2017-11-16 13:07:17

标签: python pygame

我目前正在撰写塔防游戏。一切都很好,但有一个视觉问题困扰着我。

基本上,地图上较低dt <- read.table(text = "file_name loc rep1 'chr1:62161618:62162663:-' rep2 'chr1:62161618:62162669:-'", header = TRUE, stringsAsFactors = FALSE) 并且应该在较高的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)

1 个答案:

答案 0 :(得分:2)

如果需要控制精灵的图层,可以使用LayeredUpdates精灵组。精灵需要self._layer属性,或者您可以在精灵add时将图层传递给组,例如:

layered_group.add(sprite, layer=desired_layer)

移动精灵时,可以调用精灵组的change_layer方法:

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

但是,如果你必须每帧更新所有精灵的图层,那么按照rect.bottom位置对精灵进行排序会更有效,迭代列表并将它们搞定:

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)