在Pygame中,将游戏速度标准化为不同的fps值

Nor*_*lik 5 python pygame

我正在搞乱Pygame,制作一些简单的游戏只是为了学习它.但是,我很难以我想要的方式实现fps.

根据我的理解,fps通常设置为:

import pygame
...
clock = pygame.time.Clock()
while True:
    clock.tick(60)
Run Code Online (Sandbox Code Playgroud)

然后在整个程序中,我确保每个循环/帧被写入需要1/60秒,所以我可以,例如,让对象以我想要的速度移动.将刻度增加到120 fps将使游戏运行得太快,而减少它会使游戏运行得太慢.

然而,这并不是我熟悉fps为任何其他游戏工作的方式.在大多数游戏中,fps可以根据需要变化(通常基于系统运行应用程序的程度),但游戏总是以相同的速度运行(例如,在屏幕上移动100个像素将花费1秒钟,无论如何在那一秒发生了多少帧).

我能想到让它按照我想要的方式工作的唯一方法是每帧捕获当前的fps,并将其计入每个基于运动或时间的事件的计算中.但这似乎是不必要的复杂,我想知道我是否完全错过了pygame功能的一部分,这对我来说是有用的.

nin*_*key 6

游戏使用固定时间步进物理,同时允许视频时间步长(fps)变化.这意味着您的update(delta)函数将使用常量delta值进行调用.这保持了稳定性.

这意味着在实践updatedraw(),根据经过的时间长短,每次调用最终可能会多次被调用.

有关详细信息,请参阅:Gaffer的"修复您的时间步长"

一个更大的(python)示例是在cookbook:ConstantGametime