방패는 플레이어의 위치를 추적하는 자체 엔티티 여야합니까? 손상 필터링을 구현하기가 어려울 수 있습니다. 또한 연결된 구성 요소와 엔티티 사이의 선을 흐리게합니다.
편집 : 분리 된 엔티티에 대한 "자율적 인 행동"이 충분하지 않다고 생각합니다. 이 특정한 경우, 방패는 목표를 따르고, 목표를 위해 작동하며 목표보다 오래 지속되지 않습니다. "차폐 물체"라는 개념에는 아무런 문제가 없다는 데 동의하지만이 경우 구성 요소에 잘 맞는 행동을 처리합니다. 그러나 나는 또한 순수 논리 엔티티의 옹호자입니다 (변환 및 렌더링 구성 요소를 찾을 수있는 완전한 엔티티 시스템과 반대).
실드는 다른 구성 요소를 수용하는 구성 요소 여야합니까? 나는 이와 같은 것을 보거나들은 적이 없지만, 일반적 일 수도 있고 아직 충분히 깊지는 않습니다.
다른 관점에서보십시오. 구성 요소를 추가하면 다른 구성 요소도 추가되며, 제거하면 추가 구성 요소도 사라집니다.
방패는 플레이어에 추가되는 일련의 구성 요소 여야합니까? 다른 구성 요소를 관리하기위한 추가 구성 요소가있을 수 있습니다. 예를 들어 모든 구성 요소를 그룹으로 제거 할 수 있습니다. (실수로 피해 감소 구성 요소를 남겨두면 재미있을 것입니다).
이것은 해결책이 될 수 있으며 재사용을 촉진하지만 오류가 발생하기 쉽습니다 (예를 들어 언급 한 문제). 반드시 나쁘지는 않습니다. 시행 착오와 새로운 주문 조합을 찾을 수 있습니다 :)
더 많은 구성 요소 경험을 가진 사람에게 분명한 것이 있습니까?
조금 더 자세히 설명하겠습니다.
엔터티에 추가 된 구성 요소에 관계없이 일부 구성 요소의 우선 순위가 어떻게 결정되는지 알고 있습니다 (다른 질문에도 대답 할 것임).
또한 메시지 기반 통신을 사용한다고 가정합니다 (토론을 위해 현재로서는 메소드 호출에 대한 추상화 일뿐입니다).
쉴드 구성 요소가 "설치"될 때마다 쉴드 구성 요소 메시지 핸들러는 특정 (더 높은) 순서로 연결됩니다.
Handler Stage Handler Level Handler Priority
In Pre System High
Out Invariant High
Post AboveNormal
Normal
BelowNormal
Low
System Low
In - incoming messages
Out - outgoing messages
Index = ((int)Level | (int)Priority)
"stats"구성 요소는 In / Invariant / Normal 인덱스에 "손상"메시지 핸들러를 설치합니다. "손상"메시지가 수신 될 때마다 "값"만큼 HP를 줄이십시오.
공정한 표준 행동 (자연 피해 저항 및 / 또는 인종적 특성 등)
방패 구성 요소는 In / Pre / High 색인에 "손상"메시지 핸들러를 설치합니다.
Every time a "damage" message is received, deplete the shield energy and substract
the shield energy from the damage value, so that the damage down the message
handler pipeline is reduced.
damage -> stats
stats
stats.hp -= damage.value
damage -> shield -> stats
shield
if(shield.energy) {
remove_me();
return;
}
damage.value -= shield.energyquantum
shield.energy -= shield.energyquantum;
stats
stats.hp -= damage.value
메시지 처리 파이프 라인 구성 요소 메시지 이벤트 처리기의 어느 부분이 설치되어 있는지 확인해야하기 때문에 구성 요소 상호 작용을 디자인 할 때는 신중한 계획이 필요하지만 이것이 매우 유연하다는 것을 알 수 있습니다.
맞는 말이다? 자세한 내용을 추가 할 수 있는지 알려주세요.
편집 : 여러 구성 요소 인스턴스 (두 갑옷 구성 요소)에 관한 것입니다. 하나의 엔터티 인스턴스에서 총 인스턴스 수를 추적하고 (구성 요소 당 상태를 종료) 메시지 이벤트 핸들러를 계속 추가하거나 구성 요소 컨테이너가 중복 구성 요소 유형을 미리 허용하도록 할 수 있습니다.