2016-04-10 18 views
1
//Calculate time step 
    float timeStep = stepTimer.getTicks()/1000.f; 

    //Move for time step 
    dot.move(timeStep); 

    //Restart step timer 
    stepTimer.start(); 

このコードは、Lazy FooのSDLチュートリアルから抜粋して、可変タイムステップベースの動きシステムを生成する必要があります。私の主な質問はこれがどのように機能するかです。 float timeStep = stepTimer.getTicks()/1000.f;は、秒ので経過時間を計算します。したがって、最後の移動呼び出しから2ミリ秒が経過したとすると、timeStep varは0.02秒になります。コード内でどのように使えるのでしょうか?もし私が毎秒10ピクセルの一定速度を持っていて、その速度をどのフレームレートでも動作させたいのであれば、その値(0.02)でpx/sを掛けなければならないでしょう。ゲームエンジンの動きはどのように動作するのですか

ただし、これは次のようになりますposx += 10*0.02。私たちがちょうど学んだように、それは0.2ピクセルの値でポジションを増やすことを意味します(もちろん、これはうまく動作せず、その値はちょうどその値になります)。

私はここで何が欠けていますか?

答えて

4

コード内で位置変数を更新します。 (32ビット浮動小数点数は約7、64ビット浮動小数点数は14)浮動小数点値は小数点以下の変更を正確に受け入れます。

次に、それから画面に描画します。隣接する画素にしばらくして1つの画素しばらくの間、それが翻訳された(または丸め言う)されます

、など

あなたの間違いは、あなたが使用して(またはこのような方法でそれを解釈)ということであるピクセル位置データとしてのアドレス。画面には非常に限られた「数値スペース」しかありません。 0から2000の間の整数だけを使用して任意の数式を実行することを検討してください。あなたを遠くに連れてこないだろう。

4

あなたの質問から、私はあなたのオブジェクトの位置を、それが位置しているピクセルを表す整数座標として保存していることを確認します。だからあなたの質問に対する答えは、単にそれをしないことです。場所を浮動小数点値として保存します。おそらくピクセルの一部を表すか、他の測定値を使用します。描画システムで整数ピクセル座標が必要な場合は、描画ステージの座標に変換するだけで済みます。

関連する問題