我正在编写一个游戏,我注意到帧速率不稳定。我需要什么基本逻辑来可靠地限制游戏的帧速率?如何计算睡眠时间?
我知道以微秒为单位更新游戏一帧需要多长时间,当然还有我想要达到的帧速率(以每秒帧数 (FPS) 为单位)。
渲染一帧应该花费
1/FPS
秒(如果您的目标是 10 FPS,则应该在每一帧上花费 1/10 = 0.1 秒)。因此,如果渲染需要 X
秒,您应该“睡眠”1/FPS - X
秒。
将其转换为毫秒,您会得到
ms_to_sleep = 1000 / FPS - elapsed_ms;
如果由于某种原因需要超过
1/FPS
来渲染帧,您将获得负睡眠时间,在这种情况下,您显然只是跳过睡眠。
每帧的微秒数是
1000000 / frames_per_second
。如果你知道你已经花费了elapsed_microseconds
计算,那么你需要睡觉的时间是:
(1000000 / frames_per_second) - elapsed_microseconds
尝试...
static const int NUM_FPS_SAMPLES = 64;
float fpsSamples[NUM_FPS_SAMPLES]
int currentSample = 0;
float CalcFPS(int dt)
{
fpsSamples[currentSample % NUM_FPS_SAMPLES] = 1.0f / dt;
float fps = 0;
for (int i = 0; i < NUM_FPS_SAMPLES; i++)
fps += fpsSamples[i];
fps /= NUM_FPS_SAMPLES;
return fps;
}
...按照 http://www.gamedev.net/community/forums/topic.asp?topic_id=510019
查看这篇有关不同 FPS 处理方法的文章。
更新:使用网络档案中的此链接,因为原始网站已消失:https://web.archive.org/web/20161202094710/http://dewitters.koonsolo.com/gameloop.html