Ich mache ein Spiel ähnlich Legend of Zelda: Link to the Past (2D-Action-Abenteuer von oben nach unten). Ich möchte, dass der Charakter auf dem Bildschirm zentriert bleibt, wenn er sich bewegt.
Derzeit bewege ich die gesamte Karte in die entgegengesetzte Richtung, wenn der Spieler sich bewegen möchte. Das funktioniert, aber wenn ich der Welt mehr Objekte hinzufüge, wird es komplizierter, sie alle zu bewegen.
Gibt es einen besseren Weg, dies zu erreichen?
Antworten:
Die typische Vorgehensweise besteht darin, ein Kameraobjekt zu erstellen. Die einfachste Form einer Kamera ist nur eine Position. Diese einfache Kamera definiert die "Mitte" der aktuellen Ansicht. Sie ändern also nicht alle Positionen Ihrer Kacheln / Objekte, sondern subtrahieren beim Zeichnen nur die Kamerakoordinaten von den Positionen. In dieser Situation "bewegt" sich die Kamera nicht.
Während die Kamera und Ihr Charakter die meiste Zeit eine Position teilen, möchten Sie sie möglicherweise dennoch als separate Werte haben, damit Sie beispielsweise die Kamera daran hindern können, sich zu bewegen, wenn sie das Ende der Welt erreicht, aber die zulassen Spieler, um sich weiter zu bewegen.
Eine etwas fortgeschrittenere Kamera bewegt sich. Alle Objekte und Kacheln werden ohne Versatz gezeichnet, und die Position, von der aus Sie rendern, ändert sich. Dies ist der grundlegendsten Kamera sehr ähnlich, und Sie können immer noch viele der gleichen Optimierungen für das selektive Rendern durchführen (nur das aufrufen,
draw
was die Kamera sehen kann). Es ist im Wesentlichen nur eine andere Art, darüber nachzudenken.quelle
cam variables
... und bot eine alternative Methode an ... stackoverflow.com/questions/18199373/…Nein, das ist der falsche Weg.
Wie werden Sie die Trap-Erkennung durchführen? Was ist, wenn der Spieler die Ränder der Wände erreicht? Funktioniert Ihr Anzeigesystem für Dungeons oder müssen Sie einen wesentlichen Teil des Codes neu schreiben?
Die Welt ist Geometrie. Der Spieler ist Geometrie. Die Welt bewegt sich nicht. Der Spieler tut es. Stellen Sie die Position der Kamera so ein, dass sie auf dem Player zentriert ist. Immer . Und das ist alles.
Versuchen Sie nicht und bekommen Lust mit „oh , wenn ich die Welt schieben, dann wird es das geben Aussehen der Spieler bewegt sich “. Sie werden die Mathematik am Ende des Tages nur mit seltsamen Koordinatensystemen komplizieren.
Es ist wahr, dass das Rendern von OpenGL tatsächlich funktioniert, indem "die Kamera so fixiert wird, dass sie nach unten zeigt - z, und die gesamte Weltgeometrie so transformiert und gedreht wird, dass sie in das Volumen der kanonischen Ansicht passt", aber Sie sollten beim Programmieren nicht so darüber nachdenken .
gluLookAt
hat Parameter benannteye
,look
und dasup
aus einem Grund - so können Sie in einem vernünftigen Koordinatensystem denken.quelle