상태 머신은 컴포넌트 기반 아키텍처에서 유해한 종속성을 유발하는 것으로 보입니다.
특히 상태 시스템과 상태 관련 동작을 수행하는 구성 요소 간의 통신은 어떻게 처리됩니까?
내가있는 곳 :
- 컴포넌트 기반 아키텍처를 처음 사용합니다.
- 나는 그것이 중요하다고 생각하지 않지만 싸우는 게임을 만들고 있습니다. "crouching", "dashing", "blocking"등과 같은 상태를 전환하는 데 사용되는 상태 시스템을 구상합니다.
- 내가 컴포넌트 기반 아키텍처에 대한 가장 자연스러운 시스템으로이 상태 관리 기술을 발견했습니다,하지만 난에 대해 읽은 기술과 충돌 : 변경 가능한 행동 문자에 대한 동적 게임 오브젝트 구성 요소 시스템 그것은 모든 구성 요소가 활성화 제안 / 비활성화 활성화 조건을 지속적으로 확인하여
- "달리기"또는 "걷기"와 같은 동작은 상태로 의미가 있다고 생각합니다. /gamedev//a/7934
나는 이것이 유용하지만 모호한 것을 발견했다 : 컴포넌트 기반 게임 아키텍처에서 행동을 구현하는 방법? 상태 머신 만 포함하는 별도의 구성 요소를 갖는 것이 좋습니다. 그러나 이것은 상태 머신 구성 요소와 거의 모든 다른 구성 요소 사이에 어떤 종류의 결합을 필요로한다. 이 커플 링을 어떻게 처리해야하는지 모르겠습니다. 이것들은 몇 가지 추측입니다.
A. 구성 요소는 상태 시스템에 따라 다릅니다 . 구성 요소는 상태 상수를 반환하는
상태 시스템 구성 요소에 대한 참조를받습니다getState()
. 구성 요소는 정기적으로 업데이트되며 필요에 따라이를 확인합니다.B. 상태 시스템은 구성 요소에 따라 다릅니다
. 상태 시스템 구성 요소는 모니터링하는 모든 구성 요소에 대한 참조를받습니다. 현재getState()
위치를 확인하기 위해 메소드를 쿼리합니다 .C. 그들 사이의 추상화
이벤트 허브를 사용하십니까? 명령 패턴?D. 구성 요소
상태 패턴 을 참조하는 별도의 상태 객체 가 사용됩니다. 구성 요소 집합을 활성화 / 비활성화하는 별도의 상태 개체가 생성됩니다. 상태 머신은 상태 객체 간을 전환합니다.나는 컴포넌트를 aspect의 구현으로보고있다 . 그들은 그런 측면을 이루기 위해 내부적으로 필요한 모든 것을합니다. 다른 구성 요소에 의존하지 않고 구성 요소가 자체적으로 작동 해야하는 것처럼 보입니다. 일부 종속성이 필요하다는 것을 알고 있지만 상태 시스템은 모든 구성 요소를 제어하려고합니다.