控制帧速

帧速永远是游戏和硬件之间的较量,同样的游戏在不同配置的机器上运行帧速肯定是不一样的。在没有对帧速进行控制时,pygame永远是使用最大火力运行。但是我们往往并不需要过高的帧速。对于一般游戏来说,30FPS的帧速已经可以提供流畅的体验了,而目前的LCD显示器一般可以支持60FPS的帧速。帧速高于60FPS已经没有很大的意义了。

Pygame的pygame.time模块中提供了一个Clock对象,可以用来对帧速进行控制。以下例程将最大帧速控制在了30FPS。

clock = pygame.time.Clock()
# 返回一个距离上次调用的时间差,单位是毫秒
time_passed = clock.tick()

while True:
	time_passed = clock.tick(30)

示例中的clock.tick(30)将帧速限制在了30FPS,这是游戏运行的最大帧速。但是需要注意的是,游戏的实际帧速很有可能达不到这个值。

精灵的运动

前面提到游戏中出现的物体一般都成为精灵,精灵在画面上不可能是完全静止不动的。结合前面提到的帧速控制,就会出现一个不得不处理的问题:无论在哪个帧速下,精灵的运动都是与时间相匹配的,不可能在配置较好的机器上精灵的运动是在1秒钟完成,而配置较差的机器上则会大于1秒。

这就要求在帧速较低的机器上,精灵需要有更高的运动速度,反之,在帧速较高的机器上,精灵的运动速度可以较低。针对这种要求,我们可以给精灵定义一个基础运动速度,结合前面clock.tick()函数返回的时间差,来计算精灵的运动距离,之后再进行相应的绘制。这样在不同的机器上看起来,精灵的运动效果就一致了。

Tip

但是在配置较低的机器上,会明显感觉到精灵的运动是一跳一跳的,这是非常正常的。

所以,在游戏中产生动画无非就是在每一帧中,将前一帧中精灵的位置进行一些变化。这种变化可以通过与时间相关的量来进行计算得出,如果使用向量来进行计算,那么这种运动的计算将会十分简单。游戏的开发会使用到大量的数学知识,所以在不知所措的时候,请尽情的翻数学书吧。