movement fehler (sprite wird nicht geändert)

  • GM 8

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

  • movement fehler (sprite wird nicht geändert)

    Hi,
    ich habe ein Problem an dem ich verzweifle:
    Die Bewegung meines obj_player wird über die pfeil-tasten (Richtung) und die Leertaste (rennen) gesteuert.
    die Programmierung stützt sich auf die 4 folgenden Scrips:

    Das bewegungs script:

    Quellcode

    1. if( wait == false )
    2. {
    3. if(isMoving == false)
    4. {
    5. if(keyboard_check(vk_right) && place_free(x+4,y)){
    6. isMoving = true
    7. moveTimer = gridSize
    8. speedX = moveSpeed
    9. speedY = 0
    10. sprite_index=char_right
    11. }
    12. else
    13. if(keyboard_check(vk_left) && place_free(x-4,y)){
    14. isMoving = true
    15. moveTimer = gridSize
    16. speedX = -moveSpeed
    17. speedY = 0
    18. sprite_index=char_left
    19. }
    20. else
    21. if(keyboard_check(vk_up) && place_free(x,y-4)){
    22. isMoving = true
    23. moveTimer = gridSize
    24. speedX = 0
    25. speedY = -moveSpeed
    26. sprite_index=char_up
    27. }
    28. else
    29. if(keyboard_check(vk_down) && place_free(x,y+4)){
    30. isMoving = true
    31. moveTimer = gridSize
    32. speedX = 0
    33. speedY = moveSpeed
    34. sprite_index=char_down
    35. }
    36. }
    37. }
    38. if (isMoving == true)
    39. {
    40. x += speedX
    41. y += speedY
    42. moveTimer -= moveSpeed
    43. if (moveTimer == 0) isMoving = false;
    44. }
    Alles anzeigen


    das dir_script

    Quellcode

    1. if( wait == false )
    2. {
    3. if(isMoving == false)
    4. {
    5. if(keyboard_check(vk_right)){
    6. char_dir = "right"
    7. }
    8. else
    9. if(keyboard_check(vk_left)){
    10. char_dir = "left"
    11. }
    12. else
    13. if(keyboard_check(vk_up)){
    14. char_dir = "up"
    15. }
    16. else
    17. if(keyboard_check(vk_down)){
    18. char_dir = "down"
    19. }
    20. }
    21. }
    Alles anzeigen


    das stand_script

    Quellcode

    1. if (keyboard_check(vk_right or vk_left or vk_up or vk_down))
    2. {}
    3. else
    4. {
    5. if(isMoving = false && char_dir == "right" ) {
    6. sprite_index = char_no_move_right }
    7. if(isMoving = false && char_dir == "left" ) {
    8. sprite_index = char_no_move_left }
    9. if(isMoving = false && char_dir == "up" ) {
    10. sprite_index = char_no_move_up }
    11. if(isMoving = false && char_dir == "down" ) {
    12. sprite_index = char_no_move_down }
    13. }
    Alles anzeigen


    und das Speed_script

    Quellcode

    1. if( wait == false )
    2. {
    3. if(isMoving == false)
    4. {
    5. if(keyboard_check(vk_space)){
    6. moveSpeed = 8 }
    7. else {
    8. moveSpeed = 4 }
    9. }}


    (Kurtze Erklärung zu den variablen:
    wait: hält fast alle Prozesse im spiel an und wird genutzt um Story Elemente einufügen
    char_dir: enthält die Blickrichtung des Players und wird zur Ausführung von Aktionen die "vor" dem spieler stadtfinden genutzt (z.B. das öffnen einer tür)
    )

    mein Problem ist das der Player nach dem rennen wenn die Leertaste noch gedrückt ist aber keine richtungstaste gedrückt ist nicht in die stehen Animation wechselt
    ich verstehe nicht warum

    edit: ich hab das Problem noch mal untersucht und entdeckt dass auch jede andere taste die ich während dem bewegen drücke und danach gedrückt halte den sprite wechsel verhindert
    der sprite wird erst geändert wenn ich keine taste mehr drücke

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

  • GML-Quellcode

    1. if (keyboard_check(vk_right or vk_left or vk_up or vk_down))
    2. {}
    3. else
    4. {
    5. if(isMoving = false && char_dir == "right" ) {
    6. sprite_index = char_no_move_right }
    7. if(isMoving = false && char_dir == "left" ) {
    8. sprite_index = char_no_move_left }
    9. if(isMoving = false && char_dir == "up" ) {
    10. sprite_index = char_no_move_up }
    11. if(isMoving = false && char_dir == "down" ) {
    12. sprite_index = char_no_move_down }
    13. }
    Alles anzeigen


    also ich habe noch nie gehört das man in einer funktion mit or schreibt, wenn doch berichtigt mich
    ausserdem würde ich nicht ein leeres {} schreiben mache einfach nach dem if ein not oder ein !

    und

    GML-Quellcode

    1. if( wait == false )
    2. {
    3. if(isMoving == false)
    4. {
    5. if(keyboard_check(vk_space)){
    6. moveSpeed = 8 }
    7. else {
    8. moveSpeed = 4 }
    9. }}

    da ist doch die abfrage

    GML-Quellcode

    1. if(isMoving == false)

    überflüssig, weil wenn du in eine richtung drückst soll es sich ja bewegen

    edit: entferne mal bei dem bewegungscode das else
    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

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

  • das script mit dem Keyboard_check( vk_space) steuert auch nur die move Geschwindigkeit.
    die frage nach wait sorgt dafür das wenn ein Story Element läuft kein Geschwindigkeits Wechsel läuft
    die frage isMoving sorgt dafür das die Geschwindigkeit nur gewechselt wird wenn der Player im grid steht denn die Bewegung an das grid angekettet

    die beide fragen also nach unterschiedlichen Aktionen


    und wie soll ich das ohne or hinbekommen?
    das script sagt das keine der Pfeiltasten für gedrückt werden darf

    wie sag ich dem Computer das ohne or?
  • Code verbessert:

    GML-Quellcode

    1. if !(keyboard_check(vk_right)
    2. or keyboard_check(vk_left))
    3. or keyboard_check(vk_up))
    4. or keyboard_check(vk_down))
    5. {
    6. if(isMoving = false && char_dir == "right" ) {
    7. sprite_index = char_no_move_right }
    8. if(isMoving = false && char_dir == "left" ) {
    9. sprite_index = char_no_move_left }
    10. if(isMoving = false && char_dir == "up" ) {
    11. sprite_index = char_no_move_up }
    12. if(isMoving = false && char_dir == "down" ) {
    13. sprite_index = char_no_move_down }
    14. }
    Alles anzeigen


    edit: worauf ich eben hingewiesen habe
    edit: entferne mal bei dem bewegungscode das else
    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
  • Benutzer online 1

    1 Besucher