Wie können wir unseren Charakter dazu bringen, sich reibungslos über Kacheln zu bewegen? Er bewegt sich Kachel für Kachel, aber das sieht unprofessionell aus. Wenn Sie die Pfeiltasten gedrückt halten, bewegt er sich außerdem über den Bildschirm. Wie können wir das verhindern?
8
Antworten:
Eine reibungslose Bewegung kann auf verschiedene Arten erreicht werden. Und es hängt wirklich davon ab, welche Art von Bewegung Sie zulassen möchten.
Pseudocode:
Wobei
MoveTowards
nur die aktuelle Position einnimmt und einen Teil des Abstands zwischen ihr und der Zielposition hinzufügt.Das Halten der Pfeiltasten zum Verschieben von Zeichen kann auch auf verschiedene Arten implementiert werden. Wahrscheinlich ist das, was Sie tun, so etwas wie:
Dies würde in der Tat dazu führen, dass der Charakter über den Bildschirm läuft. Da würden Sie die Position viele Male pro Sekunde aktualisieren. Ein etwas besserer Weg, dies zu implementieren, wäre das Hinzufügen einer Verzögerung. Etwas wie
Dies fügt einen Verzögerungszeitgeber hinzu und aktualisiert die Kachelposition erst, wenn der
movementDelay
Wert erreicht wurde.quelle
Ich kann zwei Probleme identifizieren. Der erste bezieht sich auf sanfte Bewegungen und der zweite auf das Zippen des Charakters vom Bildschirm.
Um eine gleichmäßige Bewegung zu erstellen, können Sie eine Technik namens Lineare Interpolation oder (LERP) verwenden, um die Bewegung zu glätten. Grundsätzlich funktioniert es zwischen Ihrem Start- und Endpunkt. Sie berechnen eine Reihe von immer kleiner werdenden Abständen, um eine reibungslose Bewegung und Verlangsamung zu emulieren, wenn der Endpunkt fast erreicht ist.
Das einfachste Beispiel für diese Funktion wäre:
Wenn sich der Charakter Punkt 2 nähert, wird er allmählich langsamer. Beachten Sie jedoch, dass sie Punkt 2 niemals berühren, sondern sich unendlich nähern. Sie müssten dies korrigieren, und wenn der Spieler weniger als eine unendlich kleine Entfernung von Punkt 2 hat, können wir davon ausgehen, dass sich der Spieler auf Punkt 2 befindet.
Das zweite Problem, das Sie erwähnt haben, bezieht sich auf Ihren Charakter, der außerhalb des Bildschirms fliegt. Dies ist ein Ergebnis der Eingabe, die bei jeder Aktualisierung der Spielschleife gelesen wird, kombiniert mit der sofortigen Bewegung zwischen den Kacheln.
Um dies zu lösen, müssen Sie sich in Ihrem Code entscheiden
quelle