Wie kann ich einen Charakter auf Pisten stehen lassen?

8

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: Limbo Hauptfigur am Hang stehen Limbo Hauptfigur steht auf einem flachen Boden
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: Wir können sehen, dass das Sprite dem Boden folgt, auf dem es steht, so dass die Füße des Charakters auf dem Boden liegen, aber seine Wirbelsäule nicht senkrecht zum Horizont, sondern mehr zum Boden

Wenn ich die Rotation deaktiviere, würde ich ungefähr so ​​etwas bekommen: Hier ist die Wirbelsäule senkrecht zum Horizont, aber die Füße des Charakters berühren den Boden nicht.  Tatsächlich gibt es nur eine Ecke des Sprites, die den Boden berührt
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: Geben Sie hier die Bildbeschreibung ein
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 ?

Trevör
quelle
1
Versuchen Sie, selbst am Hang zu stehen und sehen Sie, wie das geht. Wenn Sie ein Bein vor das andere stellen, muss sich das Bein höher biegen, um die Neigung auszugleichen. Ihr Ansatz mit mehreren Gelenken ist daher eine gute Option.
Eejin
@Eejin Ok danke, und was ist mit dem grafischen Realismus auf der Ebene der Gelenke? Was kann ich tun, um sie natürlich zu verknüpfen? Damit es nicht so aussieht, als gäbe es mehrere Knoten?
Trevör
Es hängt von einigen Aspekten Ihres Spiels ab. Natürlich helfen gut gezeichnete Körperteile. Könnten Sie etwas mehr Informationen über Größen und wie wichtig perfekte Details sind?
Eejin
Wenn Ihr Boden immer beispielsweise hohes Gras ist, kann es in Ordnung sein, nur den Tiefpunkt des Sprites zu verwenden, da die Beine der Charaktere bis zu dem Punkt verdeckt werden, an dem Sie nicht mehr erkennen können, wie sie standen.
jzx
Ich weiß nichts über SpriteKit, aber viele Spiele repräsentieren den Spieler eher als "Kapsel" - oder "Pillen" -Form als als Rechteck. Außerdem ist das Physikobjekt normalerweise kleiner als das Sprite selbst.
Thane Brimhall

Antworten:

6

Um die Antwort von Josh Petrie zu erweitern, ist es auch ziemlich einfach, den Fußwinkel zu finden.

Geben Sie hier die Bildbeschreibung ein

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.

igrad
quelle
5

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