Jump-Sprite wird zum Stand-Sprite

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

  • Jump-Sprite wird zum Stand-Sprite

    Mal eine kleine kurze Frage:

    ich springe mit:

    Quellcode

    1. if yprevious != y
    2. {
    3. sprite_index = sprite_jump;
    4. image_index = y>yprevious;
    5. }


    Der Fehler liegt, ich sagen mal wenn ich die Spitze des Sprungs erreicht hab geht er zurück in den Stand-Sprite bevor er wieder fällt und durch das Fallen in den Spring-Sprite wieder geht.

    Wie kann ich das so verändern das er nicht in den Stand-Sprite geht?

    Danke im Voraus :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von TestDeveloper ()

  • du könntest abfragen ob er in der luft ist und der vspeed - ist dann soll er beim sprung sprite sein wenn er in der luft ist und vspeed + ist und er kurz vorm boden ist dann zum stand sprite wechseln...

    am besten erstellst du eine variable die auf true gesetzt wird sobald du springst (if !place_free(x,y+1) (variable = true)) und dann if variable == true sprite_index = spr_jump, vspeed -=18;
    und wenn dann während die variable true ist und der vspeed + ist und du kurz vorm boden bist kannst du ne andere abfrage machen in dem du if (position_meeting(x,y+vspeed,obj_solid)) variable = false;


    und am besten erstellst du ein state für deine animationssteuerung....das ist am besten finde ich ...aber du kannst es machen wie du willst.


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von acidrain833 ()

  • also ich habs zb so das ich state gemacht habe ...
    .also im create event schreibst du state = "idle";

    dann im step event vom player zb:

    GML-Quellcode

    1. if keyboard_check_pressed(vk_up)
    2. {
    3. if !place_free(x,y+10) // wenn du am boden stehst
    4. {
    5. vspeed=-18;// springe hoch
    6. }
    7. }
    8. if place_free(x,y+10) // hier wenn du in der luft bist dann
    9. {
    10. state = "jump"; // wechsle zum state springen
    11. vspeed += 0.8; // für die Gravity...kannst du aber auch wo anders schreiben muss nicht hier sein
    12. }
    13. //und jetzt machst du ein switch in dem du die animationsteuerung kontrollierst
    14. switch (state)
    15. {
    16. case "idle"; // state für idle
    17. sprite_index = spr_player_idle;
    18. image_speed = 0.3;
    19. break;
    20. case "jump"; // state für jump
    21. sprite_index = spr_player_jump;
    22. image_speed = 0.3;
    23. break;
    24. // und so weiter....das ist am besten da hast du sehr gute kontrolle über die sprites und animationen}
    Alles anzeigen
  • Am besten ist es, wenn du prüfst ob unter dir Boden ist. Wenn nicht, dann springst du offensichtlich. Ansonsten gäbe es auch ein Problem bei einer Leiter oder einer Schräge, da du dann die y Koordinate veränderst und ein Sprungsprite bekommst.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Dazu habe ich eine Frage, kann man den Sprite nicht einfach im place_free laden?

    So:

    Quellcode

    1. if keyboard_check_pressed(vk_up)
    2. {
    3. if !place_free(x,y+10)
    4. {
    5. vspeed=-18;
    6. }
    7. }
    8. if place_free(x,y+10)
    9. {
    10. sprite_index = spr_player_jump;
    11. image_speed = 0.3;
    12. }
    Alles anzeigen



    Und bei mir mit dem:

    Quellcode

    1. if yprevious != y
    2. {
    3. sprite_index = sprite_jump;
    4. image_index = y>yprevious;
    5. }


    da kann man nichts machen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von TestDeveloper ()

  • natürlich könntest du das sprite index gleich dort machen...aber es ist halt viel besser weil wenn du mehr animationen hast wird es unübersichtlich und schlechter zu kontrollieren wenn du es so machst

    tut mir leid ich hab leider noch nicht mit yprevios gearbeitet

    aber wenn du diesen code benutzt

    GML-Quellcode

    1. ​if yprevious != y
    2. {
    3. sprite_index = sprite_jump;
    4. image_index = y>yprevious;
    5. }


    ist es klar das er das sprite wieder wechselt sobald er beim springen oben ist....weil ja einen moment lang yprevious gleich y ist....

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von acidrain833 ()

  • ja klar kannst du das in dem du wie ich schon beschrieben habe eine abfrage machst wenn er am boden ist und wenn er in der luft ist....

    das ist dieser code:

    GML-Quellcode

    1. ​if keyboard_check_pressed(vk_up)
    2. {
    3. if !place_free(x,y+10) // wenn du am boden stehst
    4. {
    5. vspeed=-18;// springe hoch
    6. }
    7. }
    8. if place_free(x,y+10) // hier wenn du in der luft bist dann
    9. {
    10. state = "jump"; // wechsle zum state springen aber du willst ja lieber kein state machine machen also nur sprite_index = spr_player_jump
    11. vspeed += 0.8; // für die Gravity...kannst du aber auch wo anders schreiben muss nicht hier sein
    12. }
    13. else if !place_free(x,y+10)// wenn er am boden steht
    14. {
    15. state = "idle"; // in deinem fall sprite_index = spr_player_idle;
    16. }
    Alles anzeigen