Level-Implementierung

7

Ich habe vor kurzem angefangen, ein Sidescroller-Spiel zu Lernzwecken zu erstellen. Während ich mehrere Level dafür erstellte, stieß ich auf die Frage, wie ich diese Level in mein Spiel implementieren kann. Ich habe ein zustandsbasiertes Spiel mit einem Menüstatus, einem Spielstatus usw. erstellt (und ich denke, dies ist der übliche Weg, korrigiere mich, wenn ich falsch liege, ich weiß es zu schätzen). Was ist der übliche Weg, um verschiedene Level im Spielzustand zu implementieren? Soll ich für jedes Level einen neuen Status erstellen? oder sollte der Spielzustand der einzige "spielbare" Zustand sein und das aktuelle Level, in dem er sich befindet, "kennen" (wie auch immer realisiert)? Wie würden Sie Punktzählungen oder ähnliches realisieren (wie ein Live-System oder ein einfaches Punktesystem mit dem höchsten Punktestand)?

Simiil
quelle

Antworten:

4

Die Umsetzung des Levelkonzepts ist sehr unterschiedlich, aber zwei gängige Techniken kommen in den Sinn.

Bei den meisten offenen Spielen, bei denen Level / Fortschritt lediglich ein interner Zustand des Spielers sind, besteht die normale Implementierung darin, dass die Spielressourcen mit dem Spielerstatus Schritt halten. Wenn Ihr Level also "in den Docks" beginnt, wird Ihr Spiel gestartet indem Sie dorthin gebracht werden und mit dem Laden beginnen.) Das Spiel wartet, bis alle Assets vollständig geladen sind, und wechselt dann in den Status "geladen".

Die andere übliche Technik besteht darin, das Niveau expliziter zu gestalten. Das zu ladende Level stammt immer noch aus den Sitzungsinformationen des Spielers, aber Sie laden das Level in das Spiel und platzieren dann Objekte auf ihren Startpunkten. Dies ist die Norm für Spiele mit wörtlichen Ebenen, die Schauplätze zum Spielen sind. Speicherspiele für diese Stilspiele speichern normalerweise nur den Unterschied zu den Startbedingungen des Levels.

Wie Sie sehen können, bedeutet keines davon, dass Sie einen Spielstatus pro Level haben, nur, dass das Level entweder Aufholjagd auf die Informationen zur Spielersitzung spielt oder dass die Assets explizit für das Level geladen werden und der Spieler darin platziert wird.

In Ihrem Sidescroller kann dies als Sitzungsinformation verwendet werden, die den Level-Index / die ID enthält, und dieses Level dann auf den Spielstar laden. Wenn sich Ihr Level-Index ändert, speichern Sie alle Informationen, die Sie benötigen, um von einem Level zum nächsten zu gelangen. Geben Sie dann das aktuelle Level frei, laden Sie das neue und legen Sie schließlich Ihren gespeicherten Status ab.

Punkte oder Spielfortschritte werden normalerweise über Sitzungsinformationen verwaltet, die normalerweise Ihr aktuelles Leben, Ihre Punktzahl, Ihre Spielzeit, jedoch nicht die Informationen innerhalb des Levels (wie Gesundheitszustand, Geschwindigkeit, Anzahl der auf dem Bildschirm angezeigten Kugeln) umfassen. Diese Trennung ist wichtig in Spielen, in denen das Level nicht immer dem Ort zugeordnet ist (z. B. in Spielen, in denen Sie Orte erneut besuchen), kann jedoch dazu beitragen, Ihr Denken auch in linearen Spielen zu vereinfachen.

Richard Fabian
quelle
2

Der Spielstatus kann einfach einen Index für das aktuelle Level mit sich führen. Sie benötigen einen Trigger (zumindest eine Funktion), wenn das Level endet, damit Sie das aktuelle Level entladen, den aktuellen Level-Index aktualisieren, dann das (neue) aktuelle Level laden und mit dem Spielen beginnen können.

Sie können für jede Ebene einen anderen Status erstellen, dies ist jedoch normalerweise nicht erforderlich. Die Datenunterschiede zwischen "Frontend" und "im Spiel" sind nicht dieselben wie die Unterschiede zwischen den Ebenen. Wenn Sie den Status pro Level wünschen, können Sie eine andere Zustandsmaschine im Spielstatus haben. Die rudimentärste Form davon ist ein Index, der das aktuelle Level darstellt. :) :)

Dash-Tom-Bang
quelle