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