컴포넌트 기반 게임 오브젝트 시스템을 만들고 있습니다 . 몇 가지 팁 :
GameObject
단순히의 목록입니다Components
.- 있습니다
GameSubsystems
. 예를 들어, 렌더링, 물리 등 각각GameSubsystem
에 대한 포인터가 포함되어 있습니다Components
.GameSubsystem
매우 강력하고 유연한 추상화입니다. 게임 세계의 모든 조각 (또는 측면)을 나타냅니다.
등록하는 메카니즘의 필요가 Components
있는 GameSubsystems
(언제 GameObject
만들어 구성된다). 있다 4 접근 방법 :
- 1 : 책임 사슬 패턴. 모든
Component
것이 모든 사람 에게 제공됩니다GameSubsystem
. 등록 할 항목 (및 구성 방법)을GameSubsystem
결정Components
합니다. 예를 들어 GameSubsystemRender는 렌더러 블 컴포넌트를 등록 할 수 있습니다.
찬성. Components
그것들이 어떻게 사용되는지 전혀 모른다. 낮은 커플 링. A. 새로운을 추가 할 수 있습니다 GameSubsystem
. 예를 들어 모든 ComponentTitle을 등록하고 모든 타이틀이 고유하고 타이틀별로 객체를 퀘스트하는 인터페이스를 제공하는 GameSubsystemTitles를 추가해 보겠습니다. 물론이 경우 ComponentTitle을 다시 쓰거나 상속해서는 안됩니다. B. 기존을 재구성 할 수 있습니다 GameSubsystems
. 예를 들어 GameSubsystemAudio, GameSubsystemRender, GameSubsystemParticleEmmiter를 GameSubsystemSpatial에 병합 할 수 있습니다 (모든 오디오, 이미 터를 배치 Components
하고 동일한 계층 구조로 렌더링 하고 부모 기준 변환을 사용하기 위해).
범죄자. 모든 점검. 매우 비효율적입니다.
범죄자. Subsystems
에 대해 알고 Components
있습니다.
- 2 : 각각 특정 유형을
Subsystem
검색합니다Components
.
찬성. 보다 더 나은 성능 Approach 1
.
범죄자. Subsystems
아직도 알고 Components
있습니다.
- 3 :에
Component
등록합니다GameSubsystem(s)
. 컴파일 타임에 GameSubsystemRenderer가 있다는 것을 알고 있으므로 ComponentImageRender는 GameSubsystemRenderer :: register (ComponentRenderBase *)와 같은 것을 호출합니다.
찬성. 공연. 에서처럼 불필요한 점검이 없습니다.Approach 1
.
범죄자. Components
와 (과) 잘못 연결되어 GameSubsystems
있습니다.
- 4 : 중재자 패턴.
GameState
(를 포함하는GameSubsystems
)는 registerComponent (Component *)를 구현할 수 있습니다.
찬성. Components
과GameSubystems
서로에 대해 아무것도 몰라.
범죄자. C ++에서는 추악하고 느린 typeid-switch처럼 보입니다.
질문 :
컴포넌트 기반 설계에서 어떤 방법이 더 좋고 주로 사용됩니까? 어떤 연습이 말합니다? 구현에 대한 제안Approach 4
무엇입니까?
감사합니다.
Components
하는 GameObjects
것은 내 질문의 범위를 벗어납니다. 구성 요소 기반 접근 방식에 대한 기사를 읽거나 관심이있는 경우이 사이트에 대한 질문을하십시오. 당신이 생각하는 GameSubsystem
것은 완전히 잘못입니다.