2016-11-25 4 views
0

デルタタイムを使用して画面全体にスプライトを移動する方法についての初心者の質問です。デルタタイムを使用してスムーズな動きを実現するための簡単な方法

また、私はここで

私はデルタ時間を計算しています方法です...デルタ時間はこの場合であっても必要とされているか否かのアドバイスを探しています:

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に設定しようとしています。

答えて

2

位置は速度によって移動すべきではありません - 単位は同じではありません!速度から位置を取得したい場合は、単位時間(例えば、deltaTimeなど)で何かを乗算する必要があります。

私はあなたのdeltaTimeが非常に小さくなると思うので、スプライトがよりゆっくり動くので、動きも滑らかになります。あなたはおそらく、あなたが現在使っているものよりも高い速度(またはより小さな位置範囲)を必要とするでしょう。 deltaTypeで速度を掛けても結果が得られない場合は、スケールファクターを加えて、それを調整してその違いを確認してみましょう。

+0

はい、私は、このような状況では速度が意味をなさないと理解しています。私は、アニメーションをよりスムーズに実行できるように、長さに格納された値をどのように使用して量をスケールするかにもっと関心を持っています。 – ClownInTheMoon

+0

スケーリングファクタ 'long velocityScale'があるとします。私はあなたの速度を位置の変更にその数だけ縮尺させるでしょう。 'mPos.y + = velocityScale * mVelocity * deltaTime'のようなものです。私はあなたの速度と位置を調整するのにちょっとだけ意味があるので、私は追加に切り替えましたが、それはあなた次第です。結果が何であるか見るために 'velocityScale'を試してみてください。私は1より小さい値があなたが見ているジッタに役立つと思います。あなたの 'deltaTime'は何ですか?あなたが時間間隔のあいだにあまりにも多くのことをして、ジッタを引き起こしているなら、それは高すぎることがあります。 – danielunderwood

+0

OK、ちょっと遊びます。私がちょうど(カンマで区切って)キャプチャしたいくつかのdeltaTimeの値は次のとおりです:1480054902301、1480054902347、1480054902390。また、「上」の動きのためにあなたが追加に切り替わったと言いますか?オブジェクトは画面の最下部から開始しているので、どこに行く必要があるのか​​を知るには、y値を正の数から0に近づけなければなりません。 – ClownInTheMoon

関連する問題