🎮 Comprendre l’ECS : la brique invisible derrière les jeux modernes
der 13. Oktober 2025
- Entitäten (Spieler, Feinde, Objekte, Kacheln), * Verhaltensweisen (Bewegung, Angriff, Effekt), * und Systeme (Rendering, KI, Kollisionen, Statuseffekte usw.).
Klassische objektorientierte Ansätze führen schnell zu übermäßig tiefen Hierarchien: „Player erweitert Character erweitert Entity erweitert Drawable erweitert Object“ … Ergebnis: eine Gasfabrik.
Hier kommt das ECS – Entity Component System ins Spiel.
⚙️ Die Grundidee
Das ECS basiert auf einem einfachen Prinzip:
Trennen Sie Daten, Verhalten und AusfĂĽhrung.
| Element | Rolle | Beispiel | | ------------- | ------------------------------------------- | --------------------------------------------------------- | | Entität | Eindeutige Kennung | „#23 = Krieger auf Feld (3,2)“ | | Komponente | Rohdaten (keine Logik) | „Position(3,2)“, „Leben(10)“, „Angriff(3)“ | | System | Verhalten (wirkt auf einige Komponenten) | „Bewegungssystem“, „Kampfsystem“, „Renderingsystem“ |
ECS ersetzt die objektorientierte Programmierung nicht – es dekonstruiert sie, um sie skalierbar zu machen. Anstatt zu schreiben, was jede Klasse tut, definieren Sie, wie Daten interagieren.
đź§© Konkretes Beispiel
Nehmen wir ein vereinfachtes Beispiel in GDScript (Godot):
# Komponentenposition Klassenname CPosition erweitert Ressource @export var q:int @export var r:int
# Life-Komponentenklassenname CVie erweitert Ressource @export var hp:int = 10
# Rendering-System erweitert Node const CPosition = preload("res://components/CPosition.gd")
Funktion process_system(dt): für Entität in get_entities_with([CPosition]): var pos = entity.get_component(CPosition) draw_unit(pos.q, pos.r)
Hier :
- die Entität „tut“ nichts – sie enthält Komponenten; * Systeme werden bei Entitäten ausgelöst, die über einen bestimmten Satz von Komponenten verfügen.
Es handelt sich um einen datengesteuerten Ansatz: Alles wird durch Daten gesteuert.
đź§® Warum es leistungsstark ist
ECS ist nicht nur ein trendiges Designmuster. Es ist ein strukturierender Ansatz, der drei Hauptprobleme löst:
1. Skalierbarkeit
Sie können neue Verhaltensweisen hinzufügen, ohne alte zu beeinträchtigen:
Das Hinzufügen einer „CInvisible“-Komponente reicht aus, damit ein „Rendering“-System Ihre Entität ignoriert.
2. Wiedergabe und Simulation
Sie können ein Spiel erneut spielen, indem Sie dieselbe Ereignissequenz anwenden, da der gesamte Spielstatus reine Daten sind und serialisierbar, differenzierbar und testbar.
3. Leistung
Moderne ECS (wie Flecs, EnTT oder Unity DOTS) speichern Daten im zusammenhängenden Speicher. Die CPU liebt das:
weniger Anrufe, weniger Cache-Miss, mehr Geschwindigkeit.
đź§± In Darkwaar 5
Darkwaar 5 basiert auf einem leichtgewichtigen ECS in GDScript, ohne externe Engine. Das Ziel ist:
- eine zentrale Welt (
World
), * einfache Entitäten (ein Knoten pro Charakter oder Objekt), * Komponenten (Ressource
) fĂĽr Daten, * Systeme (Knoten
) fĂĽr Logik.
Vereinfachtes Beispiel:
# GameRoot.gd @onready var world := $World
func _ready(): var unit = world.create_entity() unit.add_component(CPosition.new()) unit.add_component(CVie.new())
Jeder Frame:
- die „Welt“ geht über die aktiven Systeme; * die Systeme durchlaufen die Entitäten, die sie betreffen; * und die Logik wird auf den Rohdaten ausgeführt.
Diese Trennung erleichtert das HinzufĂĽgen von:
- ein Buff-System (temporäre Effekte), * ein Kampfauflösungssystem, * oder ein Puzzle-System für Level.
🧩 ECS ≠Magie
ECS ist nicht „besser“ als ein objektorientierter Ansatz: Es macht die Wartung einfacher.
Dies hat jedoch seinen Preis: Sie müssen in Datenströmen denken, nicht in Objekthierarchien.
- Kein „Player.move()“, sondern ein „SystemMouvement“, das „CPosition“ und „CVitesse“ liest. * Kein „Enemy.attack()“, sondern ein „SystemCombat“, das „CCombat“ und „CVie“ liest.
Es handelt sich um einen Paradigmenwechsel, aber wenn man ihn einmal verstanden hat, wird alles klarer.
đź§ Was Darkwood davon in Erinnerung hat
Bei Darkwood ist ECS nicht nur eine Spielarchitektur. Es ist eine Denkweise über Modularität:
- In Darkwaar strukturiert es das Gameplay und die Rätsel. * In Uniflow inspiriert es die Logik der Datenflüsse. * In Flow dient es als Grundlage für die visuelle Komposition von Automatisierungen.
Gleicher Kampf: getrennte Daten, Verhaltensweisen und AusfĂĽhrungslogik.
đź”® Und danach?
Der nächste Schritt für Darkwaar 5:
- Integrieren Sie das ECS in das isometrische Kartensystem; * Verknüpfen Sie jede Box mit einer Entität; * und synchronisieren Sie die Komponenten zwischen der Ansicht (oben) und dem HUD (unten).
Dies wird die Grundlage für eine Open-Source-Taktik-Engine mit isometrischer Architektur legen, die für die prozedurale Generierung, Rätsel und emergente Systeme konzipiert ist.