为什么我的分层更新不适用于我的精灵?
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)
您可以将 Sprite 在 LayeredUpdates
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)
我已经尝试更新和绘制 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)
您可以将 Sprite 在 LayeredUpdates
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)