답변:
개인적으로 좋은 예 는 없다고 생각합니다 . 주로 게임을위한 "컴포넌트 기반 시스템"의 정의가 너무 느슨하게 정의되어 있기 때문에 아무 것도 의미하지 않습니다.
이 답변의 토론 중 일부는 도움이 될 것 입니다. 웹 게임의 항목에 대한 구성 요소 기반 시스템을 구현하는 방법
전체적으로, 접근 방식은 모든 동작을 처리하는 대형 클래스에서 동작을 수행하는 객체를 보유하는 더 간단한 클래스로 모든 종류의 GameObject 또는 Actor를 변경하는 것입니다. 이 작업을 직접 수행하고 게임에 맞는 다른 구성 요소를 만드는 것이 종종 가장 좋은 방법이라고 생각합니다.
위의 대부분은 T = Machine 의이 기사에서 영감을 얻었습니다.
위의 두 링크에서 영감을 얻은 기본 구현으로 시작했습니다. 나는 순수한 구성 요소 시스템 이론에서 많은 것을 벗어 났으며 의심 할 여지없이 버그가 있다고 확신하지만 간단한 예제를 찾고 있다면 유용 할 수 있습니다.
브리 클 (C # / XNA)
지금은 일부 기본 엔티티를로드하고 일부 이벤트를 처리하는 등의 작업을 수행하고 있습니다. 찾고있는 주요 위치는 Engine.EntitySystem 폴더 와 엔티티가 실제로 생성 된 PlayScreen 입니다.
간단한 유형 기반 구성 요소 저장소를 만들고 일반적인 EntityManager 뒤에 숨기는 것이 비교적 간단했습니다.
내가 겪었던 첫 번째 과제는 개별 시스템에 여러 구성 요소 유형 (예 : 실제 구성 요소 및 InputMoveable)이 필요한 경우였습니다. 관계형 데이터베이스 언어를 사용하려면 JOIN 쿼리를 수행하는 방법을 찾아야했습니다. 이를 위해 일치하는 구성 요소 유형 쿼리로 작성된 엔터티에 대해 다른 컬렉션 유형을 만들었습니다. 각 엔터티 컬렉션은 OnEntityCreate 이벤트에 연결되어 일치하는지 확인합니다. 여전히 몇 가지 버그가 있습니다.
두 번째 과제는 실제로 '게임 오브젝트'를 만드는 것이 었습니다. 저는 그것들을 템플릿이라고했습니다. 여기서 T = Machine의 사양에 따르면 아마 순수하지는 않지만 작동하는 것 같습니다. 템플릿은 컴포넌트 인스턴스화를 그룹화하고 더 쉬운 엔티티 구성을 허용합니다 (예 : Ball is Drawable and Physical).
도움이 되길 바랍니다. 엔터티 / 구성 요소 시스템은 초기 장애물 중 일부를 극복하기가 어려울 수 있습니다.