为了使组件能够更新每一帧(并使此功能不包含在不需要的组件中),我想到了制作一个UpdateComponent组件的想法。诸如MovableComponent
(保持速度)的其他组件将从IUpdatable
抽象类继承。这迫使MovableComponent
实现一个Update(gametime dt)
方法,而另一个RegisterWithUpdater()
实现提供UpdateComponent
了指向的指针MovableComponent
。许多组件可以执行此操作,然后UpdateComponent
可以调用其所有Update(gametime dt)
方法,而不必关心它们是谁或什么。
我的问题是:
- 这看起来像是正常的东西还是任何人使用的东西?我在这个问题上找不到任何东西。
- 我该如何维护物理等组件的顺序,然后更改位置?这有必要吗?
- 还有什么其他方法可以确保应处理的每一帧实际上都得到处理?
编辑
我想我将考虑如何为实体管理器提供可更新的类型列表。然后,该类型的所有组件都可以更新而不是针对每个实体进行管理(无论如何,它们只是我系统中的索引)。
仍然。我的问题对我仍然有效。我不知道这是否是理性/正常的,还是其他人倾向于这样做。
另外,失眠症患者也很棒! /编辑
为前面的示例精简代码:
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_;
};