현재 C ++ 용 Entity System을 다시 디자인하고 있으며 많은 관리자가 있습니다. 내 디자인에는 라이브러리를 함께 묶기 위해 이러한 클래스가 있습니다. "관리자"수업과 관련하여 많은 나쁜 소식을 들었습니다. 아마도 수업 이름을 적절하게 지정하지 않았을 것입니다. 그러나 나는 그것들의 이름을 무엇으로 할 지 모른다.
내 라이브러리의 대부분의 관리자는 다음과 같은 클래스로 구성됩니다 (약간 다를 수 있음).
- 컨테이너-관리자의 객체에 대한 컨테이너
- 속성-관리자의 객체에 대한 속성
도서관을위한 새로운 디자인에는 도서관을 연결하기 위해 이러한 특정 클래스가 있습니다.
ComponentManager-엔티티 시스템에서 컴포넌트를 관리합니다
- ComponentContainer
- ComponentAttributes
- 장면 *-장면에 대한 참조 (아래 참조)
SystemManager-엔티티 시스템의 시스템을 관리합니다
- 시스템 컨테이너
- 장면 *-장면에 대한 참조 (아래 참조)
EntityManager-엔티티 시스템에서 엔티티를 관리합니다
- EntityPool-엔티티 풀
- EntityAttributes-엔티티의 속성 (ComponentContainer 및 System 클래스에만 액세스 할 수 있음)
- 장면 *-장면에 대한 참조 (아래 참조)
장면-모든 관리자를 하나로 묶습니다
- ComponentManager
- SystemManager
- EntityManager
모든 컨테이너 / 풀을 Scene 클래스 자체에 넣을 생각이었습니다.
즉
이 대신에 :
Scene scene; // create a Scene
// NOTE:
// I technically could wrap this line in a createEntity() call in the Scene class
Entity entity = scene.getEntityManager().getPool().create();
이것은 다음과 같습니다.
Scene scene; // create a Scene
Entity entity = scene.getEntityPool().create();
그러나 확실하지 않습니다. 후자를 할 경우 Scene 클래스 내부에 많은 객체와 메소드가 선언되어 있음을 의미합니다.
노트:
- 엔터티 시스템은 단순히 게임에 사용되는 디자인입니다. 구성 요소, 엔티티 및 시스템의 3 가지 주요 부분으로 구성됩니다. 구성 요소는 단순히 데이터이며, 엔터티를 구별하기 위해 엔터티에 "추가"될 수 있습니다. 엔터티는 정수로 표시됩니다. 시스템에는 특정 구성 요소가있는 엔터티의 논리가 포함되어 있습니다.
- 내 라이브러리의 디자인을 변경하는 이유는 그것이 상당히 많이 변경 될 수 있다고 생각하기 때문입니다. 지금은 느낌 / 흐름이 마음에 들지 않습니다.