게임 개발이 처음입니다. 배우기 위해 안드로이드 플랫폼 에서이 게임을 재현 하고 있습니다. 위의 링크에서 게임 플레이 비디오를 볼 수 있습니다. 간단한 게임입니다.
게임 개발을 시작하는 방법에 대한 많은 기사를 읽었으며 거의 모든 게임은 별도의 스레드에서 게임 루프를 사용하는 것이 좋습니다. 그러나이 특정 게임의 경우 별도의 스레드를 시작해야합니까?
게임 개발이 처음입니다. 배우기 위해 안드로이드 플랫폼 에서이 게임을 재현 하고 있습니다. 위의 링크에서 게임 플레이 비디오를 볼 수 있습니다. 간단한 게임입니다.
게임 개발을 시작하는 방법에 대한 많은 기사를 읽었으며 거의 모든 게임은 별도의 스레드에서 게임 루프를 사용하는 것이 좋습니다. 그러나이 특정 게임의 경우 별도의 스레드를 시작해야합니까?
답변:
게임 루프는 단순 하기 때문에 일반적으로 권장 됩니다. 루프를 사용하여 거의 모든 게임을 올바르게 개발하고 실행할 수 있으며 대부분의 게임이 제대로 작동하려면 게임이 필요합니다.
예를 들어, 대부분의 물리 엔진은 적절한 시뮬레이션을 위해 안정적인 지속적인 업데이트가 필요합니다. 애니메이션 및 기타 동적 컨텐츠 및 그래픽은 매번 변경 될 때마다 업데이트해야합니다 .
이제 루프가 별도의 스레드에서 실행될 필요가 없습니다. 실제로 대부분의 게임은 단순성을 위해 메인 스레드에서 루프를 실행합니다. 내 안드로이드 프로젝트 조차도이 원칙을 따릅니다.
여기서 실제 질문은 어떤 대안 을 제안합니까? 입력을 안정적으로 얻는 방법, 업데이트를 수행하고 적합한 프레임을 그리는 방법에 대한 다른 아이디어가 있다면 계속하십시오! 그렇지 않으면 게임 루프가 가장 쉬운 방법 일 수 있습니다.
아니요 , 별도의 스레드가 필요하지 않습니다. 너무 강렬한 일을하지 않으면 (우리가 보여준 게임의 경우와 같지 않음) 모든 것이 메인 스레드에서 수행 될 수 있습니다.
많은 처리를 수행하거나 UI / 입력이 응답하지 않는 문제가 발생하는 경우 두 번째 스레드가 필요합니다. 예를 들어,보다 복잡한 게임에서는 AI가 다음 움직임을 계산할 때 UI / 입력이 응답하지 않게하고 싶지 않습니다. 게임이 주로 사용자 입력에 반응하고 비주얼을 업데이트하는 것처럼 보이므로 두 번째 스레드는 필요하지 않습니다.
"루프가 필요합니다"라는 원래 질문에 대한 답변.
아니요 , 그러나 대안은 더 복잡하고 구현하기가 어렵고 거의 사용되지 않습니다.
게임은 정의상 대화식입니다. 최소한 입력 대기 및 출력 업데이트입니다. 가장 간단한 방법은 with 루프입니다. 이를 위해 새로운 스레드를 생성 할 필요는 없습니다.
언급 한 게임은 단순 해 보이지만 대화 형 시각 효과와 사운드가 있으며 사용자 입력에 따라 지속적으로 업데이트합니다.
게임 루프에 대한 대안도 많지 않습니다. 어떤 종류의 인터럽트 기반 시스템이 가능할 수 있습니다. 그러나 이러한 시스템은 복잡성을 증가시키고 결정론과 같은 다른 요소를 줄입니다. 게임 루프가 매우 일반적인 이유는 구현하기 쉽고 이해하기 쉽고 유연하며 훌륭한 일을하는 것입니다.
실제 질문에 대한 답변 (게임 루프는 별도의 스레드에 있어야 함) :
사람들이 종종 별도의 스레드를 사용하도록 권장하는 이유는 UI 상호 작용을 방해하기 위해 많은 처리를 원하지 않기 때문입니다. 당신은 별도의 스레드가 필요한 경우 알 수있는 유일한 사람입니다 당신의 게임. 현재 디자인의 주요 게임 루프가 UI의 응답 시간을 방해 할 수 있다면 엔진과 프레임 워크에 전적으로 달려 있습니다. 다르게 생각할 이유가 없다면 일반적으로 (작은 프로젝트에서는) 그렇지 않다고 생각합니다.
코드를 별도의 스레드로 유지하는 또 다른 이유는 코드를 모듈 식으로 단순하게 유지하기 위해서입니다. 서로 관련이없는 두 개의 코드 조각을 혼합하면 장기적으로 코드를 읽기 어렵고 유지 관리하기 어려워 질 수 있습니다.
게임 루프는 별도의 스레드에서 실행해야합니까? 혹시. 응답 시간이나 코드에 문제가 있고 많은 처리와 상관없이 응답하기 위해 여러 UI 항목이 필요하거나 단순히 디자인상의 이유로 동시에 발생하는 특정 작업으로 코드를 나누고 싶다면 함께 진행하십시오. 그러나 고급 프로그래밍 실습으로 간주됩니다 .
간단하지만 설명하기 어려운 예는 2 인용 게임입니다. 사용자 입력을 처리하고 플레이어 캐릭터 인스턴스의 상태 변경으로 변환하는 클래스의 두 인스턴스를 실행할 수 있습니다.
일부 프레임 워크는 ActionScript3.0과 같은 이벤트 및 인터럽트 기반 시스템을 사용하도록 권장 / 요구합니다. 이러한 경우 루프 코드는 일반적으로 OnEnterFrame
이벤트 또는 초당 20-60 또는 120 회 발생하는 유사한 이벤트 로 이동합니다 .
원래 질문에 대한 답변 (주 루프가 필요합니까) :
그것은 모두 프로그램 카운터 로 귀결됩니다 . 미리 결정된 시간 이상 실행되는 코드를 생성 하지 않는 게임을 만드는 경우, 사용자의 PC에 이미 처리 한 지침과 변경 될 수있는 사항을 반복하도록 요청해야합니다. 그 동안의 상태는 게임의 오브젝트와 글로벌에 저장된 값입니다.
지시 사항을 반복해야한다는 것을 알고 있으므로이 태스크를 완료하고 동일한 지시 사항을 계속 처리하는 몇 가지 방법이 있습니다. 이 모든 방법에는 프로그램 카운터를 현재 관련 명령으로 다시 이동시키는 것이 포함됩니다. 코드를 반복하게하는 가장 일반적인 제어 흐름 문을 루프라고하며, 다른 하나는 goto
현대 코드에서 거의 사용되지 않으며이 경우에도 비슷한 영향을 미칩니다 (완전히 사용자와 관련이 없음).
따라서 이전 질문에 대답하려면 루프가 필요합니까? 예, 그렇습니다