我正在搞乱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功能的一部分,这对我来说是有用的.
游戏使用固定时间步进物理,同时允许视频时间步长(fps)变化.这意味着您的update(delta)函数将使用常量delta值进行调用.这保持了稳定性.
这意味着在实践update中draw(),根据经过的时间长短,每次调用最终可能会多次被调用.
有关详细信息,请参阅:Gaffer的"修复您的时间步长"
一个更大的(python)示例是在cookbook:ConstantGametime