Was sind gute Techniken, um den Zustand und den Zustand der Spielentwicklung zu bewältigen?

8

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:

%Vor%

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.

    
Anton B 07.09.2011, 18:09
quelle

1 Antwort

2

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.

    
fabrizioM 07.09.2011 19:03
quelle