나는 잔뜩 읽은, 기업 시스템의 개념에 비교적 새로운 해요 (대부분의 유용, 이 위대한 블로그 및 이 답변 ).
정의되지 않은 수의 소스로 객체의 위치를 조작하는 것만 큼 간단한 것이 무엇인지 이해하는 데 약간의 어려움이 있습니다.
즉, 직위 구성 요소가있는 엔터티가 있습니다. 그런 다음 게임에서 일정 시간 동안이 엔티티가 주어진 거리를 이동하도록 지시하는 이벤트가 있습니다.
이러한 이벤트는 언제든지 발생할 수 있으며 위치와 시간에 대해 다른 값을 갖습니다. 결과적으로 서로 합성됩니다.
전통적인 OO 솔루션에서는 MoveBy
거리 / 시간을 포함하는 일종의 클래스와 게임 객체 클래스 내부에 배열이 있습니다. 각 프레임마다 모든을 반복 MoveBy
하고 위치에 적용합니다. A는 경우 MoveBy
의 마무리 시간에 도달, 배열에서 제거합니다.
엔터티 시스템에서는 이러한 종류의 동작을 어떻게 복제해야하는지 약간 혼란스러워합니다.
한 번에 이들 중 하나만 있으면 함께 합성 할 수있는 것이 아니라 매우 간단하고 (믿습니다) 다음과 같이 보입니다.
PositionComponent
포함 x, y
MoveByComponent
포함 x, y, time
Entity
어느 a PositionComponent
와 aMoveByComponent
MoveBySystem
이 두 구성 요소가 모두있는 엔티티를 찾고의 값을 MoveByComponent
에 추가 합니다 PositionComponent
. time
에 도달 하면 해당 엔티티에서 구성 요소를 제거합니다.
나는 많은 움직임으로 어떻게 똑같은 일을하는지에 대해 약간 혼란 스럽습니다.
나의 초기 생각은 내가 가질 것이라는 것입니다.
PositionComponent
, MoveByComponent
상기와 동일
MoveByCollectionComponent
배열 함유하는 MoveByComponent
들
MoveByCollectionSystem
a PositionComponent
와 a가 있는 엔티티를 찾고 내부 MoveByCollectionComponent
의 MoveByComponent
s를 반복하여 필요에 따라 적용 / 제거합니다.
나는 이것이 동일한 구성 요소를 많이 가지고 있고 해당 시스템이 각 구성 요소에 작용하기를 원한다는보다 일반적인 문제라고 생각합니다. 내 엔터티에는 구성 요소 유형-> 구성 요소의 해시 안에 해당 구성 요소가 포함되어 있으므로 엔터티 당 특정 유형의 구성 요소가 하나만 엄격하게 있습니다.
이것이 이것을 보는 올바른 방법입니까?
엔터티는 항상 주어진 유형의 구성 요소를 항상 하나만 가져야합니까?
move x by 10 in 2 seconds
하고 move x by -10 in 2 seconds
엔티티가 완벽하게 여전히 서 있다면 ?
MoveBy
기능 과 같은 소리 는 일종의 속도일까요? 당신이 올바른 길을 가고있는 것 같습니다. 두 번째 질문에는 엔터티 / 구성 요소 시스템의 다양한 구현이 있습니다. 내 대답에 설명 된 것은 주어진 유형의 구성 요소를 하나만 가질 것입니다.