0

私はそのように deltaTime を測定しています:

deltaTime = (System.nanoTime()-startTime) / 1000000000.0f;
            startTime = System.nanoTime();

しかし、常に異なる float 値を取得しているため、ゲームが途切れます。何が問題になるのでしょうか?

09-03 03:51:59.219: D/a(21807): 0.017184043
09-03 03:51:59.234: D/a(21807): 0.016405167
09-03 03:51:59.249: D/a(21807): 0.018071748
09-03 03:51:59.269: D/a(21807): 0.015293334
09-03 03:51:59.284: D/a(21807): 0.016080335
09-03 03:51:59.299: D/a(21807): 0.018669458
09-03 03:51:59.314: D/a(21807): 0.014720625
09-03 03:51:59.334: D/a(21807): 0.01605596
09-03 03:51:59.349: D/a(21807): 0.017086169
4

3 に答える 3

0

Androidゲームを始めるのは素晴らしい本ではありません。

フレームごとにデルタを測定する場合、計算では毎回異なる値が使用されます。これは、投射物の動きと自明でない物理学で非常に悪い結果を生み出します。最良の結果を得るには、デルタを適切な値(つまり、1/60)に修正し、開始から1/60未満の場合は、すべての描画の最後でスレッドを待機させます。

于 2012-12-01T16:55:55.327 に答える
0

「Beginning Android Games」の疑似コード フラグメントを次に示します。

float lastFrameTime = currentTime();
while(!userQuit()) {
    float deltaTime = currentTime() – lastFrameTime;
    lastFrameTime = currentTime();
    currentScreen.updateState(input, deltaTime);
    currentScreen.present(graphics, audio, deltaTime);
}

これが役立つかどうかはわかりません...

于 2012-09-03T03:34:35.793 に答える
0

このコードをフレームごとに実行している場合、これは 1 フレームのレンダリングにかかる​​時間です。

に基づいて計算を行う必要がある( x distance per second ) * deltaTimeため、1 秒あたりのフレーム数に基づいて滑らかなアニメーションが得られます。

于 2012-09-03T01:24:12.063 に答える