Ich weiß nicht viel über Finite-State-Maschinen in der KI oder andere Spielverhaltensweisen im Spiel, außer diesem kurzen Tutorial mit einem Miner: http://www.ai-junkie.com/architecture/state_driven/tut_state1.html, das objektorientiert ist.
Ich weiß nicht wirklich, ob dieses Tutorial das Zustandsmuster beschreibt oder nicht. Was denkst du?
Ich spreche nicht über andere eher arithmetisch orientierte Dinge wie Lenkung oder Physik oder Wegfindung oder Kollisionen, sondern über Spielelogik, zustandsgesteuerte KI und Dinge, die viele gleichzeitige Zustände und if
s und / oder switch
es beinhalten
Was sind die Vor- und Nachteile der Verwendung eines Zustandsmusters oder einer sequentiellen Überprüfung einer einfachen Zustandsstruktur wie dieser:
struct States
{
bool is_walking, is_running, holds_a_weapon, is_crouch;
int weapon_id, int id_team;
};
void HandleStates (States state)
{
//etc
}
Antworten:
Ich werde versuchen, dies so gut wie möglich zu beantworten, aber es gibt bestimmte "Best Practices", bei denen ich mir nicht sicher bin, aber ich werde versuchen, sie so sauber wie möglich aufzuschlüsseln.
FSMs
Erstens stammt das Miner-Tutorial aus dem Programmierspiel AI by Example von Mat Buckland (das ich als Einführung in AI empfehlen sollte). Er verwendet für jeden Zustand eine Aufzählung, KEINE Struktur. Mit der Struktur in Ihrem Beispiel haben Sie Boolesche Werte als Status, sodass Sie eine beliebige Anzahl davon gleichzeitig aktivieren können. Dies kann zu einem gewünschten Verhalten führen, führt jedoch bei FSMs (Finite State Machines) häufig zu unerwünschtem Verhalten.
Zum Beispiel:
Zweitens beschreibt er Staaten nicht nur so. Ich persönlich bevorzuge (je nach Situation) die Erstellung einer abstrakten Klasse namens State mit den Funktionen Enter (), Exit () und Update (). Dann erstellen Sie meine Zustände als Unterklassen der Zustandsklasse.
Wie dieses Bild (tatsächlich auf Seite 2 dieses Links zu finden):
Zustandsmuster
Meiner persönlichen Meinung nach ist das Zustandsmuster nur ein Teil des Software-Designs, bei dem die Software eine Reihe von Zuständen aufweist. Die Implementierung liegt beim Entwickler. Ich glaube nicht, dass es einen richtigen Unterschied zwischen der Verwendung einer großen switch-Anweisung oder der Erstellung einer vollständigen Zustandsmaschine gibt, um alle Ihre Zustände auszuführen, wie ich oben beschrieben habe. Sie machen im Wesentlichen das Gleiche. In dieser Hinsicht lautet die Antwort auf eine Ihrer Fragen Ja. Ich glaube, diese Seite beschreibt das Zustandsmuster.
Für und Wider
Jede Methode, mit der Sie ein zustandsgesteuertes Design implementieren, hat Vor- und Nachteile.
Verwenden einer If / Else- oder Switch-Anweisung
Vorteile:
Nachteile:
Verwendung einer objektorientierten Zustandsmaschine
Vorteile:
Nachteile:
Ich hoffe das beantwortet alle deine Fragen. Tatsächlich habe ich gerade meine Kopie von Programming Game AI by Example geöffnet und Mat erwähnt, dass die Zustandsmaschine als "State Design Pattern" bekannt ist. Persönlich bin ich anderer Meinung, aber jedem sein eigenes.
Ich hoffe es hilft :)
quelle