Zustandsautomaten scheinen schädliche Abhängigkeiten in komponentenbasierten Architekturen zu verursachen.
Wie wird konkret die Kommunikation zwischen einer Zustandsmaschine und den Komponenten gehandhabt, die zustandsbezogenes Verhalten ausführen?
Wo ich bin:
- Ich bin neu in komponentenbasierten Architekturen.
- Ich mache ein Kampfspiel, obwohl ich nicht denke, dass das wichtig sein sollte. Ich stelle mir vor, dass meine Zustandsmaschine verwendet wird, um Zustände wie "ducken", "stürzen", "blockieren" usw. umzuschalten.
- Ich habe festgestellt, dass diese State-Management-Technik das natürlichste System für eine komponentenbasierte Architektur ist, aber sie widerspricht den Techniken, über die ich gelesen habe: Dynamisches Spielobjekt-Komponentensystem für Charaktere mit veränderlichem Verhalten Es wird vorgeschlagen, dass alle Komponenten aktiviert / deaktiviert werden sich selbst, indem sie ständig eine Bedingung für die Aktivierung überprüfen.
- Ich denke, dass Aktionen wie "Laufen" oder "Gehen" als Status sinnvoll sind, was mit der hier akzeptierten Antwort nicht übereinstimmt: /gamedev//a/7934
Ich fand das nützlich, aber nicht eindeutig: Wie implementiere ich Verhalten in einer komponentenbasierten Spielarchitektur? Es wird vorgeschlagen, eine separate Komponente zu haben, die nur eine Zustandsmaschine enthält. Dies erfordert jedoch eine Art Kopplung zwischen der Zustandsmaschinenkomponente und nahezu allen anderen Komponenten. Ich verstehe nicht, wie diese Kopplung behandelt werden soll. Dies sind einige Vermutungen:
A. Komponenten sind von der Zustandsmaschine abhängig:
Komponenten erhalten Verweise auf ZustandsmaschinenkomponentengetState()
, die eine Aufzählungskonstante zurückgeben. Komponenten aktualisieren sich regelmäßig und prüfen dies nach Bedarf.B. Die Zustandsmaschine hängt von den Komponenten ab:
Die Zustandsmaschinenkomponente erhält Verweise auf alle Komponenten, die sie überwacht. Es fragt ihregetState()
Methoden ab, um zu sehen, wo sie sich befinden.C. Eine Abstraktion zwischen ihnen
Verwenden Sie einen Event Hub? Befehlsmuster?D. Es werden separate Statusobjekte verwendet, die auf das Statusmuster der Komponenten verweisen
. Es werden separate Statusobjekte erstellt, die eine Reihe von Komponenten aktivieren / deaktivieren. Zustandsmaschine wechselt zwischen Zustandsobjekten.Ich betrachte Komponenten als Implementierungen von Aspekten . Sie tun alles, was intern benötigt wird, um diesen Aspekt zu verwirklichen. Es scheint, als ob Komponenten von selbst funktionieren sollten, ohne auf andere Komponenten angewiesen zu sein. Ich weiß, dass einige Abhängigkeiten erforderlich sind, aber Statusmaschinen scheinen alle meine Komponenten steuern zu wollen.