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

How to have unlimited FPS and still control the FPS of your program in Pygame?

我做了一些研究,发现了这个: and this: 。和我问的差不多。

因此 clock.tick(FPS) 将程序限制为 运行 FPS。您这样做的原因是您可以控制程序的 FPS 并且它可以更轻松地处理诸如等待之类的时间。

但是我如何才能不受限制地 FPS 并仍然控制我的 FPS 等待等时间?据我了解,这是不可能的,因为 clock.tick(FPS) 限制了 FPS 并且不添加它意味着无限 FPS 但你无法控制 FPS.

所以这似乎是一个天气问题来限制你 FPS 控制或让你的程序 运行 尽可能快,但没有控制。

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

  1. 限制 FPS
  2. 的优缺点
  3. 不限制 FPS 并继续自然 FPS 计划的利弊
  4. 是否可以无限 FPS 并且仍然控制我的 FPS 等待等时间?
  5. 如果是,怎么做?

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

pygame.time.Clock.tick returns 自上次调用以来的毫秒数。当您在应用程序循环中调用它时,这是自上一帧以来经过的毫秒数。 当您不带参数调用它时(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 时间,而且您不会看到明显的差异。缺点是你没有恒定的帧率,你必须根据最后一帧经过的时间来计算所有动画和移动。