Spieler rückt auf, springt oder klettert er?

11

Wie können Sie in einem auf 2D-Physik basierenden Plattformspiel mit Leitern feststellen, ob der Spieler, der sich nach oben bewegt, durch einen Sprung oder das Klettern auf einer Leiter verursacht wird, sodass Sie wissen, welche Animation zu spielen ist?

Und im Allgemeinen reicht der Richtungsvektor offensichtlich nicht aus, um die abzuspielende Animation zu bestimmen: Wie bestimmen Sie auch die Ursache der Bewegung (damit Sie das richtige Sprite kennen)?

Paul Manta
quelle
1
Wenn ein Spieler auf einer Leiter ist, ist er wirklich in der Luft?
Derek

Antworten:

15

Ich habe regelmäßig ein persönliches Logikproblem, das Sie hier auszudrücken scheinen. Es ist so, dass man manchmal die Logik und Programmierung aus der falschen Richtung betrachtet. In diesem Fall scheinen Sie nicht zu erkennen, dass Sie aufgrund des Logikcodes von Anfang an wissen, was passiert. Sie sollten programmgesteuert bereits wissen, ob er auf der Leiter ist oder nicht.

Denken Sie darüber nach (wie gesagt, ich habe oft dieses Problem). Die Spielelogik sollte wissen, dass Sie auf der Leiter stehen, vorausgesetzt, Sie sind ein intelligenter Programmierer. Zur besseren Erklärung habe ich einen Dateiarchivtyp und habe ungefähr eine Stunde am Tag damit verbracht, herauszufinden, wie man die Größe der Daten ermittelt. Ich habe nie aufgehört zu glauben, dass ich es jetzt lade, wenn ich die Datei lade kenne seine Größe: P.

Der Grund, warum dies so exklusiv ist, ist, dass Sie es als "Jetzt, wo ich in der Luft bin, wie finde ich heraus, ob ich auf einer Leiter bin oder springe?" Betrachten ... Wenn Sie es wirklich sollten denke "Ich bin im Begriff in die Luft zu kommen, aber mit welcher Methode ZUERST, damit ich es für die Animationen verwenden kann."

Joshua Hedges
quelle
Einfach, zB: OnJump()Ändern Sie Ihren jumpingBooleschen Wert in "Wahr". Wenn Sie in der Luft sind und jumpingfalsch sind, fallen Sie entweder auf eine Leiter usw.
Joshua Hedges,
6

Das Physiksystem weiß weder, noch kümmert es sich darum, warum sich der Spieler in eine bestimmte Richtung bewegt. Es ist Ihr Spiel, das das Physiksystem veranlasst hat, den Spieler auf diese Weise zu bewegen, und es liegt daher in der Verantwortung Ihres Spiels, dies im Auge zu behalten. Die Spielerentität sollte einen Status haben, der anzeigt, ob sie springt, klettert, läuft usw. Sie sollten nicht versuchen, dies anhand der Ereignisse mit dem Physiksystem herauszufinden.

Nicol Bolas
quelle
2

Es scheint, dass jedes Ereignis, das bei der Kollision ausgelöst wird, die die vertikale Geschwindigkeit des Spielers festlegt, auch verwendet werden kann, um ein Flag zu setzen, das angibt, welche Animation verwendet werden soll.

Wenn Sie eine Bibliothek eines Drittanbieters verwenden, deren Informationen zu restriktiv sind, können Sie die Leiter mit einem Rechteck umgeben. Wenn sich der Player nach oben bewegt und in diesem Rechteck enthalten ist, führen Sie die Kletteranimation durch.

ClassicThunder
quelle
Dies bringt tatsächlich einen guten Punkt auf den Punkt, den ich später in meiner eigenen Spieleentwicklung ansprechen wollte, und auf diese Weise kann die Geschwindigkeit einer Animation basierend auf der Physik geändert werden. Ich habe Charaktere, die ich prozedural mit den Armen schlagen möchte, je nachdem, wie schnell sie fallen. Und ich hatte noch nie über einen guten Weg nachgedacht, dies gründlich zu tun (dachte über die Zeit nach), aber Ihre Geschwindigkeitsidee ist viel besser. +1 für eine allgemein verwendbare Antwort, die nicht nur für seinen Fall spezifisch ist.
Joshua Hedges
1

Setzen Sie beim Einstellen der Sprunggeschwindigkeit auch den Zeichenstatus auf STATE_JUMPING. Auf diese Weise wissen Sie immer, in welchem ​​Zustand sich der Spieler befindet, und können entsprechend handeln, indem Sie den Status des Spielers überprüfen.

Crisi
quelle