메인 게임 루프는 어떻게 작성해야합니까? [닫은]


130

메인 게임 루프는 어떻게 작성해야합니까? 게임 루프에서해야 할 일과 게임 루프에서하지 말아야 할 일은 무엇입니까?

나는 그것들을 많이 썼지 만 게임 루프를 읽지 않았습니다. 나는 그것들을 상당히 향상시킬 수 있다고 확신하지만 어떻게 확신 할 수 없다.


4
사악한 답변 : 누군가 엔진을 사용 하여이 루프를 만드는 것은 어떻습니까? :)
user712092

사용자가 실행하려는 총 프레임 수를 물어보고 for 루프를 n 배의 버퍼 양으로 사용할 수 있습니다.
Uğur Gümüşhan 2016 년

답변:


121

메인 게임 루프는 세 가지 주요 작업을 처리합니다.

  1. 사용자 입력 받기
  2. 게임 상태 업데이트
  3. 게임을 그립니다

간단한 게임 루프는이 세 가지 작업을 하나의 while 루프로 숨 깁니다. 이것은 원하지 않는 결과가 있습니다 :

  1. 게임은 다른 컴퓨터에서 다른 속도로 실행됩니다.
  2. 100 % 사용으로 CPU가 불필요하게 페깅되었습니다.
  3. "게임 상태"/ 메뉴가 없거나 게임 코드와 혼합되었습니다.
  4. 메인 게임 루프는 매우 길고 유지하기가 어렵습니다.
  5. 코드를 다른 플랫폼으로 확장 / 포트하기가 어렵습니다.

고급 게임 루프는 위에 나열된 문제를 해결합니다. 다음은 유용한 기사입니다.

훌륭한 게임 루프 예제를 보려면 Allegro 스케이터 데모 게임을 살펴보십시오.

게임 루프는 대부분의 게임에서 종종 같은 유형의 작업을 수행하므로 일반화 된 게임 프레임 워크를 만드는 방법을 생각하고 있습니다. 하나의 게임 루프 구현을 작성하여 게임간에 공유하는 것이 좋습니다. 새 게임을 만들 때 작업을 저장하고 모든 게임에서 공유 게임 루프 개선 사항을 공유 할 수 있습니다 (예 : FPS 카운터 또는 화면 캡처 기능 추가).


1
그렇습니다. 의심스러워도 확실히 개선 할 수 있습니다. 잘 읽습니다. 또한 코드를 게시 해 주셔서 감사합니다. 이 물건으로 실제 게임 코드를 보는 것이 좋습니다.
hokiecsgrad

1
CPU 사용률 100 % (또는 코어가 2 개 이상인 경우 50 % 이상) 고정 되어야합니다 . 생각 해봐 "오,하지만 모든 CPU 를 사용하고 싶지는 않습니다 ." 라고 말하면서 다시 물리학, 살인자 그래픽을 얻는 방법은 무엇입니까? 그렇습니다. 가능하다면 CPU의 100 %를 사용해야합니다 (즉, 오늘날 컴퓨터에서는 멀티 스레딩을 의미하므로 실제로는 항상 4 개의 코어 중 100 %를 사용하는 것이 매우 어렵습니다). 실행중인 컴퓨터를 최대한 활용하십시오.
bobobobo

5
다음을 추가 할 수 있습니다 : 데스크탑 프로그램 . 휴대용 장치에서는 훨씬 더 많은 배터리를 사용하므로 100 % 사용에 대해 걱정할 것입니다.
bobobobo

1
@ user6003859 : 링크를 수정했습니다.
Leftium

1
또 다른 유용한 링크 : gameprogrammingpatterns.com/game-loop.html
brita_

51

강력한 프레임 속도 독립성에 대한 글렌 피들러의 기사,“ Fix Your Timestep! ”을 추천합니다.

(현재 다루는 주제와 관련이 없지만 시리즈 의 다른 기사 도 매우 좋습니다. 그의 사이트의 모든 내용과 마찬가지로!)


이것들은 정말 좋은 기사입니다. 게시 해 주셔서 감사합니다!
hokiecsgrad

1
강력한 프레임 속도 독립적 구현을위한 권장 사항을 두 번째로 제시합니다. 게임의 모든 것은 주기적으로 업데이트하는 델타 값으로 구현되어야합니다. 다음 프레임으로 진행할 때 반드시 그럴 필요는 없습니다. 실제로 프레임을 건너 뛴 경우 실제로 2x 델타로 업데이트 메소드를 호출하고 싶지 않을 것입니다. 동일한 델타로 업데이트를 두 번 호출하는 것이 더 일관 적입니다. 프레임 속도 및 업데이트주기 관련 문제를 배우려면 시간을 내야합니다. 나중에 시간을 절약 할 수 있습니다.
Dennis Munsie

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.