私は実際に継承を使用してゲーム プログラミングを学んでいますが、派生クラスがますます複雑になると、本当に面倒です。
コンポジション クラスについては聞いたことがありますが、機能クラスを処理クラスに「プラグイン」するだけで簡単だったのですが、コンテナーでこれを使用すると問題が発生します。
継承を使用して多くの異なるオブジェクトを追加する場合は、同じ基本クラス (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... */
};
現在、私のオブジェクトには共通の基本クラスがなく、個別に作成せずにオブジェクトを処理する方法がわかりません。
私の質問は、共通の基本クラスを持たない多くの異なるオブジェクトをループするにはどうすればよいですか?
ありがとう