Java LWJGL定时器不工作?

Java LWJGL定时器不工作?,java,lwjgl,timedelta,delta,Java,Lwjgl,Timedelta,Delta,我的控制台中不断出现很多“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("Del

我的控制台中不断出现很多“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();

不要在游戏循环中使用java的定时器类。它不够精确,无法可靠地使用。相反,请查看链接以查看用java编写的两个可靠的游戏循环。

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

System.out.println("Delta: " + (timer.getTime() - lastTime));
lastTime = timer.getTime();
代码执行以下操作:
1.正在获取当前时间。
2.做一些数学。
3.正在调用字符串构造函数。
4.正在执行字符串连接。
5.将当前时间写入
lastTime
变量

请注意,15案例中的当前时间是不同的。这意味着“延迟: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;
}
其中,
updateTime()
在每个循环中调用一次,而
getDelta()