我实际上是在学习使用继承的游戏编程,但是当我的派生类变得越来越复杂时,它真的变得很烦人。
我听说过组合类,以及将要素类“插入”到处理类中是如何更简单的,但我在容器中使用它时遇到了问题。
如果我想使用继承添加许多不同的对象,我会使用相同的基类(实体)创建许多派生类(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;
};
现在使用组合类,我不知道如何在不返回继承的情况下跟踪不同的对象。现在这就是我使用 composition 提出的:
// 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... */
};
现在我的对象没有一个通用的基类,我不明白如果不单独创建它们,我将如何处理它们。
我的问题是,我应该怎么做才能遍历许多没有公共基类的不同对象?
谢谢