이 질문이 여러 번 요청 된 것을 알고 있지만 여전히 컴포넌트 기반 엔진에서 입력 처리를 구현하는 방법을 잘 모르겠습니다.
내가 사용한 컴포넌트 기반 디자인은 T = Machine 의 블로그 시리즈와 엔티티가 ID 인 Artemis 를 기반으로했다 .
입력 처리를 구현할 때 세 가지 주요 아이디어가 있습니다.
- 입력 구성 요소는 관심있는 이벤트를 보유합니다. 입력 시스템은 키 및 마우스 이벤트를 게임 이벤트로 변환하고 입력 구성 요소를 사용하여 엔티티를 반복하며 이벤트에 관심이있는 경우 입력 시스템에서 적절한 조치를 취합니다. 이 조치는 입력 시스템에 하드 코딩됩니다.
- 입력 컴포넌트가 없습니다. 특정 이벤트가있는 엔터티를 입력 시스템에 등록합니다. 그런 다음 입력 시스템은 적절한 조치를 취할 수 있도록 다른 시스템에 메시지 (엔터티 ID 및 이벤트 유형)를 보냅니다. 또는 첫 번째 경우와 마찬가지로 작업은 입력 시스템에 하드 코딩됩니다.
- 첫 번째 방법과 유사하지만 입력 시스템에 작업을 하드 코딩하는 대신 구성 요소
std::map<std::function>
에 입력 시스템에 의해 호출되는 함수에 대한 이벤트 맵 (예 :)이 포함 됩니다. 이는 동일한 이벤트를 다른 조치에 결합 할 수있는 추가 효과가 있습니다.
위의 방법 중 하나를 추천 하시겠습니까? 아니면 유연한 입력 처리 시스템을 구현하는 데 도움이되는 제안이 있습니까? 또한 아직 멀티 스레딩에 익숙하지 않지만 구현을 스레드 친화적으로 만드는 제안도 환영합니다.
참고 : 구현이 이행하기를 원하는 한 가지 추가 요구 사항은 카메라 엔터티와 플레이어를 동시에 이동하는 것과 같이 많은 항목에 동일한 입력을 전달할 수 있어야한다는 것입니다.