我对 Python/PyGame 中的定时事件有疑问。我正在制作一个 2D 横向滚动平台游戏,目标是接触所有敌人,在收集完所有敌人后,我希望将相机中心放在“出口块”上。
在相机以“退出块”为中心后,我想移除它周围的块,并将相机重新对准玩家。所以玩家可以看到周围的方块是如何被移除的,并且可以到达“退出方块”。
在收集完所有敌人后,我已经获得了以“退出块”为中心的代码,但是在移除周围的块之前,相机切换到了玩家。在相机以玩家为中心后,方块会被移除。
我在这里缺少关键部分。删除周围的块后,我尝试了 pygame.time.wait() 。有什么帮助吗?请告诉我我提供的代码是否不够。
编辑: 我已将我的主要游戏循环分解为:
level.handle_events(pygame.event.get())
level.update()
level.render(screen)
pygame.display.flip()
问题可能是,主循环处理 USEREVENT,然后更新相机并且仅在完成绘图之后,这就是为什么看不到周围块的移除?但我仍然不知道如何进行..
相关代码:
玩家的初始化:
self.EXITBLOCKCLEAR = pygame.USEREVENT + 1
玩家的碰撞检测:
for e in enemies_group:
if pygame.sprite.collide_rect(self, e)
if len(enemies_group) == 0:
self.exit_block_reveal = True
pygame.time.set_timer(self.EXITBLOCKCLEAR, 3000)
等级更新:
if self.player.exit_block_reveal == False:
self.camera.update(self.player) # camera follows player
else:
self.camera.update(self.exit_block) # camera centered on "exit block"
关卡的事件处理:
if event.type == self.player.EXITBLOCKCLEAR:
if self.player.exit_block_reveal == True:
for block in self.disappearing_block_group:
block.kill()
self.disappearing_block_group.remove(block) # remove the surrounding blocks
if len(self.disappearing_block_group) == 0: # when blocks are removed, center camera back to player
self.player.exit_block_reveal = False
最新编辑:让代码工作
我到处玩,让它按我想要的方式工作。现在这对我来说非常有效。
更新的代码(这些是对原始代码的唯一更改)
使用此代码,当我收集最后一个敌人时,相机移动到“退出方块”3 秒,周围的方块被移除,再过 3 秒相机中心回到玩家。
级别的初始化:
self.i = 0
关卡的事件处理:
if event.type == self.player.EXITBLOCKCLEAR:
for block in self.disappearing_block_group:
block.kill()
self.disappearing_block_group.remove(block)
if len(self.disappearing_block_group) == 0 and self.i < 1:
self.i += 1
self.player.exit_block_reveal = True
else:
self.player.exit_block_reveal = False
pygame.time.set_timer(self.player.EXITBLOCKCLEAR, 0) # stop calling USEREVENT