0

私は自分のレーシングゲームのためにアンドロイドとオープンGLを使って時間を稼ごうとしています。

私のコードは次のとおりです。

 deltaTime = (System.currentTimeMillis() + startTime) / 1000000000000.0f;
 startTime = System.currentTimeMillis();
 tickTime += deltaTime;
 DecimalFormat dec = new DecimalFormat("#.##");
 Log.d("time", dec.format(tickTime/100));

しかし、それは少し速すぎます。

4

2 に答える 2

2

Android Breakout を少し見てみたいと思うかもしれません:

http://code.google.com/p/android-breakout/source/browse/src/com/faddensoft/breakout/GameState.java#1001

計算は似てSystem.nanoTime()いますが、単調クロックを使用する を使用していることに注意してください。System.currentTimeMillis()壁掛け時計を使用する は使用したくありません。デバイスがネットワークに接続されている場合、壁の時計が更新される可能性があり、これにより、前後に大きなジャンプが発生する可能性があります。

このコードには、あまり重要ではないように思われる (無効化された) フレームレートの平滑化実験も含まれています。

あなたが発見したと思うように、このアプローチの鍵は、フレーム間の時間間隔が一定ではなく、表示更新頻度の固定概念ではなく、実際に経過した時間に基づいてゲームの状態を更新する必要があることを認識することです。

于 2013-01-15T20:56:28.483 に答える
0

ミリ秒単位で作業しているので、1000000000000.0f ではなく 1000f で割るべきではありませんか?

于 2013-01-02T20:20:06.933 に答える