최근에 Game Loops에서이 기사를 읽었습니다 : http://www.koonsolo.com/news/dewitters-gameloop/
그리고 권장되는 마지막 구현은 나를 깊이 혼란스럽게합니다. 나는 그것이 어떻게 작동하는지 이해하지 못하며 완전한 혼란처럼 보입니다.
본인은 원칙을 이해합니다. 게임을 일정 속도로 업데이트하고 남은 것은 가능한 한 여러 번 게임을 렌더링합니다.
나는 당신이 사용할 수 없다고 생각합니다 :
- 25 틱에 대한 입력 받기
- 975 틱을위한 게임 렌더링
두 번째 부분의 첫 번째 부분에 대한 입력을 받고 접근하는 것이 어떻습니까? 아니면 기사에서 무슨 일이 일어나고 있습니까?
본질적으로 :
while( GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP)
그게 어떻게 유효합니까?
그의 가치를 가정합시다.
MAX_FRAMESKIP = 5
메인 게임 루프가 500이되기 전에 초기화 후 순간이 할당 된 next_game_tick를 가정 해 봅시다.
마지막으로, 게임에 SDL과 OpenGL을 사용하고 있으며 렌더링에만 OpenGL을 사용하는 경우 GetTickCount()
SDL_Init가 호출 된 이후의 시간 을 반환 한다고 가정 해 봅시다 .
SDL_GetTicks -- Get the number of milliseconds since the SDL library initialization.
출처 : http://www.libsdl.org/docs/html/sdlgetticks.html
저자는 또한 이것을 가정합니다 :
DWORD next_game_tick = GetTickCount();
// GetTickCount() returns the current number of milliseconds
// that have elapsed since the system was started
while
진술 을 확장하면 다음과 같은 결과를 얻습니다.
while( ( 750 > 500 ) && ( 0 < 5 ) )
750 이후 시간이 지났으므로 750 next_game_tick
이 지정되었습니다. loops
기사에서 볼 수 있듯이 0입니다.
while 루프에 들어갔습니다. 논리를 수행하고 입력을 받아들입니다.
야다 야다 야다.
while 루프가 끝나면 메인 게임 루프 안에 있음을 상기시킵니다.
next_game_tick += SKIP_TICKS;
loops++;
while 코드의 다음 반복이 어떻게 보이는지 업데이트합시다
while( ( 1000 > 540 ) && ( 1 < 5 ) )
루프의 다음 ineteration에 도달하기 전에 시간이 입력을 받고 작업을 수행했기 때문에 1000 입니다. 여기서 GetTickCount ()가 호출됩니다.
540 인해 코드 25분의 1,000 = 40, 따라서, 500 + 40 = 540
1 루프가 한 번 반복 되었기 때문에
5 , 당신은 이유를 알고 있습니다.
그래서이 While 루프는 명확하게 작동 MAX_FRAMESKIP
하고 의도 된 TICKS_PER_SECOND = 25;
게임이 아니기 때문에 게임이 올바르게 실행되는 방법은 무엇입니까?
이것을 코드에 구현했을 때 사용자 입력을 처리하고 기사 작성자가 예제 코드에 가지고있는 것에 게임을 그리는 기능을 단순히 이름을 바꿀 때 정확하게 추가 할 수 있다는 것은 놀라운 일이 아닙니다. .
fprintf( stderr, "Test\n" );
게임이 끝날 때까지 인쇄되지 않는 while 루프 내부를 배치했습니다 .
이 게임 루프는 가능한 한 빨리 렌더링하면서 어떻게 초당 25 회 실행되고 보장됩니까?
나에게, 거대한 무언가를 놓치지 않으면, 그것은 ... 아무것도 보이지 않습니다.
그리고이 while 루프의 구조가 초 당 25 번 실행되고 기사 시작 부분에서 미리 언급 한 것과 정확히 일치하는 게임이 아닌가?
그렇다면 왜 우리는 다음과 같은 간단한 일을 할 수 없었습니까?
while( loops < 25 )
{
getInput();
performLogic();
loops++;
}
drawGame();
그리고 다른 방법으로 보간을 계산합니다.
나의 긴 질문을 용서하지만이 기사는 나에게 좋은 것보다 더 큰 해를 끼쳤다. 나는 지금 매우 혼란스러워하며 이러한 모든 질문으로 인해 적절한 게임 루프를 구현하는 방법을 모릅니다.