问题描述
我做了一些研究,发现了这个:Setting a fixed FPS in Pygame,Python 3 和这个:pygame clock.tick() vs framerate in game main loop。这和我问的很相似。
因此 clock.tick(FPS)
限制程序在该 FPS
处运行。这样做的原因是您可以控制程序的 FPS
,并且可以更轻松地处理诸如等待之类的时间问题。
但是我怎样才能不限制 FPS
并且仍然控制我的 FPS
以进行等待之类的时间?根据我的理解,这是不可能的,因为 clock.tick(FPS)
限制了 FPS
并且虽然不添加它意味着无限 FPS
但您无法控制 {{1 }}。
因此,让您FPS
获得控制权或让您的程序尽可能快地运行但不受控制似乎是一个天气问题。
总之,我要问的是四个问题;
- 限制
FPS
的利弊 - 不限制
FPS
并继续执行程序的自然FPS
的利弊 - 是否有可能拥有无限的
FPS
并且仍然控制我的FPS
以进行等待等时间? - 如果是,怎么做?
解决方法
您必须根据帧速率计算每帧的移动。
pygame.time.Clock.tick
返回自上次调用以来的毫秒数。当您在应用程序循环中调用它时,这是自上一帧以来经过的毫秒数。
当您不带参数 (framerate=0
) 调用它时,FPS 是无限的。
以像素为单位定义玩家每秒应移动的距离 (move_per_second
)。然后计算应用程序循环中每帧的距离:
move_per_second = 500 # 500 is just an example and means 500 pixels/second
run = True
clock = pygame.time.Clock()
while run:
ms_frame = clock.tick() # get the milliseconds passed since the last frame
move_per_frame = move_per_second * ms_frame / 1000
# [...]
但是,使用这种方法,您是在浪费 CPU 时间,而且您不会看到明显的差异。缺点是您没有固定的帧速率,您必须根据最后一帧经过的时间来计算所有动画和动作。