게임 루프 내에서 게임 일시 정지


12

게임 루프 내에서 P를 누르면 게임이 일시 중지됩니다. 즉, 게임 루프가 더 이상 실행되지 않습니다. 문제는이 루프가 정지 된 후에 루프 자체 내부에 있었기 때문에 P를 다시 눌러 루프를 재개 할 수 없다는 것입니다. P를 다시 누르면 루프가 다시 작동하도록 만드는 방법은 무엇입니까?

답변:


20

게임을 일시 정지 할 때 실제로 게임 루프를 멈추지 마십시오. 대신 bool 변수를 추가해야합니다.이 변수는 게임이 일시 중지되었는지에 따라 true / false로 변경됩니다. 게임이 일시 중지 된 경우 게임 업데이트 만 중지해야하지만 입력에서 업데이트를받는 것을 포함하여 현재 프레임을 계속 렌더링 할 수 있습니다.

if(gameIsPaused == false)
{
    // run updates
}
checkInput();
render();

checkInput한 모드에서만 사용 가능한 일부 컨트롤이있을 수 있으므로 일시 중지 모드와 일시 중지되지 않은 모드에 대해 다른 기능을 원할 수 있습니다 . checkInput일시 정지 모드 의 기능 P은 눌렀을 때만 보는 것 외에는 아무것도 할 수 gameIsPaused = false없지만 일부 게임은 일시 정지 화면에 추가 기능을 추가합니다 (90 년대에는 일시 정지 화면을 치트 코드의 숨겨진 입력으로 사용하는 것이 일반적이었습니다) 게임을 메뉴 화면과 결합하는 것을 좋아합니다).
Philipp

1
일반적으로 귀하의 답변에 동의하지만, 때때로 일시 중지 상태에서 일부 업데이트 를 실행하는 것이 완벽하게 유효하다고 명시 적으로 언급해야한다고 생각합니다 . 예를 들어 메뉴 항목 또는 일부 오디오 관리에 애니메이션을 적용합니다. 가장 큰 아이디어는 일시 중지 조건을 사용하여 다른 checkInput/ render/ update호출 집합으로 분기 할 수 있다는 것입니다 .
Nicholas Miller

게임을 일시 중지해야하는 유일한 것은 "업데이트 월드"비트를 건너 뛰어야한다는 것입니다. 다른 모든 기능은 정상적으로 유지되어야합니다.
Mooing Duck

4
게임 프로그래밍에서 매우 기본적인 내용이므로 질문자를 혼동하지 않기 때문에 가능한 한 간단하게 답변을 유지하려고했습니다.
Katu

1
@ user3730788 : 매번 잘못 예측하더라도 게임 루프 당 한 번 실행되는 분기 (즉, 초당 100 회 미만)는 눈에 띄는 성능 영향을 미치지 않습니다 .
Ilmari Karonen

1

P를 누르면 게임 상태 "일시 정지됨"을 처리하고 P를 다시 눌러 원래 게임 루프로 다시 전환 할 수있는 다른 루프로 전환됩니다.

실제로이 모든 것을 게임 루프 자체에 넣고 상태 변수를 도입 할 수 있습니다. 원하는 경우 루프를 끄는 대신 상태 변수가 루프 내에서 각 상태 별 코드 실행간에 전환됩니다.

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