Antworten:
Wenn ein Spieler beim Springen mit einer Wand kollidiert (oder, wenn Sie möchten, beim Fallen), schalten Sie für die nächsten 100 Millisekunden eine Flagge an, so dass ein Versuch, zu springen, erfolgreich einen Sprung auslöst (Oberflächenkontaktprüfungen werden ignoriert) mit a ziemlich viel Geschwindigkeit auf der X-Achse in der Richtung von der Wand entfernt. Denken Sie daran, die Flagge vorzeitig auszuschalten, wenn tatsächlich ein Sprung eingeleitet wird.
Ich hätte ehrlich gesagt nur einen Punktcheck gemacht. So:
if (falling AND left_key_pressed AND !point_free(x-1,y))
doWallJump
Sie können das y ändern, um y + sprite_width / 2 (oder - abhängig von Ihrem Koordinatensystem) zu sagen, sodass es links von der Mitte Ihr Sprite anstelle des oberen (oder unteren) prüft. Auf diese Weise implementiert N Wandprüfungen für das Springen von Wänden (letzter Absatz) .
Danach müssen Sie entscheiden, wie eng Ihre Wand springen soll. Wenn die vertikale Geschwindigkeit Ihres Sprungs die horizontale Geschwindigkeit übersteigt, bevor der Spieler dieselbe Wand wieder erreichen kann, können Sie dieselbe Wand nicht mehr hochspringen und fallen nach und nach auf den Boden zurück (wie in Mario-Spielen mit dem Wandspringen) ). Wenn Sie zulassen, dass die Horizontale schwach genug ist, damit der Spieler wieder an die Wand zurückkehren kann, kann er die Wand nach oben rücken (wie in Meat Boy).
Ein anderer Ansatz, der nicht erwähnt wird, ist der von Super Metroid. Wenn Sie sich in diesem Spiel an einer Wand befinden und sich von dieser Wand entfernen, wird eine sehr kurze Animation abgespielt, in der Sie sich von der Wand entfernen. Wenn Sie während dieser Animation springen, machen Sie einen Wandsprung. (Super Metroid erlaubt es einem Spieler auch, mit Mauersprüngen eine Mauer hinaufzuklettern, erfordert jedoch ein wenig Geschicklichkeit (in der Tat erfordert alles, was mit Super Metroid zu tun hat, einiges an Geschicklichkeit ...).