3

ゲームが一定の速度で更新されるように、固定タイムステップ ループを実装しようとしています。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 プレーヤーの位置の間を単純に補間できるためです。

また、より正確なタイマーを取得する必要があることも認識しています。

4

3 に答える 3

0

参照: http://en.wikipedia.org/wiki/Integral & http://en.wikipedia.org/wiki/Numerical_integration

この関数は、積分関数 (リンク 1) を近似するための数値手法 (リンク 2) です。

于 2012-05-07T04:01:52.037 に答える
-3

高校の物理の復習をするべきです。簡単に言えば、速度は時間の変化に対する距離の変化(dxdt)であり、加速度は時間の変化に対する速度の変化(dvdt)です。 t について積分することで速度を得ることができます。明らかに、これは非常に簡単な説明ですが、必要に応じて、より詳細なリファレンスがたくさんあります。

于 2012-05-07T04:08:38.770 に答える