Beachten Sie zunächst, dass ich das Prinzip verstehen möchte, daher würde ich Erklärungen in einfachem Englisch bevorzugen (aber natürlich habe ich nichts gegen einen Code, der diese Erklärungen ergänzt).
Ich frage mich, wie man einen Charakter am Hang richtig macht. Beginnen wir mit zwei Screenshots des Spiels Limbo, um Ihnen zu zeigen, was ich meine:
Wie Sie auf diesen Bildern sehen können, sieht es aus wie der Rücken des Der Charakter ist tatsächlich senkrecht zum Horizont und nicht zur Oberfläche des Bodens. Diese Beobachtung führt mich zu meiner Frage:
Wie können Sie ein solches Verhalten mit Sprite Kit reproduzieren? Denn wenn ich einen physischen Körper an einen Knoten anbringe, habe ich die Möglichkeit, ihn drehen zu lassen, sodass ich so etwas bekomme:
Wenn ich die Rotation deaktiviere, würde ich ungefähr so etwas bekommen:
Wie Sie sehen können, stellen diese Möglichkeiten beide Probleme dar und sehen überhaupt nicht natürlich aus. Wie soll ich es also machen, damit es natürlich aussieht?Ich dachte daran, mehrere Sprites und mehrere Physikkörper zu erstellen und sie dann alle mit Gelenken zu verbinden. Ich glaube nicht, dass es natürlich aussehen wird, denn wenn Sie sich das ansehen:
Obwohl ich diese Knoten physisch verbinden kann, wie werde ich sie herstellen grafisch echt aussehen? Denn in der Realität zum Beispiel sind Oberschenkel und Wade durch ein Knie verbunden ...
Irgendwelche Ideen ?
Antworten:
Um die Antwort von Josh Petrie zu erweitern, ist es auch ziemlich einfach, den Fußwinkel zu finden.
Der Winkel der Füße entspricht dem Winkel der geneigten Fläche. Da wir bequemerweise zwei Punkte an diesem Hang haben, können wir den Neigungswinkel ermitteln (es ist auch möglich, zwei Ecken der dreieckigen Form des Hangs zu verwenden, aber allmähliche Hänge würden zu kompliziert werden; für sanfte Hügel ist dies die beste Lösung). Letztendlich ist die Neigung H / P (vorausgesetzt, die Ferse des gebogenen Beins befindet sich direkt unter der entsprechenden Hüfte) oder Arctan (H / P) rad. Unter Verwendung von Cosinus kann man leicht feststellen, dass H = (F + T) - (Fcosθ + Tcosφ).
Der Fußwinkel wird zu Arctan ((F (1-cosθ) + T (1-cosφ)) / P)
PS: Wenn Sie WIRKLICH einsteigen möchten, können Sie auch die zusätzliche Breite zu P finden.
PSS: Der Fuß wird sich nur zu weit nach oben beugen. Denken Sie also daran, bevor Sie versuchen, einen 80-Grad-Hang zu erklimmen.
PSSS: Die Leute klettern nicht auf den Fersen, sondern ruhen sich auf ihnen aus. Wenn Sie den Fuß auf dem Hügel perfekt flach halten, kann dies dazu führen, dass der Spieler auf den Zehenkugeln steht und die Ferse im Leerlauf auf den Boden sinkt. Dies kann zu einer sehr realistischen Bewegung führen.
quelle
Es gibt einfache Lösungen und Tricks, die Sie verwenden können (wenn Ihre Steigungen beispielsweise alle einen festen Winkel haben, erstellen Sie einfach zusätzliche Sprites für geneigte Bewegungen und Leerlauf, stellen Sie einen Mechanismus bereit, mit dem Ihr Spielcode erkennt, ob Sie sich auf einer geneigten Oberfläche befinden, und entsprechend rendern - dies ist normalerweise das, was ältere Sprite-basierte Spiele getan haben).
Eine allgemeine Lösung, die Ihre Idee eines Sprites mit mehreren Gelenken erweitert, besteht darin, die inverse Kinematik zu verwenden , um die Platzierung der Füße eines Charakters zu lösen ( siehe auch) ).
Dazu müssen Sie eine logische Skelettstruktur für Ihre Charaktere definieren, die visuell durch mehrere unterschiedliche Sprites dargestellt wird (für den Oberkörper so viele Beinteile, wie Sie benötigen, und den Fuß). Der Endeffektor in diesem System ist die Fußposition des Charakters am Hang, die aus der (festen) Rumpfposition berechnet werden kann, und eine Vorstellung davon, welcher Fuß vorne ist, basierend auf dem aktuellen Laufzyklusrahmen. Zwischen diesen beiden bekannten Positionen kann ein IK-System die Parameter für die Beingelenke lösen und eine vernünftige Annäherung daran erstellen, wie sich ein echter Zweibeiner auf einer geneigten Oberfläche stabilisieren könnte.
IK wird oft als 3D-Problem ausgedrückt, kann jedoch relativ leicht auf den 2D-Raum reduziert werden. In 2D müssen Sie nicht mit fast so vielen Gelenkrotationsbeschränkungen herumfummeln, um eine realistische Bewegung zu erzeugen, wie Sie es in 3D tun würden, was sehr schön ist.
Dies ist die Methode, die von vielen modernen 2D-Spielen verwendet wird, insbesondere angesichts des Trends skelettbasierter Sprite-Kompositionen für Charaktere und nicht der älteren Technik, jeden Frame von Hand zu erstellen.
quelle