엔터티 시스템 ( 1 , 2 ) 에 대해 두 가지 질문을 하고 그에 대한 기사 를 읽은 후에는 이전보다 훨씬 더 잘 이해한다고 생각합니다. 주로 파티클 이미 터, 입력 시스템 및 카메라를 만드는 것에 대한 몇 가지 불확실성이 있습니다. 나는 여전히 엔티티 시스템을 이해하는데 약간의 문제가 있으며, 그것들은 완전히 다른 범위의 객체에 적용될 수 있지만, 그것들은 매우 다른 개념이기 때문에이 세 가지를 선택했고, 매우 넓은 근거를 다루고 엔티티 시스템과 방법을 이해하는 데 도움이되어야합니다. 이와 같은 문제를 스스로 처리하십시오.
JavaScript로 엔진을 구축하고 있으며 입력 처리, 유연한 애니메이션 시스템, 파티클 이미 터, 수학 클래스 및 함수, 장면 처리, 카메라 및 렌더 및 전체 묶음을 포함한 대부분의 핵심 기능을 구현했습니다. 엔진이 일반적으로 지원하는 다른 것들. Byte56의 답변을 읽었으며 엔진을 엔터티 시스템으로 만드는 데 관심이있었습니다. 여전히 기본적인 장면 철학을 갖춘 HTML5 게임 엔진으로 남아 있지만 구성 요소에서 엔티티를 동적으로 생성하는 것을 지원해야합니다.
내가 지금 가진 문제는이 오래된 프로그래밍 개념을이 새로운 프로그래밍 패러다임에 맞추는 것입니다. 다음은 이전 질문의 일부 정의입니다.
엔터티 식별자이다. 데이터가 없으며 객체가 아니며 모든 엔티티의 장면 목록에서 색인을 나타내는 간단한 ID입니다 (실제로는 구성 요소 행렬로 구현하려고합니다).
요소는 하지만 데이터를 조작 할 수 방법으로, 데이터의 소유자이다. 가장 좋은 예는
Vector2D
, 또는 "Position"구성 요소입니다. 이 데이터를 가지고x
하고y
있지만 좀 더 쉽게 데이터를 조작 만든다 또한 몇 가지 방법 :add()
,normalize()
, 등.시스템은 특정 요구 사항을 충족 개체의 집합에서 작동 할 수있는 무언가이다; 일반적으로 개체는 작동을 위해 지정된 구성 요소 세트를 가져야합니다. 시스템은 "논리적"부분, "알고리즘"부분이며, 구성 요소가 제공하는 모든 기능은 순전히 더 쉬운 데이터 관리를위한 것입니다.
카메라
카메라에는 Vector2D
위치 속성, 회전 속성 및 포인트를 중심으로하는 몇 가지 방법이 있습니다. 각 프레임은 장면과 함께 렌더러에 공급되며 모든 객체는 해당 위치에 따라 변환됩니다. 그런 다음 장면이 렌더링됩니다.
엔터티 시스템에서 이러한 종류의 객체를 어떻게 표현할 수 있습니까? 카메라가 엔터티, 구성 요소 또는 조합 입니까 ( 답변에 따라 )?
파티클 이미 터
파티클 이미 터와 관련된 문제는 다시 무엇을해야 하는가입니다. 10,000 개가 넘는 입자를 지원하고 싶을 때 파티클 자체가 엔티티가되어서는 안된다고 확신합니다. 많은 엔티티를 생성하면 성능이 크게 저하 될 것으로 생각합니다.
엔터티 시스템에서 이러한 종류의 객체를 어떻게 표현할 수 있습니까?
입력 관리자
마지막으로 이야기하고 싶은 것은 입력을 처리하는 방법입니다. 현재 버전의 엔진에는이라는 클래스가 Input
있습니다. 키 누름 및 마우스 위치 변경과 같은 브라우저 이벤트를 구독하고 내부 상태를 유지하는 핸들러입니다. 그런 다음 플레이어 클래스에는 react()
입력 객체를 인수로 허용하는 메서드 가 있습니다. 이것의 장점은 입력 객체를 .JSON으로 직렬화 한 다음 네트워크를 통해 공유 할 수있어 부드러운 멀티 플레이어 시뮬레이션이 가능하다는 것입니다.
이것이 어떻게 엔티티 시스템으로 변환됩니까?