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:
//point1 is the current position, will be starting position on first call
//point2 is the target position
//epsilon is the % of the distance between current and target you want
//to cover per game physics loop (a fixed realworld time based loop).
//The smaller the % the "smoother" the motion.
float lerp(float point1, float point2, float epsilon)
{
return point1 + epsilon * (point2 - point1);
}
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
- Wie viel Zeit in der realen Welt würde es dauern, bis sich der Charakter von Punkt 1 zu Punkt 2 bewegt.
- Stellen Sie Ihren Lerp so ein, dass er während dieser Dauer zwischen Punkt 1 und 2 läuft
- Lesen Sie die Eingabe erneut, sobald Punkt 2 erreicht ist, um zu entscheiden, wohin Sie gehen möchten