게임 시간 진행을 유저 입력, 프로세서 속도와 디커플링한다.
게임 루프는 게임하는 내내 실행된다. 한 번 돌 때마다 멈춤 없이 유저 입력을 처리한 뒤 게임상태를 업데이트하고 게임화면을 렌더링한다. 시간흐름에 따라 게임플레이 속도를 조절한다.
플랫폼의 이벤트 루프에 맞춰야 할 수도 있다.
double previous = getCurrentTime();
double lag = 0.0f;
while (true)
{
double current = getCurrentTime();
double elapsed = current - previous;
previous = current;
//프로세스가 처리되면서 지연된 시간을 구한다.
lag += elapsed;
processInput();
//lag는 실제 시간에 비해 게임 시간이 얼마나 뒤쳐져 있는 지를 의미한다.
//게임 시간이 실제 시간를 따라잡을 때까지 반복한다.
while (lag >= MS_PER_UPDATE) {
update();
lag -= MS_PER_UPDATE;
}
//지연시간을 정규화한다.
//렌더링 함수 내에서는 예상 위치를 이용해 위치를 보간한다.
render(lag / MS_PER_UPDATE);
}