Animation rechts aber nicht links???

  • GM 8
  • Animation rechts aber nicht links???

    Hallo

    Ich habe wieder mal ein Problem

    Ich habe ein Jump and run gemacht ungefähr wie super mario bros

    die rechts rennen animation funzt im spiel aber die links rennen animation nicht



    Code Step Event

    Quellcode

    1. if place_free(x,y+1) {gravity=0.5;jump = 1} else {gravity=0;jump = 0} gravity_direction = 270
    2. if vspeed > 10 {vspeed = 10}
    3. if keyboard_check_pressed(vk_up) && !place_free(x,y+1){vspeed-=7.8;jump = 1}
    4. if keyboard_check(vk_left) && place_free(x-4,y) {x-=4;right = 0;walk = 1} else {walk = 0}
    5. if keyboard_check(vk_right) && place_free(x+4,y) {x+=4;right = 1;walk = 1} else {walk = 0}
    6. if right = 1 and walk = 0 and jump = 0 {sprite_index = spr_player_right}
    7. if right = 0 and walk = 0 and jump = 0 {sprite_index = spr_player_links}
    8. if right = 1 and walk = 1 and jump = 0 {sprite_index = spr_player_run_right; image_speed = 0.3}
    9. if right = 0 and walk = 1 and jump = 0 {sprite_index = spr_player_run_links; image_speed = 0.3}
    10. if right = 1 and jump = 1 {sprite_index = spr_player_jump_right}
    11. if right = 0 and jump = 1 {sprite_index = spr_player_jump_links}
    Alles anzeigen
  • Und wenn du es über das drag & drop system absicherst, wenn die entsprechende tast gedrückt wird. so hab ich es zumindest vorgestern gemacht

    aber vom code her sehe ich keinen fehler.

    Nachtrag.

    Bei sowas must du auf fehler suche gehen. Hast du schon malversucht den Sprite wechsel sofort bei der tasten abfrage , rein zu machen.
    zb so


    if keyboard_check(vk_right) && place_free(x+4,y) then sprite_index = spr_player_right
    und das gleiche mit links.
    Nur mal um zu sehen ob es im algemeinem funktioneirt?
    Meine Signatur hat kein Visum für das GM Forum erhalten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von x-sascha ()

  • Ganz klar

    GML-Quellcode

    1. if place_free(x,y+1) {gravity=0.5;jump = 1} else {gravity=0;jump = 0} gravity_direction = 270
    2. if vspeed > 10 {vspeed = 10}
    3. if keyboard_check_pressed(vk_up) && !place_free(x,y+1){vspeed-=7.8;jump = 1}
    4. if keyboard_check(vk_left) && place_free(x-4,y) {x-=4;right = 0;walk = 1} else {walk = 0}
    5. if keyboard_check(vk_right) && place_free(x+4,y) {x+=4;right = 1;walk = 1} else {walk = 0}
    6. if right = 1 and walk = 0 and jump = 0 {sprite_index = spr_player_right}
    7. if right = 0 and walk = 0 and jump = 0 {sprite_index = spr_player_links}
    8. if right = 1 and walk = 1 and jump = 0 {sprite_index = spr_player_run_right; image_speed = 0.3}
    9. if right = 0 and walk = 1 and jump = 0 {sprite_index = spr_player_run_links; image_speed = 0.3}
    10. if right = 1 and jump = 1 {sprite_index = spr_player_jump_right}
    11. if right = 0 and jump = 1 {sprite_index = spr_player_jump_links}
    Alles anzeigen


    Nach einem ; in der gleichen Zeile wird nichts mehr ausgeführt dein code müsste so aussehen.

    GML-Quellcode

    1. if place_free(x,y+1)
    2. {
    3. gravity=0.5;jump = 1
    4. }
    5. else
    6. {
    7. gravity=0;
    8. jump = 0
    9. }
    10. gravity_direction = 270
    11. if vspeed > 10 {vspeed = 10}
    12. if keyboard_check_pressed(vk_up) && !place_free(x,y+1)
    13. {
    14. vspeed-=7.8;
    15. jump = 1
    16. }
    17. if keyboard_check(vk_left) && place_free(x-4,y)
    18. {
    19. x-=4;
    20. right = 0;
    21. walk = 1
    22. }
    23. else
    24. {
    25. walk = 0
    26. }
    27. if keyboard_check(vk_right) && place_free(x+4,y)
    28. {
    29. x+=4;
    30. right = 1;
    31. walk = 1
    32. }
    33. else
    34. {
    35. walk = 0
    36. }
    37. if right = 1 and walk = 0 and jump = 0 {sprite_index = spr_player_right}
    38. if right = 0 and walk = 0 and jump = 0 {sprite_index = spr_player_links}
    39. if right = 1 and walk = 1 and jump = 0 {sprite_index = spr_player_run_right image_speed = 0.3}
    40. if right = 0 and walk = 1 and jump = 0 {sprite_index = spr_player_run_links image_speed = 0.3}
    41. if right = 1 and jump = 1 {sprite_index = spr_player_jump_right}
    42. if right = 0 and jump = 1 {sprite_index = spr_player_jump_links}
    Alles anzeigen
    :saint:
  • Tice schrieb:

    Nach einem ; in der gleichen Zeile wird nichts mehr ausgeführt
    Nein. Wie kommst du darauf? Eins der wenigen Zwecke die das Semikolon in der GLM haben (abgesehen von optischen Gründen) ist doch, dass man mehrere Anweisungen in eine Zeile packen kann.
  • Das stimmt auch nicht so ganz.

    Dass hier:

    GML-Quellcode

    1. a = 10 c = 100 f = ""

    funktioniert auch ohne Semikolon.

    Das Semikolon ist wie in anderen Sprachen ein Terminator. In Gml ist er aber ziemlich überflüssig.
    Bei sowas:

    GML-Quellcode

    1. if a = 10;
    2. show_message(0);

    würde es bezwecken dass die if-Abfrage beim Semikolon sofort abgebrochen wird und somit die zweite Zeile immer ausgeführt wird.

    Dies Funktioniert aber nicht da der Runner einen Error gibt wenn die Abfrage true ist.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • GML-Quellcode

    1. if place_free(x,y+1) {gravity=0.5;jump = 1} else {gravity=0;jump = 0} gravity_direction = 270
    2. if vspeed > 10 {vspeed = 10}
    3. if keyboard_check_pressed(vk_up) && !place_free(x,y+1){vspeed-=7.8;jump = 1}
    4. if keyboard_check(vk_left) && place_free(x-4,y) {x-=4;right = 0;walk = 1} else {walk = 0}
    5. else if keyboard_check(vk_right) && place_free(x+4,y) {x+=4;right = 1;walk = 1} else {walk = 0}
    6. if right = 1 and walk = 0 and jump = 0 {sprite_index = spr_player_right}
    7. if right = 0 and walk = 0 and jump = 0 {sprite_index = spr_player_links}
    8. if right = 1 and walk = 1 and jump = 0 {sprite_index = spr_player_run_right; image_speed = 0.3}
    9. if right = 0 and walk = 1 and jump = 0 {sprite_index = spr_player_run_links; image_speed = 0.3}
    10. if right = 1 and jump = 1 {sprite_index = spr_player_jump_right}
    11. if right = 0 and jump = 1 {sprite_index = spr_player_jump_links}
    Alles anzeigen

    Der Fehler liegt hier:

    GML-Quellcode

    1. if keyboard_check(vk_left) && place_free(x-4,y) {x-=4;right = 0;walk = 1} else {walk = 0}
    2. if keyboard_check(vk_right) && place_free(x+4,y) {x+=4;right = 1;walk = 1} else {walk = 0}

    Da wenn man Rechts nicht drückt wird walk auf 0 gesetzt, und somit wird das Sprite nicht geändert (wenn man Links schon gedrückt hat). Das würde mit einen else gehen (siehe Code oben), dann kann man nicht Links und Rechts gleichzeitig drücken.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • ich hab ein bischen herumprobiert und hab herausgefunden dass die if keyboard_check codes das problem sind



    immer der keyboard code der unter dem anderen ist wird animiert



    Quellcode

    1. if place_free(x,y+1) {gravity=0.5;jump = 1} else {gravity=0;jump = 0} gravity_direction = 270
    2. if vspeed > 10 {vspeed = 10}
    3. if keyboard_check_pressed(vk_up) && !place_free(x,y+1){vspeed-=10;jump = 1};
    4. if keyboard_check(vk_right) && place_free(x+4,y) {x+=4;right = 1; left = 0; walk = 1} else {walk = 0} // keine rechts animation //
    5. if keyboard_check(vk_left) && place_free(x-4,y) {x-=4;right = 0; left = 1; walk = 1} else {walk = 0} // animation links //
    6. if right = 1 and left = 0 and walk = 1 and jump = 0 {sprite_index = spr_player_run_right}
    7. if right = 0 and left = 1 and walk = 1 and jump = 0 {sprite_index = spr_player_run_left}
    8. if right = 1 and left = 0 and walk = 0 and jump = 0 {sprite_index = spr_player_right}
    9. if right = 0 and left = 1 and walk = 0 and jump = 0 {sprite_index = spr_player_left}
    10. if right = 1 and left = 0 and jump = 1 {sprite_index = spr_player_jump_right}
    11. if right = 0 and left = 1 and jump = 1 {sprite_index = spr_player_jump_left}
    Alles anzeigen


    und umgekehrt

    Quellcode

    1. if place_free(x,y+1) {gravity=0.5;jump = 1} else {gravity=0;jump = 0} gravity_direction = 270
    2. if vspeed > 10 {vspeed = 10}
    3. if keyboard_check_pressed(vk_up) && !place_free(x,y+1){vspeed-=10;jump = 1};
    4. if keyboard_check(vk_left) && place_free(x-4,y) {x-=4;right = 0; left = 1; walk = 1} else {walk = 0} // keine links animation //
    5. if keyboard_check(vk_right) && place_free(x+4,y) {x+=4;right = 1; left = 0; walk = 1} else {walk = 0} // rechts animation //
    6. if right = 1 and left = 0 and walk = 1 and jump = 0 {sprite_index = spr_player_run_right}
    7. if right = 0 and left = 1 and walk = 1 and jump = 0 {sprite_index = spr_player_run_left}
    8. if right = 1 and left = 0 and walk = 0 and jump = 0 {sprite_index = spr_player_right}
    9. if right = 0 and left = 1 and walk = 0 and jump = 0 {sprite_index = spr_player_left}
    10. if right = 1 and left = 0 and jump = 1 {sprite_index = spr_player_jump_right}
    11. if right = 0 and left = 1 and jump = 1 {sprite_index = spr_player_jump_left}
    Alles anzeigen




    kann ich das irgendwie beheben?
  • Da wenn man Rechts nicht drückt wird walk auf 0 gesetzt, und somit wird das Sprite nicht geändert (wenn man Links schon gedrückt hat). Das würde mit einen else gehen (siehe Code oben), dann kann man nicht Links und Rechts gleichzeitig drücken.



    das mit den else funktioniert nicht

    wenn ich es dort hin schreibe steht da

    unexpected symbol in expression

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

  • Benutzer online 1

    1 Besucher