Цикл таймера, отображающий 0 тиков вместо 60
У меня есть следующий код:
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". Почему это и как я могу это исправить?
1 ответ
Решение
После установки NetBeans для его отладчика я обнаружил, что дельта была отрицательным числом. Как оказалось, это была простая опечатка.
delta+=(now-lastTime)-ns;
должно быть delta+=(now-lastTime)/ns;