ゲーム フレームをグラフィック フレームから分離する必要があります。グラフィカル フレームは、グラフィックのみを表示し、他には何も表示しないようにします。リプレイの場合、コンピューターが実行できたグラフィック フレームの数は関係ありません。1 秒あたり 30 であろうと、1 秒あたり 1000 であろうと、再生するコンピューターは異なるグラフィック フレーム レートで再生する可能性があります。
しかし、実際にはゲームフレームを修正する必要があります。たとえば、毎秒 100 ゲームフレーム。ゲーム フレームでは、ゲーム ロジックが実行されます。これは、ゲーム (およびリプレイ) に関連するものです。
ゲーム フレームが必要ないときはいつでも、ゲームループはグラフィカル フレームを実行する必要があるため、ゲームを 1 秒あたり 100 ゲームフレームに修正すると、ゲーム フレームあたり 0.01 秒になります。コンピューターがゲームフレームでそのロジックを実行するのに 0.001 しか必要としなかった場合、残りの 0.009 秒はグラフィック フレームを繰り返すために残されます。
これは小さいが不完全であり、100% 正確ではない例です。
uint16_t const GAME_FRAMERATE = 100;
uint16_t const SKIP_TICKS = 1000 / GAME_FRAMERATE;
uint16_t next_game_tick;
Timer sinceLoopStarted = Timer(); // Millisecond timer starting at 0
unsigned long next_game_tick = sinceLoopStarted.getMilliseconds();
while (gameIsRunning)
{
//! Game Frames
while (sinceLoopStarted.getMilliseconds() > next_game_tick)
{
executeGamelogic();
next_game_tick += SKIP_TICKS;
}
//! Graphical Frames
render();
}
次のリンクには、正確なゲームループの作成に関する非常に優れた完全な情報が含まれています。
http://www.koonsolo.com/news/dewitters-gameloop/