Добрый вечер
У автора одной известной статьи по геймдеву приводится такой код главного цикла игры:
double t = 0.0;
const double dt = 0.01;
double currentTime = hires_time_in_seconds();
double accumulator = 0.0;
while ( !quit )
{
double newTime = hires_time_in_seconds();
double frameTime = newTime - currentTime;
currentTime = newTime; // (1)
accumulator += frameTime;
while ( accumulator >= dt )
{
integrate( state, t, dt );
accumulator -= dt;
t += dt;
}
render( state );
}
Мне кажется, или этот код неверен? Разве обновление curent_time не должно происходить внутри цикла в виде
current_time += dt
Я для теста написал такой тест на питоне:
#!/usr/bin/env python3
import time
import random
dt = 0.1
acc = 0.0
current_time = time.time()
start_time = current_time
c = 0
for i in range(1000):
new_time = time.time()
frame_time = new_time - current_time
# current_time = new_time
acc += frame_time
while (acc >= dt):
current_time += dt
acc -= dt
print(current_time)
time.sleep(random.random() * 0.1)
Кусок выхлопа:
1408807032.2563388
1408807032.3563387
1408807032.4563386
1408807032.5563385
1408807032.6563385
1408807032.7563384
1408807032.8563383
1408807032.9563382
Кадры идут строго каждые 0.1 секунд. В той статье ошибка?