[게임 프로그래밍 패턴] 8. 게임 루프 패턴

WIGWAG·2023년 3월 16일

의도

게임 시간 진행을 유저 입력, 프로세서 속도와 디커플링한다.

설명

게임 루프는 게임하는 내내 실행된다. 한 번 돌 때마다 멈춤 없이 유저 입력을 처리한 뒤 게임상태를 업데이트하고 게임화면을 렌더링한다. 시간흐름에 따라 게임플레이 속도를 조절한다.

주의사항

플랫폼의 이벤트 루프에 맞춰야 할 수도 있다.

예제코드

	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);
	}
profile
프로그래밍 공부 기록 노트

0개의 댓글