게임 아키텍처에 대한 질문이 있습니다. 다른 구성 요소가 서로 통신하는 가장 좋은 방법은 무엇입니까?
이 질문이 이미 백만 번 요청 된 경우 정말 사과하지만 원하는 종류의 정보가있는 항목을 찾을 수 없습니다.
나는 처음부터 게임을 구축하려고 노력했고 (중요한 경우 C ++) 영감을 얻기위한 오픈 소스 게임 소프트웨어 (Super Maryo Chronicles, OpenTTD 및 기타)를 관찰했습니다. 이러한 많은 게임 디자인이 렌더 대기열, 엔티티 관리자, 비디오 관리자 등과 같은 곳에서 전역 인스턴스 및 / 또는 싱글 톤을 사용한다는 것을 알았습니다. 글로벌 인스턴스와 싱글 톤을 피하고 가능한 한 느슨하게 결합 된 엔진을 만들려고 노력하고 있지만 효과적인 디자인 경험이 부족한 장애물을 겪고 있습니다. (이 프로젝트의 동기 중 일부는이 문제를 해결하는 것입니다.)
GameCore
다른 프로젝트에서 볼 수있는 전역 인스턴스와 유사한 멤버가 있는 하나의 기본 개체 (예 : 입력 관리자, 비디오 관리자, GameStage
모든 엔터티 및 게임 플레이를 제어 하는 개체)가 있는 디자인을 만들었 습니다. 현재로드 된 단계 등). 문제는 모든 것이 GameCore
객체에 집중되어 있기 때문에 다른 구성 요소가 서로 통신하기 쉬운 방법이 없다는 것입니다.
예를 들어, 게임의 구성 요소가 다른 구성 요소와 통신해야 할 때마다 (예 : 적의 오브젝트가 렌더 대기열에 자신을 추가하여 렌더 스테이지에 그려지기를 원할 때) Super Maryo Chronicles를 보면 글로벌 인스턴스.
저에게 게임 오브젝트가 관련 정보를 GameCore
오브젝트로 다시 전달 하도록해야 GameCore
오브젝트가 해당 정보를 필요한 시스템의 다른 컴포넌트 (예 : 위의 상황에서 각 적 오브젝트)로 해당 정보를 전달할 수 있습니다 렌더링 정보를 GameStage
객체로 다시 전달하여 객체를 모두 수집하고 다시 전달하여 렌더링 GameCore
을 위해 비디오 관리자에게 전달합니다. 이것은 정말로 끔찍한 디자인처럼 느껴지며, 이것에 대한 해결책을 생각하려고했습니다. 가능한 디자인에 대한 나의 생각 :
- 글로벌 인스턴스 (Super Maryo Chronicles, OpenTTD 등의 디자인)
- 갖는
GameCore
모든 개체가 통신되는 중개인과 같은 객체 행위 (현재의 디자인은 상술 한) - 구성 요소와 대화해야 할 다른 모든 구성 요소에 대한 포인터를 제공하십시오 (예 : Maryo 예에서 적군은 대화해야하는 비디오 객체에 대한 포인터를 갖습니다)
- 게임을 하위 시스템으로 분할-예를 들어 하위 시스템의
GameCore
개체 간 통신을 처리 하는 개체에 관리자 개체가 있습니다. - (다른 옵션? ....)
위의 옵션 4가 최상의 솔루션이라고 생각하지만 디자인에 문제가 있습니다. 아마도 내가 글로벌을 사용하는 것으로 보았던 디자인과 관련하여 생각했기 때문일 것입니다. 현재 디자인에 존재하는 것과 동일한 문제를 겪고 작은 규모로 각 하위 시스템에 복제하는 것 같습니다. 예를 들어, GameStage
위에서 설명한 개체는 다소 시도했지만 GameCore
개체가 여전히 프로세스에 관여합니다.
누구든지 여기에 디자인 조언을 제공 할 수 있습니까?
감사!