2013-06-22 36 views
0

我在控制台中不断收到很多“Delta:0.0”,并且有几行我收到类似“Delta:9.999275207519531E-4”的消息,这是怎么回事?LWJGL定时器不工作?

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(); 

回答

1

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

0

一个小纸条,只是一个警告。你的计时机制有点缺陷。
考虑到这段代码在写入时一行接一行地运行,你会“放松”时间。这

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

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

注意当前时间在和箱子是不同的。这意味着这次是从“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; 
} 

其中updateTime()被称为每循环一次,getDelta()是叫你想从先前的迭代时间的推移每次。