【发布时间】:2015-01-07 05:43:14
【问题描述】:
我在想办法用 C++ 制作基于组件的引擎架构时遇到了麻烦。但是我想不出一种方法来将组件向量与从组件派生的类结合起来。
我想覆盖组件的虚拟功能。但是我可以让它调用覆盖函数的唯一方法是使组件派生类成为一个指针,但我希望每个游戏对象都在一个向量中包含自己的组件,而不是在类之外作为指针。
我试图尽可能多地删除不必要的代码。
我的结构:
//GameObject class, contains components and other objects
class GameObject
{
public:
GameObject(){}
~GameObject(){}
void AddChild(GameObject child)
{
children.push_back(child);
}
void AddComponent(Component component)
{
components.push_back(component);
}
void Input(){}
void Update(){}
void Render()
{
for(unsigned int i = 0; i < components.size(); i++)
components[i].Render();
}
private:
std::vector<GameObject> children;
std::vector<Component> components;
};
//base class component
class Component
{
public:
Component(){}
~Component(){}
virtual void Input(){}
virtual void Update(){}
virtual void Render(){ cout << "Component -> Render()" << endl; }
};
class MeshRenderer : public Component
{
public:
MeshRenderer(Mesh _mesh, Material _material)
{
mesh = _mesh;
material = _material
}
~MeshRenderer(){}
//override components virtual Render()
void Render(Transform transform)
{
mesh.Render(material);
cout << "MeshRenderer -> Render()" << endl;
}
private:
Mesh mesh;
Material material;
};
GameObject* root = new GameObject();
MeshRenderer meshRenderer(mesh, material);
root->AddComponent(meshRenderer);
//GameLoop
while(!quit)
{
root->Render();
}
【问题讨论】:
-
也许使用指针向量?或者甚至是智能指针的向量?
-
只是想知道。您打算如何使用此设计检索组件?
-
@Veritas 好点。
标签: c++ architecture components derived-class derived