Ich dachte, Sie müssen wissen, wie man diese Ereignisse erstellt, und der Rest des Beitrags handelt davon. Wenn Sie diese Ereignisse nur speichern möchten, verwenden Sie eine relationale Datenbank oder beschreiben Sie sie durch Text und verwenden Sie Skriptsprache (er analysiert und wertet sie aus) Du). :)
Sie möchten, dass Ereignisse erkannt werden (1) und dann einige Aktionen ausführen, die von diesen Ereignissen verlangt werden (Meldung drucken, auf Tastendruck prüfen ...) (2). Sie möchten diese Ereignisse auch nur einmal ausführen (3).
Grundsätzlich möchten Sie nach Bedingungen suchen und dann ein bestimmtes Verhalten festlegen.
Wie erkennt man Ereignisse (1)
- Sie möchten Ereignisse wie diesen "zuerst angetroffenen Feind" oder "gewonnenen Gegenstand" erkennen.
- wenn generischer Teil geschieht, „ Feind begegnet “, „ Punkt gewonnen “ Sie können nach bestimmtem Teil überprüfen „ zuerst ...“, „ neues Element gewonnen“
Woraus bestehen Ereignisse?
Im Allgemeinen besteht jedes dieser Ereignisse aus:
- Voraussetzungen , Sie überprüfen sie
- Aktionen, die ausgeführt werden, wenn die Voraussetzungen erfüllt sind (sagen Sie "Sie haben den ersten Feind getötet!", sagen Sie "Kombos durch Drücken der Tasten A und B", sagen Sie "Drücken Sie die Eingabetaste, um fortzufahren", erfordern Sie die Eingabetaste)
So speichern Sie diese Ereignisse
In einigen Datenstrukturen:
- Liste der Voraussetzungen haben (Zeichenfolgen oder Code, wenn Sie es in einer höheren Sprache schreiben)
- Liste von Aktionen haben (sie könnten Zeichenfolgen sein, Quake Engine verwendet Zeichenfolgen für Ereignisse)
Sie können es auch in einer relationalen Datenbank speichern, auch wenn es so aussieht, als ob es nicht notwendig ist. Wenn Sie dieses Spiel in großen Dimensionen erstellen möchten, müssen Sie möglicherweise eine erstellen.
Sie müssen dann diese Zeichenfolgen / Dinge analysieren. Oder Sie können eine Skriptsprache wie Python oder LUA oder eine Sprache wie LISP verwenden, die alle für Sie analysieren und ausführen können. :)
Wie benutze ich diese Events in der Spieleschleife? (2)
Sie benötigen diese beiden Datenstrukturen:
- Warteschlange der Ereignisse (Ereignisse, deren Ausführung geplant ist, werden hier abgelegt)
- Warteschlange von Aktionen (geplante Aktionen, Ereignisse implizieren, welche Aktionen ausgeführt werden)
Algorithmus:
- Wenn Sie einige erkennen Veranstaltung ‚s Voraussetzungen erfüllt sind Sie setzen ihn in Ereigniswarteschlange
- (3) Dann solltest du sicherstellen, dass dieses Ereignis nur einmal passiert ist, wenn du willst :)
- (Wenn die Aktionswarteschlange leer ist, dann) Wenn sich ein Ereignis in der Ereigniswarteschlange befindet Sie stellen seine Aktionen in die Aktionswarteschlange und entfernen ihn aus der Ereigniswarteschlange
- Befindet sich eine Aktion in der Aktionswarteschlange, beginnen Sie damit, die von ihr geforderten Aktionen auszuführen
- Wenn eine solche Aktion ausgeführt wird, entfernen Sie sie aus der Aktionswarteschlange
Wie man diese Aktionen selbst durchführt (2)
Sie erstellen eine Liste von Objekten, die die Funktion "Aktualisieren" haben. Sie werden manchmal als Entities (in der Quake-Engine) oder Actors (in der Unreal-Engine) bezeichnet.
- Sie starten diese Objekte, wenn sie in der Aktionswarteschlange gestartet werden sollen.
- Dieses Objekt kann für andere Zwecke verwendet werden, z. B. für einige andere Zeitgeber. In Quake werden diese Entitäten für die gesamte Spiellogik verwendet. Ich empfehle Ihnen, etwas Material darüber zu lesen .
Aktion "etwas sagen"
- Sie drucken etwas auf dem Bildschirm
- Sie möchten, dass diese Meldung einige Sekunden lang angezeigt wird
- in "update":
- Machen Sie die Variable remove_me_after und verringern Sie sie um die abgelaufene Zeit
- Wenn die Variable 0 ist, entfernen Sie diese Aktion aus der Aktionswarteschlange
- Sie entfernen dieses Objekt auch (oder planen, dass es entfernt wird ...)
Aktion "Schlüssel anfordern"
- Es hängt davon ab, wie Sie es machen wollen, aber ich denke, Sie machen eine Nachricht
- in "update" ":
- Sie müssen nur nach dem gewünschten Tastendruck suchen
- Sie benötigen wahrscheinlich ein Array / eine Warteschlange, um Tastendruckereignisse zu speichern
- Dann können Sie es aus der Aktionswarteschlange entfernen und das Objekt entfernen
Welche Methoden zu lernen