为什么我的分层更新不适用于我的精灵?

Why is my layered updates not working on my sprites?

我已经尝试更新和绘制 layered_group 但仍然无法正常工作。我已经阅读了一些教程,据我所知,我的以下代码应该可以工作,但我遗漏了一些东西...

这些是组和实例...

self.layered_group = pygame.sprite.LayeredUpdates()

    self.visible_sprites = CameraGroup(self.current_level)
    self.active_sprites = pygame.sprite.Group()
    self.obstacle_sprites = pygame.sprite.Group()

    self.exit_sprite_1 = pygame.sprite.Group()

for style, layout in layouts.items():
        for row_index, row in enumerate(layout):
            for col_index, col in enumerate(row):
                if col != '-1':
                    x = col_index * TILESIZE
                    y = row_index * TILESIZE

                    if style == 'blocks':
                        Tile((x,y), [self.visible_sprites, self.obstacle_sprites], 'tile')

                    if style == 'entrances':
                        if col == str(self.entry_pos):
                            self.player = Player((x, y), [self.visible_sprites, self.active_sprites, self.layered_group], self.obstacle_sprites, self.layered_group, 1)
                    
                        
                    if style == 'exits':
                        if col == '1':
                            sprite = ExitDoor((x,y - TILESIZE // 2), [self.visible_sprites, self.active_sprites], self.layered_group,0, 'door')
                            self.exit_sprite_1.add(sprite)

并且在 class.....

class Player(pygame.sprite.Sprite):
def __init__(self, pos, groups, obstacle_sprites, layered_group, layer):
    self._layer = layer,
    super().__init__(groups)

运行方法只更新可见精灵组如下,这是为什么?我的打印故障排除显示在每个级别上生成时都正确排序并且它 运行s。我是否必须将此 self.layered_group 合并到我的 运行 方法中?如果是这样,我很挣扎,因为一切都在可见组中!!

def run(self):
    self.layers_group.update()
    print(self.layers_group.layers())
    if self.game_paused:
        self.pause.run()
    else:
        self.input()
        self.active_sprites.update()
        self.visible_sprites.offset_draw(self.player)

您可以将 SpriteLayeredUpdates Group 中的层与 change_layer 相关联更改:

layered_group = pygame.sprite.LayeredUpdates()
layered_group.change_layer(sprite, layer)

但是,如果您在 LayeredUpdates Group_ 对象上调用 draw,则 Sprites 只会以正确的顺序绘制。将 Sprites 添加到 LayeredUpdates Group,不要神奇地改变 Sprites[=32= 的顺序] 在另一个 中。你必须打电话

layered_group.draw(screen)

另见

已解决。当玩家被传递到相机组 class 的 draw 方法时,我可以将玩家与所有其他精灵分开,并按照以下方式在其他精灵之后 blit 玩家......让我知道这是否可以整理!

for sprite in self.sprites():
        if sprite != player:
            offset = sprite.rect.topleft - self.offset
            self.display_surf.blit(sprite.image, offset)

    for sprite in self.sprites():
        if sprite == player:
            offset = sprite.rect.topleft - self.offset
            self.display_surf.blit(sprite.image, offset)