2015-12-27 18 views
5

LIBGDXのデルタ時間とは何ですか?私はそれに関する多くの記事を読んだ。私の知る限りでは、デルタ時間は、前と現フレームとの間の時間ギャップ LIBGDXのデルタ時間とは

  • デルタ時間が第2のすなわちあたりのXフレームのその計算以来、1件まで追加します。(フレームの1/x)から、

    • あります
    • 我々は60 * DTを言うなら、それは関係なく、(例えば)モバイルの速度が何であるかを、毎秒60個のフレームを移動しないだろう、我々はDT

      を使用するゲームのために速度を一定にします。

      これは私がデルタ時間について知っていることですが、デルタ時間を渡している更新メソッドまたはレンダリングメソッドのためであるが、私たちが計算を指定しているコードPER SECONDのために?例えば

    public void update(float dt) 
        { 
         float distance +=2*dt; 
        } 
    

    このコードは、毎秒2つのフレームを移動させるのだろうか?もしそうなら、以下のコードは何をしますか?

    public void update(float dt) 
        { 
         .... 
        } 
        public void render(float delta) 
        { 
         update(delta); 
        } 
    

    ので、私は答えを必要とする、上記のコードが暗示されているもの

    • 実際にコードの背後には何が起こっていますか?
    • なぜそうしていますか?
    • このコードでは、上記の例のように毎秒xフレームを移動する必要があります。

      デルタタイムを更新メソッドに渡しているレンダリングメソッドがわかりましたが、私はそれについて明確なビューが必要です。申し訳ありませんが、質問が愚かなようだが実際に何が起こっているか知っていなくても進んでいくのは本当に難しいです。

  • 答えて

    15

    Gdx.graphics.getDeltaTime()以前の開始とrender()への現在の通話の開始までの時間です。それはあなたのScreen#render()メソッドで得られる価値です。それでおしまい。黒い魔法か何か。それは現在の時間を取り、それから前の時間を減算するだけです。この値のunitは秒です。それは1つまで加算されないことに注意してください。

    したがって、メソッドが呼び出された前回の時刻が6:51:30.0159512 pmで、呼び出された現在時刻が6:51:30.0324858 pmの場合、その差は0.0165346 secondsです。

    速度(速度)は、1秒あたりの「単位」で測定されます。たとえば、meter per secondまたはshort:m/sです。あなたの車が360 m/sに移動し、経過時間が0.0165346 sである場合、その時間内に移動した距離は0.0165346*360 s*m/s =>5.952456 mなので、ほぼ6メートルです。

    これは基本的な物理学であり、libGDXに固有のものではないことに注意してください。あなたがそれを理解することが難しいと思えば、あなたはvelocityで読んでみたいかもしれません。

    私はあなたのレンダリングメソッドを別の更新メソッドに分割していると考えています。

    • コードは何かを暗示していない
    • 明確に定義された短いメソッドを使用してコード
    • の背後に何が良い方法は通常はありません
    • は、読み:あなたは「フレーム」によって何を意味するかseparation of concerns
    • 見当もつかない速度を時間に掛けて 距離を取得
    +0

    ありがとうございます。この時間差(デルタタイム)を更新メソッドに渡す理由を教えてください。なぜそれは有用ですか?私は最初の例の説明を理解しましたが、2番目の例ではなぜそうしていますか?メソッドを更新するためにデルタタイムを渡すときに何を明らかにしようとしていますか?どのように役に立つのですか?@Xoppa – Anusha

    +0

    更新メソッドにデルタタイムの引数があるのはなぜですか?これはあなたが作成したメソッドです。libGDXの一部ではありません。あなたはそうする必要はありません。しかし、通常は、あなたのゲームの更新をそれをレンダリングから切り離したいと思っています(私の最後のリンクを見てください)。ゲームを更新するには、車をその新しい位置に設定して、移動した距離を知るためにはデルタ時間が必要です。読みやすく、保守しやすいので便利です。更新メソッドの内容をレンダリングメソッドに安全に移動できます。最後のリンクとは別に、あなたはOOPを読みたいかもしれません。 – Xoppa

    1

    これは、それが外に出ているより簡単です。デルタタイムは、最後のレンダリングコールから何秒経過したかです。 displacement = velocity * time以降、オブジェクトのベロシティにデルタ時間を掛けて、最後のレンダーコール以降に移動した距離を取得します。速度は1秒あたりの単位です。これは、コードの定数でも、加速の影響を受ける場合に計算するものでもかまいません。使用する距離単位はあなた次第です。それらはメートル、ピクセル(様々なデバイスが異なるスクリーン寸法を有するので良い考えではない)または他の任意の距離単位であり得る。

    デルタ時間が1に加算されるとは言っても意味がありません。最後のフレームからの秒数(これは通常1.0よりはるかに少ない)です。

    秒単位で何かを移動したいと言っても意味がありません。あなたは何かを1秒間に距離単位で移動したいと思っています。

    最初のコード例はコンパイルできません。あなたは

    myObject.position.x += 5*dt; 
    

    のような何かを書くした場合でも、これは、あなたのオブジェクトは、毎秒5個の距離単位で水平に移動しますので、それに応じて水平方向の位置を更新している意味します。

    関連する問題