我正在编写一款游戏,发现FPS算法无法正确运行(当需要计算更多时,休眠时间变长...)。所以,问题非常简单:如何计算正确的FPS休眠时间?
我知道用微秒来更新游戏一帧需要多长时间,当然也知道我想要达到的FPS。
我疯狂地寻找一个简单的示例,但是找不到....
代码可以是Java、C++或伪代码....
我正在编写一款游戏,发现FPS算法无法正确运行(当需要计算更多时,休眠时间变长...)。所以,问题非常简单:如何计算正确的FPS休眠时间?
我知道用微秒来更新游戏一帧需要多长时间,当然也知道我想要达到的FPS。
我疯狂地寻找一个简单的示例,但是找不到....
代码可以是Java、C++或伪代码....
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
Try...
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 处理方法的文章。
更新: 由于原网站已消失,请使用 Web 存档中的链接:https://web.archive.org/web/20161202094710/http://dewitters.koonsolo.com/gameloop.html