デルタタイムを使用して画面全体にスプライトを移動する方法についての初心者の質問です。デルタタイムを使用してスムーズな動きを実現するための簡単な方法
また、私はここで
私はデルタ時間を計算しています方法です...デルタ時間はこの場合であっても必要とされているか否かのアドバイスを探しています:
currentTime = System.currentTimeMillis();
if (lastTime == 0) {
lastTime = currentTime;
deltaTime = 0;
} else {
deltaTime = currentTime - lastTime;
lastTime = currentTime;
}
そして、私は何とか2次元空間のオブジェクトのためのより流動的な動きを作るためにこれを使いたかったのです。
public void move() {
this.mPos.y -= mSpeed;
}
をスレッドが絶えず動い()メソッドを呼び出し、それがうまく動作しますが、オブジェクトが画面全体でやや神経質です:
これは、オブジェクトを移動するための私の現在の方法です。このmove()メソッドにデルタタイムを組み込む方法に関するヒント最大速度を10に設定しようとしています。
はい、私は、このような状況では速度が意味をなさないと理解しています。私は、アニメーションをよりスムーズに実行できるように、長さに格納された値をどのように使用して量をスケールするかにもっと関心を持っています。 – ClownInTheMoon
スケーリングファクタ 'long velocityScale'があるとします。私はあなたの速度を位置の変更にその数だけ縮尺させるでしょう。 'mPos.y + = velocityScale * mVelocity * deltaTime'のようなものです。私はあなたの速度と位置を調整するのにちょっとだけ意味があるので、私は追加に切り替えましたが、それはあなた次第です。結果が何であるか見るために 'velocityScale'を試してみてください。私は1より小さい値があなたが見ているジッタに役立つと思います。あなたの 'deltaTime'は何ですか?あなたが時間間隔のあいだにあまりにも多くのことをして、ジッタを引き起こしているなら、それは高すぎることがあります。 – danielunderwood
OK、ちょっと遊びます。私がちょうど(カンマで区切って)キャプチャしたいくつかのdeltaTimeの値は次のとおりです:1480054902301、1480054902347、1480054902390。また、「上」の動きのためにあなたが追加に切り替わったと言いますか?オブジェクトは画面の最下部から開始しているので、どこに行く必要があるのかを知るには、y値を正の数から0に近づけなければなりません。 – ClownInTheMoon