Meine Lösung wäre, jede physische Entität in der Spielkarte als Baumknoten und die Karte selbst als Wurzelknoten zu behandeln . Knoten können andere Knoten enthalten. Jeder Knoten ist (direkt oder indirekt) innerhalb des Kartenknotens enthalten.
Angenommen, Ihr Charakter steht auf einer Plattform. Der Knoten der Plattform enthält den Knoten des Charakters. Wenn sich die Plattform also bewegt, bewegen sich auch die darin enthaltenen Knoten (in diesem Fall der Charakter).
Zu diesem Zweck sollte jeder Knoten eine (x, y) -Position relativ zum übergeordneten Knoten haben . Zum Beispiel könnte sich Ihr Charakter bei (1,0) relativ zur Plattform befinden, was sich selbst bei (10,10) relativ zur Spielkarte befinden könnte. Auf diese Weise bewegt sich Ihr Charakter implizit, wenn sich die Plattform bewegt.
In diesem hierarchischen Baum ist die Position jedes Knotens gleich der Summe seiner Position plus der Positionen aller übergeordneten Knoten. Angenommen, wir möchten die Position des Charakters auf der Karte ermitteln. Wir berechnen:
(Position des Charakters) + (Position des Elternknotens) + (Position des Wurzelknotens) = (1,0) + (10,10) + (0,0) = (11,0)
OK, die ganze Zeit stand dein Charakter auf der Plattform. Was ist mit Springen? Nun, in dem Moment, in dem er springt, lösen Sie ihn von der Plattform und befestigen ihn an dem Knoten, der die Plattform enthält . in diesem Fall die Karte (Wurzelknoten).
Wenn er wieder landet, befestigen Sie ihn an dem Knoten, auf dem er gelandet ist.
Ich würde vorschlagen, dies als ein Problem der Pseudophysik zu behandeln und es mit Hilfe von Bodenreibung zu lösen.
Sie nutzen bereits die Schwerkraft, um den Charakter auf dem Boden zu halten. Dadurch werden Situationen bewältigt, in denen sich Plattformen auf und ab bewegen. Um mit der linken und rechten Bewegung fertig zu werden, sollte der Boden eine große Reibung auf den Charakter ausüben. Typischerweise würde dieses Reibungsniveau 1,0 oder 100% betragen.
Wenn der Charakter stillsteht, ist seine Geschwindigkeit 0 und erbt stattdessen aufgrund der Reibung 100% der Geschwindigkeit der Plattform. So etwas wie das folgende:
Der Vorteil dieses Ansatzes besteht darin, dass er sich leicht für zusätzliche Plattformmechanismen eignet, z. B. um die Reibung an steilen Hängen zu überwinden und Ihrem Charakter das Gleiten zu ermöglichen. Außerdem können Sie auf einfache Weise die Reibung verringern, um Eis zu erzeugen, auf dem der Charakter rutscht.
Es ist auch einfacher, Probleme wie niedrige hängende Wände zu lösen, die Ihren Player von einer sich bewegenden Plattform stoßen können. Wenn Sie den Charakter einfach als Kind einer übergeordneten Plattform behandeln, ist die Wahrscheinlichkeit groß, dass er ohne viel Arbeit nicht so einfach mit dem Rest Ihrer Kollisionserkennung interagiert.
quelle
Sie können die Position des Spielers nicht "absolut im Level", sondern "relativ zur Plattform" festlegen und dann eine Funktion haben, die seine tatsächliche Position angibt. Das mag ich aber nicht.
Es wäre wahrscheinlich besser (und einfacher), den Spieler an die Plattform zu binden, damit sich der Spieler, wenn sich die Plattform + x / + y bewegt, so weit wie möglich bewegt.
quelle