我实际上是在学习使用继承的游戏编程,但是当我的派生类变得越来越复杂时,它真的很烦人。
我听说过组合类以及如何简单地将“插件”功能类添加到处理类中,但是在使用容器时我遇到了问题。
如果我想使用继承添加许多不同的对象,我将使用相同的基类(Entity)创建许多派生类(Object1,Object2,Object3),并使用向量跟踪它们。
前:
class Game
{
public:
Game();
~Game();
void initialize() { mEntities.push_back(new Object1);
mEntities.push_back(new Object2);
mEntities.push_back(new Object3);
for(int i(0); i < mEntities.size(); ++i)
mEntities[i]->initialize();
}
void update(float dt){ for(int i(0); i < mEntities.size(); ++i)
mEntities[i]->update(dt);
}
void render() { for(int i(0); i < mEntities.size(); ++i)
mEntities[i]->render();
}
private:
vector<Entity*> mEntities;
};
现在使用组合类,我无法找到如何跟踪不同的对象而不返回继承。 现在,这就是我使用构图的方式:
// I create "feature" classes
class Drawable
{ /* ... */
};
class Movable
{ /* ... */
};
class Destroyable
{ /* ... */
};
// Then the object classes
class Object1
{
private:
Drawable drawable;
Movable movable;
};
class Object2
{
/* similar stuff... */
};
现在我的对象没有公共基类,我不明白如何在不单独创建它们的情况下处理它们。
我的问题是,我应该做些什么来遍历许多不具有公共基类的不同对象?
由于