我一直在研究游戏引擎设计(特别是2d游戏引擎,但也适用于3d游戏),我对如何进行这方面的一些信息很感兴趣。我听说现在许多引擎都转向基于组件的设计,而不是传统的深度对象层次结构。
你知道关于这类设计通常是如何实现的信息的任何好的链接吗?我已经看到了层次结构的演进,但我真的找不到更多详细的信息(其中大多数似乎只是说“使用组件而不是层次结构”,但我发现在两种模型之间转换我的思想需要一些努力)。
任何好的链接或信息,这将是感激,甚至书籍,尽管链接和详细的答案在这里将是首选。
我一直在研究游戏引擎设计(特别是2d游戏引擎,但也适用于3d游戏),我对如何进行这方面的一些信息很感兴趣。我听说现在许多引擎都转向基于组件的设计,而不是传统的深度对象层次结构。
你知道关于这类设计通常是如何实现的信息的任何好的链接吗?我已经看到了层次结构的演进,但我真的找不到更多详细的信息(其中大多数似乎只是说“使用组件而不是层次结构”,但我发现在两种模型之间转换我的思想需要一些努力)。
任何好的链接或信息,这将是感激,甚至书籍,尽管链接和详细的答案在这里将是首选。
当前回答
有趣的artcle……
我在谷歌上快速搜索了一下,没有发现任何东西,但是你可能想要检查一些评论-很多人似乎已经尝试了实现一个简单的组件演示,你可能想要看看他们的一些灵感:
http://www.unseen-academy.de/componentSystem.html http://www.mcshaffry.com/GameCode/thread.php?threadid=732 http://www.codeplex.com/Wikipage?ProjectName=elephant
此外,评论本身似乎对如何编写这样一个系统进行了相当深入的讨论。
其他回答
我在上个学期的游戏开发课程中研究并实施了这一方法。希望这个示例代码可以为您指明正确的方向,告诉您如何处理这个问题。
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;
};
组件指定行为并对属性进行操作。属性通过引用在所有组件之间共享,并免费获得更新。这意味着消息传递没有很大的开销。如果有任何问题,我会尽我所能回答。
在这种情况下,组件对我来说就像是引擎的独立运行时部分,可以与其他组件并发执行。如果这是动机,那么您可能想要查看角色模型和使用它的系统。
它是开源的,可以在http://codeplex.com/elephant上获得
有人做了一个gpg6-code的工作示例,你可以在这里找到它:http://www.unseen-academy.de/componentSystem.html
或在这里:http://www.mcshaffry.com/GameCode/thread.php?threadid=732
问候
在这个问题上似乎确实缺乏信息。我最近执行了这个系统,我发现了一个非常好的GDC Powerpoint,它很好地解释了通常被遗漏的细节。该文件是:Theory and Practice of Game Object Component Architecture
除了幻灯片,还有一些很好的资源和各种博客。PurplePwny有一个很好的讨论和一些其他资源的链接。Ugly Baby Studios围绕组件之间如何交互的想法进行了一些讨论。好运!
虽然这不是一个关于游戏引擎设计主题的完整教程,但我发现这个页面有一些关于游戏组件架构使用的很好的细节和例子。