Ich bin ein erfahrener Entwickler, der neu in der Spieleentwicklung ist, und ich habe ein relativ einfaches, aber funktionierendes 3D-Jump'n'Run-Spiel entwickelt und suche nach Möglichkeiten, die Architektur skalierbarer zu machen.
Was ist ein guter Weg, um mit der Entwicklung von Spielen umzugehen?
Ein sehr naive Ansatz besteht darin, mehrere Boolesche Werte zu verwenden:
Dies ist sehr unflexibel, da ein Entwicklerfehler gleichzeitig zu time_stopped = True
und time_slow_motion = True
führen könnte, was die Spiellogik zerstören würde.
Ich suche nach einem besseren Ansatz in Richtung:
%Vor% Aber wie würde ich mehrere Gruppen von Staat auf eine gute Weise behandeln? Ich könnte ein LevelState
erstellen, das LOADED
, PAUSED
und COMPLETED
hat. Aber wie gehe ich mit überlappenden Gruppen um, wenn LevelState
und TimeState
PAUSED
immer gleich sein sollten?
Gibt es ein gutes Designmuster oder eine gute Vorgehensweise, um die Zustandsverwaltung zu lösen?
Was ist ein guter Weg, um mit Zustandsänderungen umzugehen?
Meine Gedanken sollen entweder dem Staatsgegenstand z. LevelState
Callback-Funktionen, die bei einer gegebenen Statusänderung ausgeführt werden sollen - oder um das Statusobjekt jeder Spielschleife wie if level_state.changedTo() == LevelState.COMPLETED: doStuff()
abzufragen. Gibt es bessere Möglichkeiten, damit umzugehen? Nachrichtenwarteschlangen / Ereignisse? Ich möchte keine Logik in die Zustandsobjekte einbetten.
Ich interessiere mich auch, wenn man sowohl die Ereignisse changedFrom
und changedTo
behandeln sollte und was passieren würde, wenn die durch changedFrom
ausgelöste Logik den Zustand des Objekts ändert, bevor die changedTo
Logik ausgelöst wird - wer gewinnt?
Ich möchte keine Umsetzung / sprachspezifische Antworten, aber Tipps für einen guten Weg, architektonisch klug zu denken.
Das ist so üblich, dass es sogar ein Muster gibt: Das Zustandsmuster
Am Anfang sieht es so aus, als hätte dieser Ansatz einen gewissen Overhead, aber wenn die Logik komplizierter wird, werden Sie die Vorteile sehen.
Tags und Links language-agnostic design-patterns architecture state-machines