10

私はゲームを書いていますが、FPSアルゴリズムが正しく機能しないことがわかりました(彼がもっと計算する必要があるとき、彼はより長く眠ります...)したがって、質問は非常に簡単です:正しいFPSを持つための睡眠時間を計算する方法?

ゲームをマイクロ秒単位で1フレーム更新するのにどれくらいの時間がかかったか、そしてもちろん到達したいFPSを知っています。

簡単な例を探していますが、見つかりません。

コードは、Java、C ++、または疑似である可能性があります。

4

4 に答える 4

14

1フレームのレンダリングに費やす時間は1/FPS秒です(たとえば、10 FPSを目標としている場合は、各フレームに1/10 = 0.1秒を費やす必要があります)。したがって、Xレンダリングに数秒かかる場合は、数秒間「スリープ」する必要があります1/FPS - X

これをたとえばミリ秒に変換すると、次のようになります。

ms_to_sleep = 1000 / FPS - elapsed_ms;

何らかの理由で1/FPSフレームのレンダリングよりも時間がかかった場合は、マイナスのスリープ時間が発生します。その場合は、明らかにスリープをスキップします。

于 2010-06-23T15:10:13.230 に答える
13

フレームあたりのマイクロ秒数はです1000000 / frames_per_second。計算に費やしたことがわかっている場合elapsed_microseconds、スリープする必要がある時間は次のとおりです。

(1000000 / frames_per_second) - elapsed_microseconds
于 2010-06-23T15:10:57.013 に答える
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による

于 2010-06-23T15:11:51.340 に答える
1

さまざまなFPS処理方法については、この記事をご覧ください。

于 2010-07-04T12:10:15.603 に答える