0

コンソールに「Delta: 0.0」が何度も表示され、「Delta: 9.999275207519531E-4」のような行が数行表示されます。何が起こっているのですか?

    Timer timer = new Timer();
    float lastTime = 0.0f;
    timer.resume();
    while (!Display.isCloseRequested())
    {
        timer.tick();
        System.out.println("Delta: " + (timer.getTime() - lastTime));

        lastTime = timer.getTime();

        Display.update();
    }

    Display.destroy();
4

2 に答える 2

0

ちょっとした注意、ただの警告です。あなたのタイミングメカニズムには少し欠陥があります。
このコードが記述されているとおりに 1 行ずつ実行されることを考慮すると、時間を「失う」ことになります。これ

System.out.println("Delta: " + (timer.getTime() - lastTime));
lastTime = timer.getTime();

コードは次のことを行います。
1. 現在の時刻を取得します。
2. 計算をする。
3. String コンストラクターを呼び出します。
4. 文字列連結の実行。
5. 現在時刻をlastTime変数に書き込みます。

15のケースでは現在時刻が異なることに注意してください。つまり、今回は「Delay: xx」出力から「失われた」ことを意味します。

前回の反復から経過した時間を取得する目的でコード内でテクニックを使用し続けると(timer.getTime() - lastTime)、さまざまなイベントが前回の反復から経過した時間が異なると考えるという問題に確実に遭遇します。タイミングのために次のコードを使用することをお勧めします。

private double delta;
private long timing;

public void updateTime()
{
    long newTime = System.nanoTime();
    this.delta = (newTime - this.timing) / 1_000_000_000.0;
    this.timing = newTime;
}

public double getDelta() {
    return this.delta;
}

whereupdateTime()はサイクルごとに 1 回getDelta()呼び出され、前の反復から経過した時間を取得するたびに呼び出されます。

于 2013-06-28T07:15:55.800 に答える