구성 요소 기반 엔터티 디자인에 대해 머리를 숙이고 있습니다.
첫 번째 단계는 객체에 추가 할 수있는 다양한 구성 요소를 만드는 것이 었습니다. 모든 구성 요소 유형마다 관리자가있어 모든 구성 요소의 업데이트 기능을 호출하여 필요에 따라 키보드 상태 등을 전달합니다.
다음으로 객체를 제거하고 각 구성 요소에 ID가 있습니다. 따라서 개체는 동일한 ID를 가진 구성 요소로 정의됩니다.
이제 모든 구성 요소에 대한 관리자가 필요하지 않다고 생각합니다 (예 SizeComponent
: Size
속성 이있는 ). 결과적으로 SizeComponent
업데이트 방법이 없으며 관리자의 업데이트 방법은 아무 것도 수행하지 않습니다.
내 첫 번째 생각은 ObjectProperty
구성 요소의 속성으로 사용하는 대신 구성 요소가 쿼리 할 수 있는 클래스를 갖는 것입니다. 따라서 객체는 ObjectProperty
및 의 수를 갖습니다 ObjectComponent
. 구성 요소에는 개체에 속성을 쿼리하는 업데이트 논리가 있습니다. 관리자는 구성 요소의 업데이트 메소드 호출을 관리합니다.
이것은 나에게 과도하게 엔지니어링 된 것처럼 보이지만 구성 요소를 제거 할 수 있다고 생각하지 않습니다. 관리자가 어떤 객체가 어떤 구성 요소 논리를 실행 해야하는지 알 수있는 방법이 필요하기 때문입니다 (그렇지 않으면 나는 단지 구성 요소를 제거합니다) 업데이트 로직을 관리자에게 전달하십시오).
- 이 (데
ObjectProperty
,ObjectComponent
그리고ComponentManager
오버 엔지니어링 클래스)? - 좋은 대안은 무엇입니까?
RenderingComponent
와 a 가 사용하는 위치로서의 객체 PhysicsComponent
. 나는 재산을 어디에 둘 것인지에 대한 결정을 지나치게 생각하고 있습니까? 그냥 둘 중 하나를 고수하고 다른 속성에 필요한 속성이있는 구성 요소의 객체를 쿼리해야합니까?
PhysicalStateInstance
( GravityPhysicsShared
게임 당 하나 )와 함께 ( 개체 당 하나)를 시도 할 수 있습니다 ; 그러나 이것이 건축가의 행복감을 불러 일으키고 있다고 말하고 싶은 유혹에 빠져 있습니다. 키스.
SizeComponent
객체를 만드는 것이 과잉이라고 생각한다. 대부분의 객체는 크기가 있다고 가정 할 수있다. 이것은 컴포넌트 모델이 사용되는 렌더링, AI, 물리와 같은 것들이다. 크기는 항상 동일하게 작동하므로 해당 코드를 공유 할 수 있습니다.