Java LWJGL定时器不工作?
我的控制台中不断出现很多“Delta:0.0”,而且几乎没有几行像“Delta:9.999275207519531E-4”这样的内容,发生了什么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
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
变量
请注意,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;
}
其中,updateTime()
在每个循环中调用一次,而getDelta()