Ich versuche, mich mit komponentenbasiertem Entity-Design zu beschäftigen.
Mein erster Schritt bestand darin, verschiedene Komponenten zu erstellen, die einem Objekt hinzugefügt werden konnten. Für jeden Komponententyp hatte ich einen Manager, der die Aktualisierungsfunktion jeder Komponente aufrief und bei Bedarf Dinge wie den Tastaturstatus usw. übergab.
Als nächstes habe ich das Objekt entfernt und jede Komponente mit einer ID versehen. Ein Objekt wird also durch Komponenten mit denselben IDs definiert.
Jetzt denke ich, dass ich keinen Manager für alle meine Komponenten benötige, zum Beispiel habe ich einen SizeComponent
, der nur eine Size
Eigenschaft hat). Infolgedessen verfügt der SizeComponent
über keine Aktualisierungsmethode, und die Aktualisierungsmethode des Managers führt keine Aktionen aus.
Mein erster Gedanke war, eine ObjectProperty
Klasse zu haben , die Komponenten abfragen kann, anstatt sie als Eigenschaften von Komponenten zu haben. Ein Objekt hätte also eine Anzahl von ObjectProperty
und ObjectComponent
. Komponenten verfügen über Aktualisierungslogik, die das Objekt nach Eigenschaften abfragt. Der Manager würde den Aufruf der Aktualisierungsmethode der Komponente verwalten.
Dies scheint mir eine Überentwicklung zu sein, aber ich glaube nicht, dass ich die Komponenten loswerden kann, da die Manager wissen müssen, welche Objekte welche Komponentenlogik benötigen, um ausgeführt zu werden (ansonsten würde ich die Komponente einfach entfernen vollständig und schieben Sie die Aktualisierungslogik in den Manager).
- Ist das (mit
ObjectProperty
,ObjectComponent
undComponentManager
Klassen) Over-Engineering? - Was wäre eine gute Alternative?
RenderingComponent
und a verwendet wird PhysicsComponent
. Überlege ich mir, wo ich die Immobilie hinstellen soll? Sollte ich es in irgendein gerade haften, dann hat die andere Frage ein Objekt für die Komponente, die die erforderliche Eigenschaft hat?
PhysicalStateInstance
(eine pro Objekt) neben einer GravityPhysicsShared
(eine pro Spiel); Ich bin jedoch versucht zu sagen, dass dies ein Versuch ist, sich in die Bereiche der Euphorie der Architekten zu wagen, und dass Sie sich nicht in ein Loch hineinversetzen (genau das, was ich mit meinem ersten Komponentensystem getan habe). KUSS.
SizeComponent
ist übertrieben - man kann davon ausgehen, dass die meisten Objekte eine Größe haben - es sind Dinge wie Rendering, KI und Physik, bei denen das Komponentenmodell verwendet wird; Die Größe verhält sich immer gleich - so können Sie diesen Code freigeben.