2013-12-19 2 views
1

저는 Entity Framework에 대해 많이 읽었으며 지금은 게임에서 구현하려고합니다. 엔티티 프레임 워크는 게임 엔티티를 구성 요소의 간단한 컨테이너로 만드는 것을 기반으로합니다. 구성 요소에는 엔티티의 특정 특성 (및이 특성을 설명하는 모든 변수/접근 자)이 포함됩니다. 게임 논리는 시스템을 생성하여 모듈화됩니다. 각 시스템은 게임 로직의 특정 측면 (예 : Collisions, Rendering, Animation)을 구현하고 실행합니다. 각 시스템은 컴포넌트의 특정 조합이있는 모든 엔티티에 액세스 할 수 있어야합니다 (예 : RenderSystem은 , PositionComponent 및 AnimationComponent가있는 엔티티 만 가져야 함).엔티티 구성 요소 시스템 프레임 워크에 가장 적합한 데이터 구조

제 질문은 그러한 기능을 달성하기위한 최상의 데이터 구조에 관한 것입니다.

현재 나의 생각은 List of Entity의 Vector (N 개의 셀 (N은 가능한 구성 요소의 수))를 만드는 것입니다. 따라서 엔티티를 생성 (인스턴스화 및 특정 구성 요소 추가) 할 때마다 포함 된 각 구성 요소의 각 목록에서이 엔티티를 참조합니다. 엔티티를 "죽이는"경우 각 목록에서 각 참조를 제거해야합니다. 문제는 검색 키가 조합 인 구성 요소의 조합이고 단일 구성 요소가 아니기 때문에 특정 시스템에서 어떤 엔터티를 처리해야 하는지를 쿼리하는 것이므로 오버 헤드가 추가됩니다 (많은 검색 및 비교가 필요합니다). 끝난).

제 생각은 좋은가요? 사용할 수있는 더 나은 데이터 구조가 있습니까? 게임의 모든 요소는 하나의 레벨에서 수천 개의 Entites를 합한 Entity로 가정됩니다 (일부 공간 분할을 사용할 수도 있음).

+0

[Visitor pattern] (http://www.javaworld.com/article/2077602/learn-java/java-tip-98--reflect-on-the-visitor-design-pattern.html)을 사용합니다.). –

+0

최상의 데이터 구조를 얻으려면? 천재! – Narek

답변

0

그들은 ID를 공유하는 두 개의 엔터티 클래스를 가지고

순수하게 데이터 지향 시스템

이 아닌 당신을 이끌 것입니다 그것을하는 방법,하지만 단지 구성 요소입니다. 이 경우 모든 데이터 베 이스 또는 해시 맵은 이러한 데이터 구조에서의 검색이 빠르기 때문에 문제가되지 않습니다. 엔티티마다 시스템 당 여러 구성 요소가 필요한 경우 각 시스템에 맞게 하나의 데이터 구조로 구성 요소를 집계 할 수 있습니다.

문제는 이전에 설명한 시스템의 모든 기능을 유지하면서 자신의 구성 요소 (또는 집계 된 구성 요소 구조)에 대한 참조를 보유하는 실용적인 접근 방식보다 순수한 데이터 지향 시스템이 덜 유용 할 수 있다는 것입니다). 엔티티 처리 (삭제 또는 검사)는 엔티티가 무엇인지에 대한 모든 정보, 즉 엔티티가 어떤 상태가 아닌지에 대한 정보가 모두있는 장소에서 여전히 쉽게 찾을 수 있습니다. 모든 시스템을 쿼리합니다.

가장 좋은 방법은 시도하는 것입니다 ... 두 가지 방법으로 거친 엔진을 구현하는 것은 매우 쉽고 빠르며, 두 가지 방법으로 게임을 한 후에는 어느 것을 결정할 수 있습니다. 당신이 더 잘 스위트.

0

This article은 데이터 구조에 대해 4 번의 반복을 제안하지만 귀중한 해결책은 아무도 없습니다. 그러나 문제의 상세한 분석, 기억 및 기타 좋은 자료에 대한 좋은 견적이 있기 때문에 그것을 읽는 것이 좋습니다.

+0

링크가 깨졌습니다.이 글은 http://t-machine.org/index.php/2014/03/08/data-structures-for-entity-systems-contiguous-memory/입니까? – MerickOWA

관련 문제