ゲームが一定のレートで更新されるように固定タイムステップループを実装しようとしています。私はhttp://gafferongames.com/game-physics/fix-your-timestep/で偉大な記事を見つけましたが、それを自分自身の2dエンジンに翻訳するのに問題があります。C++の固定タイムステップループ
私が言及している特定の場所は、最後の部分の機能です。「最後のタッチ」は、ほとんどの人が推奨するものです。これは彼の関数である:
自分で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のプレイヤーの位置を単純に補間することができる補間です。
さらに、私はより正確なタイマーを取得する必要があることを認識しています。
この関数は、(http://en.wikipedia.org/wiki/Integral)[微積分からの積分]です。あなたはタイマーイベントについて質問しているようです。これらはお互いに関係がありません。 – chrisaycock
@chrisaycock混乱して申し訳ありません。質問が更新されました。 –
あなたは統合を行っているが、統合を行っていないと言っているので、確かに混乱している。はい、基本的な計算からの統合です。 –