我有一个太空入侵者风格的游戏,但是当我按下一个键移动我的玩家的船时,外星人会减速直到钥匙被释放。这是因为按下某个键时运行的代码比没有(显然)的代码要多。这是我按下按键时运行的代码
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语句中作为工作延迟?
我可以把所有的代码都放在这里,但此刻它有点冗长,所以我想在没有任何明显的情况下尝试一下我失踪的东西。
答案 0 :(得分:3)
self.image = pygame.image.load("shipu.png").convert()
您每次移动时都会重新加载船舶图像。不要这样做。
加载图像会返回一个曲面,将该曲面存储在船舶的物体中,并在每一帧的船舶坐标处渲染该曲面,而不必再次加载图像。
加载文件非常慢,这就是为什么您会看到如此剧烈的放缓。
考虑到您有不同运动状态的多个图形,请在创建船舶时一次性加载所有图像,并将生成的曲面存储在单独的变量或字典中。当您需要在图形之间切换时,只需将表面换成所需的表面即可。
无论你做什么,只加载所有图像!
当你按照我刚刚建议的方式改变它时,减速仍然会发生,但它至少是难以察觉的。 要随着时间的推移均匀运动,您需要使用“delta time'”。这基本上是基于渲染时间移动的距离。