Es gibt ein Dutzend Möglichkeiten, wie ich diese Frage formulieren könnte, aber um meine Gedanken in Einklang zu bringen, formuliere ich sie in Übereinstimmung mit meinem vorliegenden Problem.
Also erstelle ich eine schwimmende Plattform, auf der ich einfach von einem bestimmten Punkt zum anderen fahren und dann zum ersten zurückkehren und einfach in einer geraden Linie zwischen den beiden hin- und hergehen möchte. Um es jedoch ein wenig interessanter zu machen, möchte ich der Plattform einige Regeln hinzufügen.
- Ich codiere es, um ein Vielfaches ganzer Kachelwerte von Weltdaten zu übertragen. Wenn die Plattform also nicht stationär ist, bewegt sie sich mindestens eine ganze Fliesenbreite oder Fliesenhöhe.
- Innerhalb einer Fliesenlänge möchte ich, dass es von einem Stopp auf eine bestimmte Höchstgeschwindigkeit beschleunigt.
- Nach Erreichen der Entfernung einer Kachellänge möchte ich, dass diese bei einer bestimmten Kachelkoordinate zum Stillstand kommt und den Vorgang dann in umgekehrter Reihenfolge wiederholt.
Die ersten beiden Teile sind nicht allzu schwierig, im Wesentlichen habe ich Probleme mit dem dritten Teil. Ich möchte, dass die Plattform genau an einer Kachelkoordinate anhält, aber da ich mit Beschleunigung arbeite, scheint es einfach zu sein, die Beschleunigung in die entgegengesetzte Richtung auf einen Wert anzuwenden, der die aktuelle Geschwindigkeit der Plattform speichert, sobald sie die Länge einer Kachel erreicht der Entfernung (unter der Annahme, dass die Kachel mehr als eine Kachellänge zurücklegt, aber um die Dinge einfach zu halten, nehmen wir einfach an, dass dies der Fall ist) - aber dann ist die Frage, wie hoch der richtige Wert für die Beschleunigung wäre, um diesen Effekt zu erzielen? Wie würde ich diesen Wert finden?
acceleration = desired_velocity - currentVelocity
Wenden Sie diese Beschleunigung dann wie gewohnt an. Ich werde in Kürze eine Antwort erstellen, die zeigt, was ich tue.Antworten:
Verwenden Sie diese Lenkverhalten als Richtlinie. Betrachten Sie das Ankunftsverhalten:
Wir können eine "Ankunft" -Funktion wie diese erstellen:
Dadurch wird die Beschleunigung aktualisiert, die zum Anwenden auf das bewegte Objekt erforderlich ist.
quelle
Schauen Sie sich diese Seite an: http://sol.gfxile.net/interpolation/index.html
Es scheint, dass Sie einen Effekt wie den glatten Schritt wollen:
Wenn Sie den Punkt ganz links haben, den Punkt ganz rechts, den die Plattform erreichen sollte, und die Zeit, die sie für die Erstellung einer vollständigen Sequenz benötigen sollte, kann Folgendes in Ordnung sein:
foreach frame:
Wenn Sie eine Physik-Engine verwenden, können Sie sie mit Impulsen erstellen, sollte nicht so schwer zu übersetzen sein. Wenn Sie einen noch reibungsloseren Prozess wünschen, können Sie den Smoothstep-Level erhöhen.
quelle
Sie können XnaTweener verwenden , das Beschleunigungsfunktionen bietet, mit denen Werte auf einfache Weise von einem Punkt zum anderen interpoliert werden können ...
Hier ist eine Antwort mit Code aus dem Xna Tweener-Projekt und einem Video, das zeigt, wie es funktioniert ...
https://gamedev.stackexchange.com/a/26872/8390
[BEARBEITEN]
Sie sollten eine Tastenfolge haben, die die Plattformbewegung wie folgt definiert:
Und dann können Sie die Bewegung folgendermaßen handhaben:
"DefaultPosition" ist die Startposition, "Traslation" akkumuliert die Bewegung mehrerer Tasten, und jede Tastenübersetzung ist relativ zur vorherigen Taste. Wenn Sie sie also mit einem Verhältnisfaktor [0..1] multiplizieren, wird die interpolierte relative Übersetzung zurückgegeben um diesen Schlüssel vom vorherigen Schlüssel zu erreichen ...
Hier haben Sie ein weiteres Video, das eine Plattformbewegung zeigt, die wie hier beschrieben definiert ist ...
http://www.youtube.com/watch?v=ZPHjpB-ErnM&feature=player_detailpage#t=104s
Ich habe diesen Code überarbeitet, um ihn verständlich zu machen ... vielleicht hat er einen Fehler ... der ursprüngliche Code behandelt mehrere Instanzen derselben Bewegung, aber mit einigen Verzögerungen zwischen den einzelnen Instanzen ... Ich bin sicher, dass dieser Code dies kann neu gestaltet werden, um einfacher zu sein ...
quelle