2D 또는 3D에서 ECS (Entity Component System)가 동일한 ECS에 속하지 않는 경우 GUI 시스템에 액세스 할 수 있어야합니다.
개인적으로, 나는 두 가지를 섞지 않을 것입니다. GUI의 코드 재사용 성은 실제로 최상위 수준에서만 발생합니다. 마우스 / 키보드에 응답, 렌더링 등 다른 버튼이 취하는 기능 또는 특정 목록이 표시하는 정보는 실제로 재사용하기에 충분히 일반적인 것이 아닙니다.
예를 들어, 내가 좋아하는 뭔가 될 것 GUI 개체에 대한 구성 요소를 상상하는 것 position
, render
하고 gui
. GUI 구성 요소가 GUI 엔티티가 수행하는 조치 유형을 정의하는 위치. 그러나 그 행동은 매우 독특하고 상황에 따라 다릅니다. 그 결과 GUI 구성 요소를 처리하는 시스템이 매우 커서 본질적으로 각 GUI 기능 (게임로드, 게임 저장, 서버 찾기 등)을 처리하도록 설계되었습니다. 지저분한 소리.
각 GUI "화면"에 대해 표준 클래스 파일을 선호합니다. 해당 화면에 대한 모든 기능을 한곳에 두십시오 (공통 기능 클래스 참조). 훨씬 깔끔하고 관리하기 쉽습니다.
그러나 내가 말했듯이 ECS는 GUI 시스템에 액세스 할 수 있어야합니다. 시스템의 엔티티를 기반으로 GUI에 정보를 제공 할 수 있어야합니다. 예를 들어, 연합 유닛 위로 마우스를 가져 가면 해당 유닛에 대한 모든 정보가있는 GUI 창이 나타납니다. 적의 화합 위에 마우스를 올리면 제한된 정보가있는 GUI 창이 나타납니다. GUI의 차이점을 알기 위해 GUI를 프로그래밍하지 않으려는 경우, 엔티티에 정보를 표시하도록 요청하려고합니다.
따라서 엔터티에는 여전히 일종의 GUI 구성 요소가있을 수 있지만 GUI 엔터티가 아닌 "게임"엔터티가됩니다. 이 구성 요소는 외부 GUI 시스템을 사용하여 GUI 인터페이스를 만듭니다.