Nachdem ich ein paar Muster für das Game-Design durchgesehen habe, habe ich mich mit dem Entity-Component-System (ES-System) für meine Game-Engine abgefunden. Ich lese Artikel (hauptsächlich T = Machine ) und überprüfe Quellcode. Ich glaube, ich habe genug, um loszulegen.
Es gibt nur eine Grundidee, mit der ich zu kämpfen habe. Wie gehe ich mit Gruppen von Entitäten um, die voneinander abhängig sind?
Lassen Sie mich ein Beispiel verwenden:
Angenommen, ich mache einen Standard-Overhead-Shooter (denken Sie an Jamestown ) und möchte eine "Boss-Einheit" mit mehreren unterschiedlichen, aber verbundenen Teilen aufbauen. Die Aufteilung könnte ungefähr so aussehen:
- Schiffskörper: Bewegung, Rendering
- Kanone: Position (relativ zum Schiffskörper verriegelt), Tracking \ Fire at hero, Schaden nehmen, bis deaktiviert
- Core: Position (relativ zum Schiffskörper gesperrt), Tracking \ Fire at hero, Schaden erleiden bis deaktiviert, Deaktivieren (er ... zerstören) aller anderen Einheiten in der Schiffsgruppe
Mein Ziel wäre etwas, das als eigenständiges Spielelement identifiziert (und manipuliert) würde, ohne jedes Mal, wenn ich ein neues aggregiertes Element erstellen möchte, das Subsystem von Grund auf neu schreiben zu müssen.
Wie implementiere ich diese Art von Design in ES System?
- Implementiere ich eine Art Eltern-Kind-Beziehung (Entitäten können Kinder haben)? Dies scheint der Methodik zu widersprechen, dass Entities nur leere Container sind und es sich mehr OOP anfühlt.
- Implementiere ich sie als separate Entitäten mit einer Art verbindender Komponente (BossComponent) und zugehörigem System (BossSubSystem)? Ich kann nicht anders, als zu glauben, dass dies schwer umzusetzen sein wird, da die Kommunikation der Komponenten eine große Bärenfalle zu sein scheint.
- Implementiere ich sie als eine Entität mit einer Sammlung von Komponenten (ShipComponent, CannonComponents, CoreComponent)? Diese scheint sich von der Absicht des ES-Systems zu unterscheiden (Komponenten hier scheinen zu schwergewichtigen Entitäten zu ähneln), aber ich weiß das, also habe ich mir gedacht, dass ich das da rausstellen würde.
- Implementiere ich sie als etwas anderes, das ich erwähnt habe?
Ich weiß, dass dies in OOP sehr einfach implementiert werden kann, aber ich werde mich an die Wahl von ES gegenüber OOP halten. Wenn ich mit der reinen ES-Theorie brechen muss, um dieses Design zu implementieren, werde ich (nicht wie ich vorher keine Kompromisse beim reinen Design eingehen musste), aber ich würde es vorziehen, dies aus Leistungsgründen zu tun, anstatt mit einem schlechten Design zu beginnen.
Denken Sie für zusätzliche Gutschriften an dasselbe Design, aber jede der "Boss-Entitäten" war tatsächlich mit einer größeren "BigBoss-Entität" verbunden, die aus einem Hauptkörper, einem Hauptkern und drei "Boss-Entitäten" bestand. Damit würde ich eine Lösung für mindestens 3 Dimensionen finden (Großeltern-Eltern-Kind) ... die für mich mehr als genug sein sollte.