Der von West in diesem verlinkten Artikel beschriebene Ansatz der "reinen Aggregation" meidet ein "Entitäts" -Objekt insgesamt. Es gibt Komponenten, die im Speicher herumschweben, aber wenn überhaupt, nur durch implizite Beziehungen miteinander verbunden sind.
Ein Weg, dies zu tun, ist ein sogenannter Außenborder-Ansatz . In einem solchen System werden Komponenten von Systemen gehalten, die sie verwalten oder auf andere Weise steuern (ich verwende hier den Begriff "verwalten", aber Sie sollten dies nicht so verstehen, dass ich vorschlage, dass Sie eine Reihe von * Manager-Klassen halten müssen Komponententypen). Zum Beispiel kann Ihr Physiksystem an einer Reihe von Dingen festhalten, die jeden starren Körper in seiner Simulationswelt darstellen, und diese Dinge als Physikkomponenten ausstellen. Die Komponenten können die tatsächlichen Objekte sein, die von dem betreffenden Subsystem verarbeitet werden, oder sie können je nach Bedarf Proxys für diese Objekte sein.
In einem solchen System muss eine "Entity" -Klasse nicht unbedingt eine Sammlung von Verweisen auf die Komponenten enthalten, aus denen sie besteht. Stattdessen wird eine Benachrichtigung über die Erstellung oder Zerstörung einer "Entität" ausgegeben, und jedes Subsystem, das Komponenten verarbeitet, überprüft die Beschreibung der erstellten / zerstörten Entität (die normalerweise aus einigen Daten geladen wird) und bestimmt, ob eine Komponente dafür erforderlich ist.
Einer der Vorteile dieses Ansatzes besteht darin, dass Sie für jede Komponente eine wirklich gute Referenzlokalität erhalten. Leider ist es insgesamt etwas seltsam und nicht die freundlichste Variante komponentenbasierter Entitäten, die mir begegnet sind. Manchmal ist es sehr praktisch, ein reales Objekt zu haben, das eine Entität darstellt, selbst wenn dieses Objekt nur schwache Verweise auf Komponenten zusammenfasst, die noch von anderen Subsystemen gehalten werden (wenn nichts anderes, bietet es eine einfache Möglichkeit, Nachrichten zwischen Komponenten weiterzuleiten). .
Es gibt mehrere gute Möglichkeiten, komponentenorientierte Spielobjektsysteme zu implementieren. Es hilft wirklich, wirklich, wirklich , wenn Sie eine solide Vorstellung von den Anforderungen haben, die Sie an Ihr System stellen möchten. Sie können sich beispielsweise ansehen, was beliebte Frameworks wie Unity tun. Ohne strenge Anforderungen an sich selbst zu stellen, könnten Sie auf das Problem stoßen, das System endlos zu "entwerfen", ohne es jemals wirklich zu bauen, und vergeblich versuchen, die perfekte Implementierung zu finden. Aus irgendeinem Grund habe ich dies bei Komponentensystemen oft gesehen.