Ich entwerfe eine Game-Engine in C++. Ich arbeite gerade daran, die verschiedenen Entitäten im Spiel zu kategorisieren. Meine Basisklasse ist SpriteObject, von der zwei Klassen MovableObject und FixedObject erben. Nun, wenn ich zum Beispiel eine Instanz eines MovableObject erstellen und in einem Vektor von Sprite hinzufügen möchten, und einem Vektor von MovableObject ich tun gerade:Automatisches Hinzufügen eines Objekts zu einem Vektor dieses Objekts Eltern
Vector<Sprite*> sprites;
Vector<MovableObject*> movableObjects;
MovableObject* movingObject = new MovableObject();
sprites.push_back(movingObject);
movableObjects.push_back(movingObject);
Da aber die verschiedenen Kategorien und Einheiten wachsen wird der Code erhalten groß (und es würde ermüdend sein, jede Entität zu jedem Vektor hinzuzufügen, zu dem es gehört). Wie füge ich automatisch ein Objekt zu dem Vektor hinzu, zu dem es gehört, wenn es erstellt wird?
EDIT 1: Ich denke, ich kam gerade mit einer Lösung, was ist, wenn ich nur eine globale statische Klasse Entities, die alle Vektor der Entitäten in der Szene hält. Jede Entität könnte Zugriff auf diese Klasse haben und wenn eine Entität erstellt wird, fügt sie nur eine Zeigerversion von sich selbst zu dem/den entsprechenden Vektor (en) in dieser globalen Klasse hinzu.
EDIT 2: Aber ich habe vergessen, dass meine Lösung erfordert, dass ich noch manuell jede Entity zu ihrem passenden Vektor hinzufüge. Ich habe die Arbeit einfach unter die verschiedenen Entitäten aufgeteilt.
Sie könnten es nur zu 'sprites' hinzufügen und einfach herausfinden, ob es ein' MoveableObject' ist, indem Sie eine Membervariable abfragen. –
Haben Sie eine Möglichkeit, auf diese Listen zuzugreifen (zum Beispiel würde jede Komponente einen statischen Vektor aller ihrer Instanzen haben) und sich in einem Konstruktor einer bestimmten Komponente zu richtigen Listen anmelden. Obwohl ich diesen Ansatz nicht empfehle. Eher mit Fabriken gehen, die alle notwendigen Logik, die Tracking/Registrierung von Komponenten erfordert. –
Warum nicht stattdessen virtuelle Funktionen und Polymorphie verwenden? Dann brauchen Sie nur eine Sammlung Ihrer Objekte. –