私はC++でゲームエンジンを設計している。私は現在、ゲーム内のさまざまなエンティティを分類することに取り組んでいます。私の基本クラスは、MovableObjectとFixedObjectの2つのクラスが継承するSpriteObjectです。今私は、例えばMovableObjectのインスタンスを作成して、スプライトのベクトルとMovableObjectのベクトル私はちょうど行うには、それを追加したい場合: そのオブジェクトのベクトルにオブジェクトを自動的に追加する。
Vector<Sprite*> sprites;
Vector<MovableObject*> movableObjects;
MovableObject* movingObject = new MovableObject();
sprites.push_back(movingObject);
movableObjects.push_back(movingObject);
しかし、異なるカテゴリとエンティティが育つように、コードが大きいでしょう
(そしてそれが属しているすべてのベクトルにすべてのエンティティを追加するのは面倒です)。どのように私は自動的にそれが作成時に属するベクトルにオブジェクトを追加するのですか?EDIT 1:私はちょうどソリューションを思いついたと思います。もし私がシーン内のエンティティのすべてのベクトルを保持するグローバル静的クラスEntitiesを作るなら、どうでしょうか?すべてのエンティティはこのクラスにアクセスできます。エンティティが作成されると、そのグローバルクラスの対応するベクトルにポインタバージョンのオブジェクトを追加するだけです。
編集2:私の解決策では、手動ですべてのエンティティを一致するベクターに手動で追加する必要があることを忘れていました。私はちょうど異なるエンティティの間で仕事を分割しました。
「スプライト」に追加するだけで、一部のメンバ変数をクエリすることによって 'MoveableObject'であることが分かります。 –
これらのリストにアクセスする手段があります(たとえば、各コンポーネントにはすべてのインスタンスの静的ベクトルがあります)。特定のコンポーネントのコンストラクタで適切なリストにサインアップします。しかし、私はそのアプローチをお勧めしません。むしろ、コンポーネントの追跡/登録を必要とするすべての必要なロジックを実行するファクトリを使用してください。 –
代わりに仮想関数と多相を使用してみませんか?次に、オブジェクトのコレクションが1つだけ必要です。 –