我正在写一个游戏,我看到 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
尝试...
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 处理方法的文章。