Я создаю игру на Java. У меня есть игровой цикл, который запускается только 60 раз в секунду, как показано ниже:
public void run() {
double variable = 0;
init();
double delta, start, now, lastTime;
double fps = 60.0;
double timePerUpdate = 1000000000 / fps;
delta = 0;
lastTime = System.nanoTime();
start = lastTime;
while (running) {
now = System.nanoTime();
delta += (now - lastTime) / timePerUpdate;
lastTime = now;
if (delta >= 1) {
variable += delta / fps;
delta = 0;
System.out.println((now - start) / variable / 1000000000);
}
}
stop();
}
Это очень упрощенно, но в основном показывает, что я делаю. У меня есть некоторая переменная, которую я хочу увеличивать на 1 каждую секунду, но увеличиваю ее примерно на 1/60 каждый кадр, так что в целом она увеличивается на 1 каждую секунду.
В конце обновления я печатаю общее прошедшее время, деленное на переменную, деленное на 1000000000 (преобразование в секунды).
Это должно вывести 1
, потому что переменная увеличивается на 1 каждую секунду, но вместо этого она печатает 0.8
, 0.9
, 0.95
, 0.99
, 0.999
и т. Д., Приближаясь к 1 Почему он не один?