Цикл таймера, отображающий 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;

Другие вопросы по тегам