구성 요소가 모든 프레임 을 업데이트 할 수있게하고 (필요하지 않은 구성 요소에서이 기능을 사용하지 않도록) UpdateComponent 구성 요소를 만드는 아이디어를 얻었습니다. MovableComponent
속도를 유지하는 것과 같은 다른 구성 요소 는 IUpdatable
추상 클래스 에서 상속됩니다 . 이렇게 하면에 대한 포인터를 제공 MovableComponent
하는 Update(gametime dt)
메소드와 다른 메소드를 강제 로 구현 합니다 . 많은 구성 요소가이 작업을 수행 한 다음 누가 또는 무엇인지 신경 쓰지 않고도 모든 메서드를 호출 할 수 있습니다.RegisterWithUpdater()
UpdateComponent
MovableComponent
UpdateComponent
Update(gametime dt)
내 질문은 :
- 이것이 정상이거나 누군가가 사용하는 것 같습니까? 주제에서 아무것도 찾을 수 없습니다.
- 물리와 같은 구성 요소에 대한 순서를 유지 한 다음 위치를 변경하려면 어떻게해야합니까? 이것도 필요합니까?
- 모든 프레임에서 처리해야하는 구성 요소가 실제로 처리되도록하는 다른 방법은 무엇입니까?
편집
엔터티 관리자에게 업데이트 가능한 유형 목록을 제공하는 방법에 대해 생각할 것입니다. 그런 다음 해당 유형의 모든 구성 요소는 엔터티 당 관리하지 않고 업데이트 할 수 있습니다 (어쨌든 내 시스템의 색인 일뿐입니다).
아직도. 내 질문은 계속 유효합니다. 이것이 합리적인 이유인지 다른 사람들이하는 경향이 있는지 모르겠습니다.
또한 Insomniac 의 사람들 은 굉장합니다! /편집하다
이전 예제의 코드를 정리했습니다 :
class IUpdatable
{
public:
virtual void Update(float dt) = 0;
protected:
virtual void RegisterAsUpdatable() = 0;
};
class Component
{
...
};
class MovableComponent: public Component, public IUpdatable
{
public:
...
virtual void Update(float dt);
private:
...
virtual void RegisterWithUpdater();
};
class UpdateComponent: public Component
{
public:
...
void UpdateAll();
void RegisterUpdatable(Component* component);
void RemoveUpdatable(Component* component);
private:
...
std::set<Component*> updatables_;
};