游戏开发:如何限制FPS?

时间:2010-06-23 15:07:15

标签: java c++ algorithm frame-rate

我正在写一个游戏,我看到FPS算法无法正常工作(当他需要计算更多时,他睡得更久......)所以,问题很简单:如何计算睡眠时间有正确的FPS?

我知道以微秒为单位更新游戏需要多长时间,当然还有我希望达到的FPS。

我正在疯狂寻找一个简单的例子,但我找不到一个......

代码可能是Java,C ++或伪....

4 个答案:

答案 0 :(得分:14)

渲染一帧所花费的时间是1/FPS秒(如果你的目标是10 FPS,你应该在每帧上花费1/10 = 0.1秒)。因此,如果渲染时间为X秒,则应该“休眠”1/FPS - X秒。

将其转换为例如毫秒,你得到

ms_to_sleep = 1000 / FPS - elapsed_ms;

如果由于某种原因需要超过1/FPS来渲染帧,你将获得负的睡眠时间,在这种情况下你显然只是跳过睡眠。

答案 1 :(得分:13)

每帧的微秒数为1000000 / frames_per_second。如果你知道你花了elapsed_microseconds计算,那么你需要睡觉的时间是:

(1000000 / frames_per_second) - elapsed_microseconds

答案 2 :(得分:2)

...试

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

答案 3 :(得分:1)

请查看有关不同FPS处理方法的this文章。