私はゲームを書いていますが、FPSアルゴリズムが正しく機能しないことがわかりました(彼がもっと計算する必要があるとき、彼はより長く眠ります...)したがって、質問は非常に簡単です:正しいFPSを持つための睡眠時間を計算する方法?
ゲームをマイクロ秒単位で1フレーム更新するのにどれくらいの時間がかかったか、そしてもちろん到達したいFPSを知っています。
簡単な例を探していますが、見つかりません。
コードは、Java、C ++、または疑似である可能性があります。
私はゲームを書いていますが、FPSアルゴリズムが正しく機能しないことがわかりました(彼がもっと計算する必要があるとき、彼はより長く眠ります...)したがって、質問は非常に簡単です:正しいFPSを持つための睡眠時間を計算する方法?
ゲームをマイクロ秒単位で1フレーム更新するのにどれくらいの時間がかかったか、そしてもちろん到達したいFPSを知っています。
簡単な例を探していますが、見つかりません。
コードは、Java、C ++、または疑似である可能性があります。
1フレームのレンダリングに費やす時間は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処理方法については、この記事をご覧ください。