Keller-Dev Docs · Java & Hytale

Java Advanced

Zusammenfassung: Entity-Component-System (ECS) Architektur

1. Grundprinzip & Philosophie Das Entity-Component-System (ECS) ist ein architektonisches Entwurfsmuster, das Daten strikt von der Logik trennt (Composition over Inheritance). Anstelle komplexer Vererbungshierarchien (wie in der klassischen OOP) bestehen Spielobjekte aus flexibel zusammengestellten Datenbehältern. - Grundsatz: Entitäten besitzen kein Verhalten, Komponenten besitzen keine Logik, und Systeme besitzen keinen Zustand. 2. Die drei Säulen der Architektur A. Entity (Identität) - Eine Entität ist lediglich eine eindeutige ID (z. B. int oder UUID). - Sie enthält keinerlei Variablen oder Methoden. - Dient als Aufhänger (Index), an den Komponenten gebunden werden. B. Component (Datencontainer) - Ein Datenpaket (POJO – Plain Old Java Object), das von Component erbt oder ein Interface implementiert. - Enthält ausschließlich Attribute (z. B. Positionen, Geschwindigkeiten, Farben, HP). - Beinhaltet keine Geschäftslogik außer einfachen Getter-/Setter-Methoden. - Beispiele: PositionComponent, VelocityComponent, RenderComponent, CameraComponent. C. System (Logik & Verarbeitung) - Beinhaltet die gesamte Spiellogik. - System-Methoden (z. B. update() oder render()) iterieren über die Welt und filtern nach Entitäten, die eine bestimmte Kombination von Komponenten besitzen. - Manipuliert ausschließlich die Daten in den Komponenten. - Beispiele: MovementSystem, CameraSystem, RenderSystem. 3. Zentrale Verwaltung: Die World (EntityManager) Die World fungiert als zentrale Schaltstelle und Datenbank des ECS: - Entitätenverwaltung: Erzeugt und löscht Entitäten-IDs (createEntity(), destroyEntity()). - Komponenten-Mapping: Verknüpft Entitäten-IDs mit ihren Komponenten-Instanzen (meist intern über Data Structures wie Map<Entity, Component Map<Class<? extends>, Component>>). - Abfragen: Stellt Methoden bereit wie hasComponent(entity, ComponentClass) oder getComponent(entity, ComponentClass), damit Systeme gezielt Daten filtern können. 4. Vorteile des ECS-Musters 1. Starke Entkopplung: Systeme arbeiten unabhängig voneinander. Ein MovementSystem kümmert sich nicht um Grafiken, ein RenderSystem nicht um Physik. 2. Hohe Flexibilität: Neue Entitätstypen (z. B. eine Falle, ein NPC oder ein Geschoss) können zur Laufzeit durch einfaches Hinzufügen/Entfernen von Komponenten zusammengestellt werden – ganz ohne neue Klassen anzulegen. 3. Wartbarkeit & Testbarkeit: Da Systeme reine Logikblöcke sind, lassen sie sich ohne visuelle Abhängigkeiten isoliert testen.

Referenz: Datei Lumina: Fate of the Fallen
Die drei Säulen der Architektur

      +-------------------+
      |      Entity       |  --> Reine ID (z. B. ID: 1)
      +-------------------+
                |
       besitzt 1..n Components
                v
  +---------------------------+
  |    PositionComponent      |  --> Reine Daten (worldX, worldY)
  |    VelocityComponent      |  --> Reine Daten (dx, dy, speed)
  |     RenderComponent       |  --> Reine Daten (width, height, color)
  +---------------------------+
                ^
                | wird verarbeitet von
      +-------------------+
      |      System       |  --> Reine Logik (z. B. MovementSystem)
      +-------------------+
#ecs #architecture #design-pattern #decoupling #java #2d-engine
Bearbeiten