2013-06-22 3 views
0

Я все время получаю много «Дельты: 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 в игровых циклах. Это недостаточно точно для надежного использования. Вместо этого посмотрите ссылку this, чтобы увидеть пару надежных игровых петель, написанных в java.

0

Одна маленькая записка, просто предупреждение. Ваш механизм синхронизации немного испорчен.
Учитывая, что этот код работает по строкам, поскольку он написан, вы «потеряете» время. Это

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

код выполняет следующие действия:
1. Получение текущего времени.
2. Выполнение некоторой математики.
3. Вызов конструктора строк.
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() вызывается каждый раз, когда вы хотите, чтобы получить время, прошедшее с предыдущей итерации.