2012-03-11 11 views
1

は、このようなゲームループを考えてみましょう:最高の瞬間

while (gamerunning) { 
    if (it is time to update physics) 
     update(fixedTickDuration); 
    alpha = percent of tick elapsed; 
    draw(alpha); 
} 

更新機能は、など、その速度に基づいてオブジェクトを移動させ、現在も衝突処理を行います。 draw関数は、以前のエンティティ状態と現在のエンティティ状態を補間して中間表現を描画します。常に1フレーム後ろにあります。

質問:代わりにエンティティの補間座標を使用して描画関数で衝突検出と処理を行う必要がありますか? draw関数でのこの処理は、描画される内容をさらに変更する可能性があります。

答えて

1

いいえ、主にゲームの更新のレンダリング速度に頼りたくないという理由があります。ゲームの更新フレームレートを適切なものに修正し、処理速度に応じてレンダリングレートを変更することができます(能力に応じて高速または低速)。ゲームループの考慮事項のこの非常に素晴らしい概観から

while(game_is_running) { 
    loops = 0; 
    while(GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) { 
     update_game(); 
     next_game_tick += SKIP_TICKS; 
     loops++; 
    } 

    interpolation = float(GetTickCount() + SKIP_TICKS - next_game_tick) 
        /float(SKIP_TICKS); 
    display_game(interpolation); 
} 

コード:変数FPSとは無関係に一定のゲームの速度の

http://www.koonsolo.com/news/dewitters-gameloop/

関連する問題