Sprunganimation

  • Android

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

  • Sprunganimation

    Hallo liebe Community,

    Ich möchte, dass mein Spieler beim Springen immer bei einer bestimmten Y-Koordinate stehen bleibt (ohne Objekt).
    Bei der Y-Koordiante 576 funktioniert das auch sehr gut, doch mein Spieler soll eine Linie höher springen...
    Aber dass klappt nicht. Ich habe keine ahnung warum.

    Mein Code sieht so aus:

    Step Event:

    GML-Quellcode

    1. if keyboard_check(vk_up) and jump=false{
    2. vspeed=-25;
    3. gravity=1;
    4. jump=true;
    5. alarm[0]=5;
    6. }
    7. if obj_player.y=576 and jump=false{
    8. vspeed=0;
    9. gravity=0;
    10. }
    11. if obj_player.y=320 and jump=false{
    12. vspeed=0;
    13. gravity=0;
    14. }
    Alles anzeigen


    Alarm 0:

    GML-Quellcode

    1. jump=false;

    danke im Voraus

    mfg Taidi
  • Hmm, also ich hab da eine vermutung ^^

    möglicherweise ist das Problem folgendes

    Der Spieler braucht zu lange um bis auf 320 zu springen und ein normaler Mensch hält wärend dem springen die Sprungtaste gedrückt, allerdings wird die variable jump
    nach 5 Steps wieder auf True gesetzt!

    Dadurch kann es vorkommen das das Timing nicht stimmt,....
    Weil zu der Zeit wo der Player sich auf der y-Achse auf 320 befindet gerade die variable jump = true ist, obwohl sie false sein muss damit er stehen bleibt

    du könntest das mal testen indem du die Abfrage keyboard_check(vk_up) auf keyboard_check_released(vk_up) änderst und dann schau mal obs klappt

    GML-Quellcode

    1. if keyboard_check_released(vk_up) and jump=false{
    2. vspeed=-25;
    3. gravity=1;
    4. jump=true;
    5. alarm[0]=5;
    6. }
    7. if obj_player.y=576 and jump=false{
    8. vspeed=0;
    9. gravity=0;
    10. }
    11. if obj_player.y=320 and jump=false{
    12. vspeed=0;
    13. gravity=0;
    14. }
    Alles anzeigen

    Dadurch wird diese Dauerschleife unterbrochen

    Grüßle Blayde
  • Das Problem ist, dass obj_player.y nie genau 320 wird. Um auch die "ungefähren" Treffer abzufangen kannst du eine Kombination aus Division und round() benutzen. Allerdings musst du dann noch beachten, dass y nicht genau 320 ist - damit der Spieler dann exakt bei 320 landet, musst du es explizit setzen.

    GML-Quellcode

    1. //round(576 / 2) = 288
    2. if((round(obj_player.y / 2) == 288) && (jump == false)){
    3. obj_player.y = 576;
    4. vspeed = 0;
    5. gravity = 0;
    6. }
    7. //round(320 / 2) = 160
    8. if((round(obj_player.y / 2) == 160) && (jump == false)){
    9. obj_player.y = 320;
    10. vspeed = 0;
    11. gravity = 0;
    12. }
    Alles anzeigen
  • Benutzer online 1

    1 Besucher