Ich hoffe, dass ich dies korrekt poste, da ich neu auf der Website bin. Sie können mich gerne korrigieren, wenn ich an der falschen Stelle bin.
Was mein Problem betrifft: Ich arbeite an einem 2D-Side-Scrolling-Plattformspiel in libGDX und bin auf ein Problem gestoßen, das ich zuvor in Betracht gezogen habe, aber nie eine solide Antwort erhalten habe. Hier ist ein Beispiel für das, worüber ich mich wundere: In Spielen wie beispielsweise der Legende von Zelda kann dies, wenn der Spieler auf einen Schalter tritt oder eine brennende Fackel fängt, eine Tür öffnen oder ein Monster freisetzen oder eine Vielzahl verursachen von anderen Dingen zu passieren.
Nun stelle ich mir vor, dass dies eine Art Ereignis-Trigger-Beziehung oder ein Messaging-System verwendet, aber es scheint verrückt zu sein, alle diese Ereignisse in die Spiel-Engine selbst zu codieren, selbst wenn ein ereignisbasiertes System verwendet wird.
Gleiches gilt für Lernprogramme und Dialogsysteme: Der Spieler interagiert mit einem NPC oder einer Art Objekt im Spiel, und das Dialogfeld / Lernprogramm wird an bestimmten Punkten fortgesetzt.
In meinem Spiel muss ich in der Lage sein, Ereignisse auszulösen, nachdem ein Charakter eine bestimmte Sache getan hat, und ich muss in der Lage sein, eine Reihe von Dialogen auszulösen. Ich denke, ich weiß, wie ich diese Dinge fest codieren kann, aber ich werde zahlreiche Ebenen haben, die ich mit einem Ebeneneditor wie Tiled entwickeln möchte, anstatt sie fest zu codieren. Aus diesem Grund weiß ich nicht, wie ich Ereignisse in ein solches System integrieren würde.
Meine Fragen sind: Was tun Spielprogrammierer, um zu vermeiden, dass diese Dinge in ihre Spiele hartcodiert werden? Wie werden diese mit einem riesigen Quest-System mit tonnenweise Dialogen oder zahlreichen Levels mit Schaltern und Ereignissen, die ausgelöst werden sollen, in das Spiel integriert?
Vielen Dank für jede Antwort, die Sie mir geben können, ich bin wirklich ratlos über diese :)
PS Wenn Sie mehr Klarheit darüber benötigen, was ich verlange, sagen Sie es mir bitte, damit ich bei Bedarf weitere Einzelheiten mitteilen kann.
PPS Ich habe dieses Post- Level-Editor-Ereignissystem gesehen, wie man Ereignisse in Spielaktionen übersetzt, aber ich habe auf anderen Seiten gesehen, dass Leute hin und her gehen, ob sie eine Skriptsprache oder ein Dateiformat wie XML oder JSON verwenden sollen. und es ist sehr verwirrend ...
Antworten:
Nun, Sie müssen Ihre Engine im Wesentlichen in die Lage versetzen, Logik von der Festplatte zu laden. Sie könnten das tatsächlich in Ihr Programm codieren, aber häufiger entwickeln die Leute ein Datendateiformat für diese Zwecke.
Am Ende läuft es darauf hinaus, eine sehr einfache (und nicht unbedingt vollständige und nicht unbedingt textförmige) Programmiersprache zu erstellen. Deshalb verwenden so viele Spieleentwickler nur eine Skriptsprache wie Lua.
Aber was Sie wirklich nur brauchen, ist, die grundlegenden Operationen in Ihre Engine zu integrieren (z. B. ein Monster zu spawnen, ein Monster zu entfernen, einen Dialogbaum anzuzeigen, ein Monster zu bewegen, ein Missionsziel hinzuzufügen, eine Mission zu lösen, was auch immer Ihr Spiel erfordert). Dann geben Sie jeder Situation ein Ereignis oder einen Auslöser (wie "Monster getötet" oder "Spieler drinnen" oder "Dialogauswahl ausgewählt").
Erstellen Sie dann eine Datenstruktur, mit der jede grundlegende Operation beschrieben werden kann. Speichern Sie in Ihrer Darstellung einer Ebene auf der Festplatte eine solche Datenstruktur für jedes Ereignis jedes Objekts. Laden Sie bei jedem Ereignis die Datenstruktur (wahrscheinlich ein Array von ihnen) und führen Sie die darin beschriebenen Schritte aus.
Viele Spiele können damit durchkommen. Einige benötigen auch eine Art Zählervariable (plus Inkrementierungs- / Dekrementierungsbefehle) und möglicherweise eine Bedingung (einfachste Methode zur Implementierung: Geben Sie ihr einfach eine Variable und einen Wert, mit dem sie überprüft werden soll, und lassen Sie sie dann ein anderes Ereignis auslösen). Wenn Sie darüber hinausgehen, können Sie wahrscheinlich auch eine echte Skriptsprache verwenden.
Was Sie am Ende der Datenstruktur speichern, spielt eigentlich keine Rolle. Sie können XML verwenden, es zeilenweise in Textdateien einfügen, eine binäre Datenstruktur erstellen, was immer Sie wollen.
Ihre Datenstruktur kann so einfach wie ein Int sein, um die Operation zu beschreiben (dh 1 = Spawn-Monster, 2 ist Despawn usw.) und zwei Zeichenfolgen, die angeben, welche Objekte bearbeitet werden sollen.
quelle