如何在 Pygame 中拥有无限 FPS 并仍然控制程序的 FPS?

问题描述

我做了一些研究,发现了这个: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获得控制权或让您的程序尽可能快地运行但不受控制似乎是一个天气问题。

总之,我要问的是四个问题;

  1. 限制 FPS 的利弊
  2. 不限制 FPS 并继续执行程序的自然 FPS 的利弊
  3. 是否有可能拥有无限的 FPS 并且仍然控制我的 FPS 以进行等待等时间?
  4. 如果是,怎么做?

解决方法

您必须根据帧速率计算每帧的移动。

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 时间,而且您不会看到明显的差异。缺点是您没有固定的帧速率,您必须根据最后一帧经过的时间来计算所有动画和动作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...