sprite frage

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

  • sprite frage

    hallo

    ich habe eine frage und zwar habe ich mehrer sprites für das springen.
    eines das für das hochspringen ist und eines für das runterspringen bzw. (fallen)


    jedoch weiß ich nicht wie ich es machen kann das es funktioniert.
    kann mir jemand helfen.

    ich weiß man sollte es mit einer variable machen wie ispressed=up ...aber hab schon soviel probiert und nichts hinbekommen bite um hilfe.
    mein code für das springen ist:


    Dieser funktioniert einwandfrei...jedoch habe ich noch keine für das fallen sprite bzw. (runterspringen)

    GML-Quellcode

    1. if place_free(x,y+10) //Abfrage wenn wir springen dann sollen die sprites verwendet werden und wenn wir am boden sind diese sprites....
    2. { //In der Luft
    3. if lastpressed == "right"
    4. sprite_index =spr_jumpup_right // Nach Rechts Schauen
    5. else
    6. sprite_index = spr_jumpup_left // Nach Links Schauen
    7. }
    8. else
    9. { //Am Boden
    10. if lastpressed == "right"
    11. sprite_index = spr_player_run_right // Nach Rechts Schauen
    12. else
    13. sprite_index = spr_player_run_left // Nach Links Schauen
    14. }
    15. if keyboard_check_pressed(vk_up) or keyboard_check_pressed(ord("W")) ///springen
    16. {
    17. if place_free(x,y+10)== false
    18. vspeed-=20;
    19. }
    20. if keyboard_check_released(vk_up) or keyboard_check_released(ord("W")) //sprunghöhe ändern
    21. {
    22. if (vspeed < 0)
    23. vspeed /=2;
    24. }
    Alles anzeigen

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

  • Ich denke mal das Problem liegt an den Klammern die nicht-/gesetzt sind.

    GML-Quellcode

    1. if place_meeting(x,y+1,obj_Boden) //Ist präziser als place_free(x,y+10)
    2. { //In der Luft
    3. if lastpressed == "right"
    4. {
    5. sprite_index =spr_jumpup_right // Nach Rechts Schauen
    6. }
    7. else
    8. {
    9. sprite_index = spr_jumpup_left // Nach Links Schauen
    10. }
    11. }
    12. else
    13. { //Am Boden
    14. if lastpressed == "right"
    15. {
    16. sprite_index = spr_player_run_right // Nach Rechts Schauen
    17. }
    18. else
    19. {
    20. sprite_index = spr_player_run_left // Nach Links Schauen
    21. }
    22. }
    Alles anzeigen
  • danke für die antwort
    aber anscheinend hast du nicht die frage verstanden.

    der code passt ja und funktioniert ja einwandfrei.
    aber ich hab jetzt für das springen 2 sprites...eine für hochspringen und eine für das fallen nach dem springen...

    und ich weiß nicht wie und wo ich das machen kann das er das fallen sprite macht.



    ich bekomm es nur per drag & drop hin....da hab ichs ganz einfach so gemacht

    im step event
    TEST VARIABLE
    vspeed > 0
    hspeed >0
    change sprite to spr_jumpdown_right

    TEST VARIABLE

    vspeed >0
    hspeed <0
    change sprite to spr_jumpdown_left

    und das geht auch nur will ich es per code machen


    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von markus ()

  • Achso, du hast also noch eine 3. Animation wenn er fällt, dann könnte man dies so machen:

    GML-Quellcode

    1. if place_meeting(x,y+1,obj_Boden) //Ist präziser als place_free(x,y+10)
    2. { //In der Luft
    3. if vspeed > 0 // Testen ob der Spieler nach oben Fliegt
    4. {
    5. if lastpressed == "right"
    6. {
    7. sprite_index =spr_jumpup_right // Nach Rechts Schauen
    8. }
    9. else
    10. {
    11. sprite_index = spr_jumpup_left // Nach Links Schauen
    12. }
    13. }
    14. else // Andernfalls fällt er da vspeed im Minus-Bereich ist.
    15. {
    16. if lastpressed == "right"
    17. {
    18. sprite_index =spr_jumpdown_right // Nach Rechts Schauen
    19. }
    20. else
    21. {
    22. sprite_index = spr_jumpdown_left // Nach Links Schauen
    23. }
    24. }
    25. }
    26. else
    27. { //Am Boden
    28. if lastpressed == "right"
    29. {
    30. sprite_index = spr_player_run_right // Nach Rechts Schauen
    31. }
    32. else
    33. {
    34. sprite_index = spr_player_run_left // Nach Links Schauen
    35. }
    36. }
    Alles anzeigen
  • danke dir für deine tolle hilfe.
    nur kann ich das if place_meeting nicht verwenden da ich mehrere objekte habe für den boden.
    also hab ich jetzt wieder das place_free genommen ..

    aber ich musste was ändern:

    GML-Quellcode

    1. if place_free(x,y+10) //Ist präziser als place_free(x,y+10)
    2. { //Wenn er springt
    3. if vspeed > 0 // Testen ob der Spieler nach oben Fliegt
    4. {
    5. if lastpressed == "right"
    6. {
    7. sprite_index =spr_jumpdown_right // Nach Rechts Schauen
    8. }
    9. else
    10. {
    11. sprite_index = spr_jumpdown_left // Nach Links Schauen
    12. }
    13. }
    14. else // wenn er fällt
    15. {
    16. if lastpressed == "right"
    17. {
    18. sprite_index =spr_jumpup_right // Nach Rechts Schauen
    19. }
    20. else
    21. {
    22. sprite_index = spr_jumpup_left // Nach Links Schauen
    23. }
    24. }
    25. }
    26. else
    27. { //Am Boden
    28. if lastpressed == "right"
    29. {
    30. sprite_index = spr_player_run_right // Nach Rechts Schauen
    31. }
    32. else
    33. {
    34. sprite_index = spr_player_run_left // Nach Links Schauen
    35. }
    36. }
    Alles anzeigen



    so funktioniert es einwandfrei.......

    ich danke dir vielmahls freu mich wenn ich endlich soweit bin wie du....


    EINS NOCH:
    ich hab bei if keyboard_check_released(vk_right)
    sprite_index=spr_player_stand_right gemacht

    jedoch wird es nicht angezeigt.was ist da los???
  • ich seh da kein Fehler :D
    Nicht so als würdest du das nicht geschaut haben, aber hast du das spr_..._right auch anders gemacht als das vorher? Oder hast du im Code irgendwo noch nachher wieder eine Zeile, die das sprite umändert?
    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
  • hello

    also es war nicht direkt ein fehler darin....
    ich musste nur das place_free(x,y+10) verwenden
    und wahrscheinlich dadurch musste ich dann die ersten zwei sprite_index mit den nächsten zwei austauschen.
    hinzugefügt wurde garnichts.

    also am anfang war es so:

    GML-Quellcode

    1. if place_meeting(x,y+1,obj_Boden) //Ist präziser als place_free(x,y+10)
    2. { //In der Luft
    3. if vspeed > 0 // Testen ob der Spieler nach oben Fliegt
    4. {
    5. if lastpressed == "right"
    6. {
    7. sprite_index =spr_jumpup_right // Nach Rechts Schauen
    8. }
    9. else
    10. {
    11. sprite_index = spr_jumpup_left // Nach Links Schauen
    12. }
    13. }
    14. else // Andernfalls fällt er da vspeed im Minus-Bereich ist.
    15. {
    16. if lastpressed == "right"
    17. {
    18. sprite_index =spr_jumpdown_right // Nach Rechts Schauen
    19. }
    20. else
    21. {
    22. sprite_index = spr_jumpdown_left // Nach Links Schauen
    23. }
    24. }
    25. }
    Alles anzeigen


    das ging bei mir nicht da ich place_free verwenden musste.

    dann hab ich nur mehr das geändert das es ging:

    GML-Quellcode

    1. if place_free(x,y+10) //Ist präziser als place_free(x,y+10)
    2. { //Wenn er springt
    3. if vspeed > 0 // Testen ob der Spieler nach oben Fliegt
    4. {
    5. if lastpressed == "right"
    6. {
    7. sprite_index =spr_jumpdown_right // Nach Rechts Schauen
    8. }
    9. else
    10. {
    11. sprite_index = spr_jumpdown_left // Nach Links Schauen
    12. }
    13. }
    14. else // wenn er fällt
    15. {
    16. if lastpressed == "right"
    17. {
    18. sprite_index =spr_jumpup_right // Nach Rechts Schauen
    19. }
    20. else
    21. {
    22. sprite_index = spr_jumpup_left // Nach Links Schauen
    23. }
    24. }
    25. }
    Alles anzeigen




    und das problem mit dem code besteht noch:

    GML-Quellcode

    1. if keyboard_check_released(vk_right)
    2. sprite_index=spr_player_stand_right ;

  • Ich meinte ja das untere Problem :D

    Also wird evtl. der Code nicht ausgeführt, weil das jetzt in einem if Block ist (if mit geschweiten Klammern) oder durch exit usw.
    Oder kann es halt sein, dass sprite_index später noch geändert wird?
    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
  • Keine Ursache @markus, :D

    Hmmm ich sehe da auch keinen Fehler, allerdings benutzt du keyboard_check_released, welches die Animation nur in dem Step ändert, in dem die Taste losgelassen wird.
    Im nächsten Step wird allerdings die Animation direkt wieder auf "spr_player_run_right" oder "spr_player_run_left" gesetzt wegen dem obrigen Code wo es um Fallen/Springen/Laufen geht.
    Dein Code mit dem keyboard_check_released tut dann nichts mehr da es den Code in den Klammern nur ausführt wenn die Taste gerade losgelassen wurde.

    Beheben könntest du das so, in dem du keyboard_check benutzt (Das heißt, dass hier der Code in den Klammern solange ausgeführt wird, solange die Taste gedrückt ist). So sollte es funktionieren:

    GML-Quellcode

    1. else // wenn er fällt
    2. {
    3. if keyboard_check(vk_right) || keyboard_check(vk_right) //Prüft ob die rechte Taste oder die linke Taste gedrückt wird
    4. {
    5. if lastpressed == "right"
    6. {
    7. sprite_index =spr_jumpup_right // Nach Rechts Schauen
    8. }
    9. else
    10. {
    11. sprite_index = spr_jumpup_left // Nach Links Schauen
    12. }
    13. }
    14. else // Wenn keine Taste gedrückt wird = Stillstand
    15. {
    16. if lastpressed == "right"
    17. {
    18. sprite_index =spr_player_stand_right // Nach Rechts Schauen
    19. }
    20. else
    21. {
    22. sprite_index =spr_player_stand_left // Nach Links Schauen
    23. }
    24. }
    25. }
    Alles anzeigen


    Kleiner Tipp:

    GML-Quellcode

    1. //Anstatt dies hier zu benutzen
    2. if keyboard_check(vk_left) || keyboard_check(vk_right)
    3. //Kann man auch das hier benutzen
    4. if keyboard_check(vk_left) + keyboard_check(vk_right) = 1
    5. // Wenn eine Taste gedrückt wird, heißt keyboard_check(vk_left) = true.
    6. // Wenn keine Taste gedrückt wird, heißt keyboard_check(vk_left) = false.
    7. // True ist das gleiche wie 1. False ist das gleiche wie 0.
    8. // Wenn nun beide Tasten gedrückt sind sind 1 + 1 = 2. Was wiederum false ist.
    9. // Fazit, wenn man beide Tasten drückt bewegt sich der Spieler nicht, welches ansonsten ein kleiner Bug wäre.
    10. // Noch eine Möglichkeit wäre
    11. if keyboard_check(vk_left) ^^ keyboard_check(vk_right)
    12. // Das heißt entweder, Oder. Das heißt wenn einer der beiden Tasten gedrückt wird, wird der Code ausgeführt.
    13. // Wenn beide oder gar keine Tasten gedrückt werden, wird der Code Nicht ausgeführt.
    14. // ^^ ist wieder das gleiche wie xor. Geschmackssache ob man lieber Buchstaben oder Zeichen benutzt.
    Alles anzeigen


    Hoffe das hat dir ein wenig geholfen :)