학습 목적으로 (그리고 나중에 일부 게임에서 사용하기 위해) 구성 요소 기반 엔터티 시스템을 설계하려고하는데 엔터티 상태를 업데이트하는 데 문제가 있습니다.
구성 요소 사이에 종속성을 방지하기 위해 구성 요소 안에 update () 메서드를 원하지 않습니다.
현재 내가 생각하는 것은 구성 요소에 데이터가 있고 시스템이 구성 요소를 업데이트한다는 것입니다.
따라서 Transform, Movement, State, Animation 및 Rendering 구성 요소가있는 일부 엔티티 (예 : player, enemy1, enemy2)가있는 간단한 2D 게임을 가지고 있다면 다음과 같이 생각합니다.
- 모든 이동 구성 요소를 이동하고 상태 구성 요소를 업데이트하는 이동 시스템
- 애니메이션 구성 요소 (애니메이션 구성 요소에는 각 상태에 대해 하나의 애니메이션 (즉, 프레임 / 텍스처 세트)가 있어야 함)를 업데이트하고 업데이트하는 렌더링 시스템은 현재 상태 (예 : 점프, 이동 _ 왼쪽 등)에 해당하는 애니메이션을 선택하는 것을 의미합니다. 프레임 인덱스 업데이트). 그런 다음 RenderSystem은 각 엔티티 애니메이션의 현재 프레임에 해당하는 텍스처로 Render 구성 요소를 업데이트하고 모든 것을 화면에 렌더링합니다.
Artemis 프레임 워크와 같은 구현을 보았지만이 상황을 해결하는 방법을 모르겠습니다.
내 게임에는 다음과 같은 엔티티가 있다고 가정 해 봅시다. 각 엔티티에는 상태 세트와 각 상태마다 하나의 애니메이션이 있습니다.
- 플레이어 : "유휴", "moving_right", "점프"
- enemy1 : "moving_up", "moving_down"
- enemy2 : "moving_left", "moving_right"
각 엔터티의 현재 상태를 업데이트하기 위해 가장 많이 사용되는 방법은 무엇입니까? 내가 생각할 수있는 유일한 것은 각 엔티티 그룹과 별도의 State 및 Animation 구성 요소에 대해 별도의 시스템을 가지고 있으므로 PlayerState, PlayerAnimation, Enemy1State, Enemy1Animation ... PlayerMovementSystem, PlayerRenderingSystem ...을 갖습니다. 구성 요소 기반 시스템의 목적을 깨뜨립니다.
보시다시피, 나는 여기서 잃어 버렸으므로 도움을 주시면 대단히 감사하겠습니다.
편집 : 내가 의도 한대로이 작업을 수행 할 수있는 솔루션은 다음과 같습니다.
statecomponent 및 animationcomponent를 모든 엔터티에 사용할 수 있도록 일반으로 만듭니다. 여기에 포함 된 데이터는 재생되는 애니메이션 또는 사용 가능한 상태와 같은 항목을 변경하기위한 수정 자입니다. – 바이트 56
이제이 두 구성 요소를 충분히 일반적인 방식으로 디자인하여 재사용 할 수 있도록 설계하려고합니다. 각 상태에 대한 UID가 있고 (예 : 걷기, 달리기 ...) 맵에 애니메이션을이 식별자로 키가 지정된 AnimationComponent에 저장하는 것이 좋은 솔루션일까요?
statecomponent
하고 animationcomponent
일반적인만큼 모든 개체에 사용할 수 있습니다. 여기에 포함 된 데이터는 재생되는 애니메이션 또는 사용 가능한 상태와 같은 항목을 변경하기위한 수정 자입니다.