Wände klettern.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Wände klettern.

    Hallo, alle miteinander, ich arbeite derzeit an einem Platformer, doch bereits bei einer meiner Core-Mechaniken komme ich an meine Grenzen. Hauptbestandteil des Spiels soll es sein, Wände zu erklimmen.
    In meinem Kopf sieht das ganze so aus:
    obj_spieler berührt obj_ctrlwall (ein objekt, dass ich vor jeder wand platziere), daraufhin wird geprüft, ob die nach oben Taste gedrückt wird. Ist dies der Fall, wird ein Skript aufgerufen, das das Movement auf der Wand ermöglichen soll. Orientiert habe ich mich dabei an meinem Skript, dass benutzt wird, wenn ich mich auf dem Boden bewege.
    Bewegungsskript

    GML-Quellcode

    1. move = leftkey + rightkey;
    2. hsp = move * movespeed;
    3. if (vsp < 10) vsp += grav;

    Die ganzen Variablen, wie etwa movespeed oder leftkey/rightkey sind anderer Stelle bereits definiert, das Laufskript funktioniert auch. Nun habe ich versucht, dass ganze umzudrehen, so dass der Spieler beim Drücken einer bestimmten Taste gegen die Wand geworfen wird, und sich darauf nun bewegen kann.
    Wandkletterskript

    GML-Quellcode

    1. move = climbkey;
    2. vsp = move * movespeed;
    3. if (hsp < 10) vsp += grav;

    Bei mir bleibt der Spieler allerdings nur in der Luft hängen, bis ich die Taste wieder losgelassen habe.
    Hat jemand eine Lösung für dieses Problem, oder gar einen eleganteren Weg, den Spieler an der Wand laufen zu lassen?
    Gm-d´s Problemkind :thumbsup:
  • Zeig mal bissel mehr von deinem Code.
    ich verseh auch nicht so ganz was deine "if (hsp < 10)" an dieser Stelle bewirken soll?
    du veränderst ja hsp an der Stelle nicht oder?

    vsp = move * movespeed;
    if (hsp < 10) vsp += grav;

    wie genau veränderst du die Position deiner Spielfigur?
    vsb und hsb sind ja erstmal nur zwei Variablen
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • Prayer90 schrieb:

    ich verseh auch nicht so ganz was deine "if (hsp < 10)" an dieser Stelle bewirken soll?


    Okay, mir ist aufgefallen, das ich einen Tippfehler im Code habe. Anstatt if (hsp < 10) vsp += grav; soll hier if (hsp < 10) hsp += grav; stehen (hat aber nix geändert lol).
    Mein Ziel ist es, die Gravitation nicht gegen den Boden, sondern gegen die Wand zu richten. if (hsp < 10) hsp += grav; soll in dem Fall bewirken, dass die Geschwindigkeit (die Stärke der Gravitation) sich erhöht, bis sie 10 erreicht hat (das hat rein ästhetische Gründe).

    Prayer90 schrieb:

    wie genau veränderst du die Position deiner Spielfigur?


    Eigentlich gar nicht, die Position der Spielfigur ist gleich, nur soll sie gegen die Wand gezogen werden, und sich auf ihr bewegen.
    Gm-d´s Problemkind :thumbsup:
  • Werden beide Scripte zur gleichen Zeit ausgeführt? Das was für die horizontale Bewegung zuständig ist und das was während dem Wandklettern ausgeführt wird? Weil sie gegeneinander arbeiten und hsp und vsp jeweils gegenseitig überschreiben.
  • TrunX schrieb:

    Werden beide Scripte zur gleichen Zeit ausgeführt? Das was für die horizontale Bewegung zuständig ist und das was während dem Wandklettern ausgeführt wird? Weil sie gegeneinander arbeiten und hsp und vsp jeweils gegenseitig überschreiben.


    Ich habe das überprüft, und mir ist aufgefallen, dass ich beim wechseln des states (ich benutze states, um festzuhalten, welche skripts das obj ausführen soll) "state =" anstatt "switch_state =" benutzt habe. Ich habe das geändert. Der Spielercharakter hängt jetzt zwar nicht mehr in der Luft fest, sonst passiert aber auch nicht viel.
    Gm-d´s Problemkind :thumbsup:
  • Dann solltest du prüfen ob der state wirklich gewechselt wird und welchen move (und movespeed) währenddessen haben. Ist er groß genug um die gravitation zu überwinden? Vermutlich bewirkt rechts das du wände runter läufst und links wände hoch, wenn du den selben code wie beim horizontal laufen nutzt, evntl spielt das auch noch eine Rolle.