Одна маленькая записка, просто предупреждение. Ваш механизм синхронизации немного испорчен.
Учитывая, что этот код работает по строкам, поскольку он написан, вы «потеряете» время. Это
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()
вызывается каждый раз, когда вы хотите, чтобы получить время, прошедшее с предыдущей итерации.