ゲームが一定の速度で更新されるように、固定タイムステップ ループを実装しようとしています。http://gafferongames.com/game-physics/fix-your-timestep/で素晴らしい記事を見つけましたが、それを自分の 2D エンジンに変換するのに苦労しています。
私が言及している特定の場所は、ほとんどの人が推奨する最後の部分「The Final Touch」の機能です。これは彼の機能です:
double t = 0.0;
const double dt = 0.01;
double currentTime = hires_time_in_seconds();
double accumulator = 0.0;
State previous;
State current;
while ( !quit )
{
double newTime = time();
double frameTime = newTime - currentTime;
if ( frameTime > 0.25 )
frameTime = 0.25; // note: max frame time to avoid spiral of death
currentTime = newTime;
accumulator += frameTime;
while ( accumulator >= dt )
{
previousState = currentState;
integrate( currentState, t, dt );
t += dt;
accumulator -= dt;
}
const double alpha = accumulator / dt;
State state = currentState*alpha + previousState * ( 1.0 - alpha );
render( state );
}
私自身は、微積分の統合を行うのではなく、x と y の位置と速度を追跡しながら、画面上でプレイヤーを動かしているだけです。**プレイヤーの位置の更新に何を適用するかについて混乱しています (dt または t?)。誰かがこれを分解してさらに説明できますか?
2 番目の部分は補間です。これは、提供された式が理にかなっており、現在と以前の x、y プレーヤーの位置の間を単純に補間できるためです。
また、より正確なタイマーを取得する必要があることも認識しています。