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

Pygame - maintain playing speed of game when keys are pressed

我有一个 Space 入侵者风格的游戏,运行正常,但是当我按下一个键来移动玩家的飞船时,外星人会减速,直到松开键为止。这是因为当按下一个键时 运行 的代码比没有按下时多(很明显)。这是 运行 当我按下一个键

时的代码
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()

每次移动时您都在重新加载船舶图像。不要这样做。

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

加载文件非常缓慢,这就是为什么您会看到速度如此之快的原因。

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

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

改成我刚才建议的方式,减速还是会发生,但至少不会被察觉。 为了平衡随时间的移动,您需要使用 'delta time'。这基本上是基于渲染时间移动的距离。