Pygame - 按下按键时保持游戏速度

  • 本文关键字:游戏 速度 Pygame python pygame
  • 更新时间 :
  • 英文 :


我有一个太空侵略者风格的游戏,效果很好,但是当我按下一个键来移动我的玩家的飞船时,外星人会放慢速度,直到钥匙被释放。 这是因为按下某个键时运行的代码比没有键时运行的代码多(显然)。这是我按下某个键时运行的代码

keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
    objShip.move(1)
elif keys[pygame.K_RIGHT]:
    objShip.move(2)
elif keys[pygame.K_DOWN]:
    objShip.move(3)
elif keys[pygame.K_LEFT]:
    objShip.move(4)

调用以下代码

def move(self, d):
    self.direction = d
    if self.direction == 1:
        self.image = pygame.image.load("shipu.png").convert()
        if self.yco >= 0:
            self.yco -= 1
        if self.xco >= 884:
            self.xco = 860

有没有一种方法可以平衡外星人的速度,而不涉及将等待命令(或空循环或其他什么)放入 else 语句中以充当弥补延迟?

我可以把所有代码放在这里,但目前有点长,所以我想我会尝试一下,以防万一我缺少一些明显的东西。

self.image = pygame.image.load("shipu.png").convert()

每次移动飞船图像时,您都会重新加载它。别这样。

加载图像

将返回一个表面,将该表面存储在飞船的对象中,并在每一帧处以飞船的坐标渲染该表面,而无需再次加载图像。

加载文件非常慢,这就是为什么您会看到如此显着的减速。

考虑到您有多个用于不同运动状态的图形,请在创建飞船时一次加载所有图像,并将其生成的表面存储在单独的变量或字典中。当您需要在图形之间切换时,只需将表面换成所需的表面即可。

无论您做什么,都只加载一次所有图像!

当您将其更改为我刚才建议的方式时,速度仍然会发生,但至少会察觉不到。为了平衡随时间推移的运动,您需要使用"增量时间"。这基本上是基于渲染时间移动的距离。

最新更新