design - 基于组件的游戏引擎设计

  显示原文与译文双语对照的内容

我一直在看游戏引擎设计( 特别关注于 2个游戏引擎,也适用于 3个游戏),并对如何处理它感兴趣。 我听说很多引擎现在都转向一个基于组件的设计而不是传统的deep-object层次结构。

你知道有关于这些设计如何经常实现的信息的链接? 我已经看到发展了你的层次结构,但是我不能真正找到更多的信息,详细信息( 他们中的大多数似乎都说"使用组件而不是层次结构"但是我发现在两个模型之间进行 switch的思考需要一些努力) 。

任何好的链接或者信息都会受到赞赏,甚至是书籍,尽管链接和详细的答案是首选。

时间:

我所将开发上为我game,我是目前正在研究这个确切主题尽管在很多在 GameDev.net ( 许多) 线程,发现以下两个解决方案都是好 candidates:

我在上学期研究并实现了一个游戏开发课程。 希望这个示例代码能指引你如何处理这个问题。


class Entity {
public:
 Entity(const unsigned int id, const std::string& enttype);
 ~Entity();

//Component Interface
 const Component* GetComponent(const std::string& family) const;
 void SetComponent(Component* newComp);
 void RemoveComponent(const std::string& family);
 void ClearComponents();

//Property Interface
 bool HasProperty(const std::string& propName) const;
 template<class T> T& GetPropertyDataPtr(const std::string& propName);
 template<class T> const T& GetPropertyDataPtr(const std::string& propName) const;

//Entity Interface
 const unsigned int GetID() const;
 void Update(float dt);

private:
 void RemoveProperty(const std::string& propName);
 void ClearProperties();
 template<class T> void AddProperty(const std::string& propName);
 template<class T> Property<T>* GetProperty(const std::string& propName);
 template<class T> const Property<T>* GetProperty(const std::string& propName) const;

 unsigned int m_Id;
 std::map<const string, IProperty*> m_Properties;
 std::map<const string, Component*> m_Components;
};

组件指定行为并对属性进行操作。 通过引用在所有组件之间共享属性,并获取可用的更新。 这意味着消息传递没有很大的开销。 如果有任何问题我会试着回答尽可能最好的问题。

...