ゲームループで一定速度を設定するという概念を理解しようとしています。頭が痛い。私はdeWiTTERS pageを読んでいますが、私はなぜ/どのように...私がそれを得るときに見ることができません...それはスリップします。時間ベースのループとフレームベースのループ
while(true)
{
player->update() ;
player->draw() ;
}
これは、プロセッサの速さに応じてできるだけ早く実行されます...私はそれを取得します。
すべてのコンピュータで同じ速度で動作させるには、ロジックが得られません。私が60fpsで走ろうとしているのであれば、16msごとにオブジェクトがフレームごと動くことを意味します、そうですか?私が得ないのは、update()
またはdraw()
がどうして遅すぎるかということです。
deWiTTERS例(私は60を使用):
const int FRAMES_PER_SECOND = 60;
const int SKIP_TICKS = 1000/FRAMES_PER_SECOND;
DWORD next_game_tick = GetTickCount();
// GetTickCount() returns the current number of milliseconds
// that have elapsed since the system was started
int sleep_time = 0;
bool game_is_running = true;
while(game_is_running) {
update_game();
display_game();
next_game_tick += SKIP_TICKS;
sleep_time = next_game_tick - GetTickCount();
if(sleep_time >= 0) {
Sleep(sleep_time);
}
else {
// Shit, we are running behind!
}
}
彼はループが始まる前に、現在の時刻を取得し、なぜ私は理解していません。そして彼がSKIP_TICKS
をインクリメントするとき、私は彼が次の16msの間隔に増加することを理解します。しかし、私は同様にこの部分を理解していない:
sleep_time = nextgametick - GetTickCount()
Sleep(sleep_time)
は何を意味するのでしょうか?プロセッサはループを離れて別のことをしますか?実行中の60fpsはどのように達成されますか?
http://msdn.microsoft.com/en-us/library/ms686298%28v=vs.85%29.aspx – Lucian
http://msdn.microsoft.com/en-us/library/ms724408%28v = vs.85%29.aspx – Lucian
ありがとうございます.GetTickCount()は10〜16msの間に戻るか、そうですか?しかし代わりに、私は結果として324505599のようなものを見ています... "GetTickCount関数の解像度は、通常10ミリ秒から16ミリ秒の範囲内にあるシステムタイマの解像度に制限されています。" –