Java 计时器循环显示0个刻度,而不是60个刻度
我有以下代码:Java 计时器循环显示0个刻度,而不是60个刻度,java,timer,nanotime,Java,Timer,Nanotime,我有以下代码: public void run(){ long lastTime=System.nanoTime(); final double amountOfTicks=60.0; double ns=1000000000/amountOfTicks; double delta=0; int updates=0; int frames=0; long timer=System.currentTimeMillis(); while
public void run(){
long lastTime=System.nanoTime();
final double amountOfTicks=60.0;
double ns=1000000000/amountOfTicks;
double delta=0;
int updates=0;
int frames=0;
long timer=System.currentTimeMillis();
while(running){
long now=System.nanoTime();
delta+=(now-lastTime)-ns;
lastTime=now;
if(delta>=1){
tick();
updates++;
delta--;
}
render();
frames++;
if((System.currentTimeMillis()-timer)>1000){
timer+=1000;
System.out.println(updates+" Ticks, FPS "+frames);
updates=0;
frames=0;
}
}
stop();
}
这应该显示“60个刻度,FPS 9000000”,但它会显示“0个刻度,FPS 9000000”。
这是为什么?我如何修复它?在为其调试器安装NetBeans之后,我发现delta是一个负数。事实证明,这只是一个简单的印刷错误
delta+=(现在是最后一次)-ns代码>应该是delta+=(现在是最后一次)/ns代码>在打印之前,您是否检查了更新
是否增加了一次?您的布尔参数running设置在提供的代码之外,因此现在很难确定while循环的结束。您是否记得首先将其设置为true?这是一个教科书上的调试问题。只需连接一个调试器并遍历代码,看看出了什么问题。循环正在工作。我在main
中调用了一个start
方法,该方法设置running=true
。滴答声和FPS计数器在控制台中以恒定速率显示,因此我确信它正在工作。@devnull如果(delta>=1)
是一个问题,为什么?