0

我实际上是在学习使用继承的游戏编程,但是当我的派生类变得越来越复杂时,它真的变得很烦人。

我听说过组合类,以及将要素类“插入”到处理类中是如何更简单的,但我在容器中使用它时遇到了问题。

如果我想使用继承添加许多不同的对象,我会使用相同的基类(实体)创建许多派生类(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... */
};

现在我的对象没有一个通用的基类,我不明白如果不单独创建它们,我将如何处理它们。

我的问题是,我应该怎么做才能遍历许多没有公共基类的不同对象?

谢谢

4

0 回答 0