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

1

永远不要在游戏循环中使用 java 的 Timer 类。它不够精确,无法可靠使用。相反,请查看链接以查看一些用 java 编写的可靠游戏循环。

于 2013-06-23T20:31:36.877 回答
0

一个小提示,只是一个警告。你的计时机制有点缺陷。
考虑到此代码在编写时逐行运行,您将“浪费”时间。这个

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

代码执行以下操作:
1. 获取当前时间。
2.做一些数学。
3.调用String构造函数。
4. 执行字符串连接。
5. 将当前时间写入lastTime变量。

请注意,第1第 5种情况下的当前时间是不同的。这意味着这个时间从“延迟: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()每个周期调用一次,getDelta()每次你想从上一次迭代中获取时间时调用。

于 2013-06-28T07:15:55.800 回答