Abfragen in welche Richtung ich schaue/mich bewege

  • Abfragen in welche Richtung ich schaue/mich bewege

    Der Threadtitel sagt's eigentlich schon aus. Ich habe eine Sprunganimation für die Bewegung/das Schauen nach links und für die Bewegung/das Schauen nach rechts. Nur wie frage ich ab, welcher Sprite (also z.B. spr_run_left) gerade "benutzt" wird?
  • Ganz einfach tue dies in dein Step Event...

    GML-Quellcode

    1. //Springen Links
    2. if keyboard_check(vk_left) && keyboard_check(vk_up)
    3. {
    4. sprite_index = Springen_l
    5. }
    6. //Springen Rechst
    7. if keyboard_check(vk_right) && keyboard_check(vk_up)
    8. {
    9. sprite_index = Springen_r
    10. }
    Wir stehen zusammen und wir fallen zusammen
  • Der Code funktioniert soweit, bis auf dass wenn ich nach links schaue, immernoch nach rechts springe, bzw. die Sprunganimation, die für den Sprung nach rechts ist.

    EDIT:

    Habe das ganze mit

    GML-Quellcode

    1. if sprite_index=spr_left or sprite_index=spr_run_left
    2. {
    3. sprite_index=spr_jump_left
    4. }
    5. if sprite_index=spr_right or sprite_index=spr_run_right
    6. {
    7. sprite_index=spr_jump_right
    8. }


    gelöst!

    Trotzdem danke :).





    Jetzt gibt es allerdings ein anderes Problem. Die Sprunganimation sollte natürlich so lange bleiben, wie man in der Luft ist, und nicht nach drücken nach rechts im Sprung abbrechen. Außerdem sollte man in die Ausgangsposition zurückkehren, wenn man wieder auf dem Boden landet. Jemand noch 'ne Idee dafür? :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Luchs08 ()

  • also wenn ich das jetzt richtig verstanden habe, dann willst du , dass sich der sprite nicht in den laufenden verwandelt, wenn du in der luft nach rechts drückst...

    dazu musst du einfach an der stelle an der du den sprite in den laufenden sprite änderst eine abfrage machen, ob er am boden ist
    ... also mit if there is a collition at a position und nur dann den sprite ändern

    hoffe das hilft dir =)

    gruß
    kopako
    Dieses Kind wird ein neues Reich gründen. Es wird Frieden stiften, das Recht aufrichten ...

    Von diesem kleinen Kind geht Frieden aus und Freude und Liebe.
  • Meinst du Sprung Sprites'?
    Das ganze löse ich immer so:

    Create

    GML-Quellcode

    1. right = 1;
    2. jump = 0;


    Step

    GML-Quellcode

    1. if keyboard_check(vk_right) { right = 1; }
    2. if keyboard_check(vk_left) { right = 0; }
    3. if place_free(x,y+1) { jump = 1; } else { jump = 0; }
    4. if right = 1 and jump = 0 { sprite_index = spr_right; }
    5. if right = 1 and jump = 1 { sprite_index = spr_jump_right; }
    6. if right = 0 and jump = 0 { sprite_index = spr_left; }
    7. if right = 0 and jump = 1 { sprite_index = spr_jump_left; }


    Bei mir klappt das perfekt! :)
  • ja so kann man es acuh machen, aber das is ja auch nur fürs nach rechts gehen...

    naja und wenn man auch noch links einbaut wird es doch ziemlich komplex im vergleich zu ner simplen abfrage vor dem ändern des sprites^^
    Dieses Kind wird ein neues Reich gründen. Es wird Frieden stiften, das Recht aufrichten ...

    Von diesem kleinen Kind geht Frieden aus und Freude und Liebe.
  • Nach einigem hin und her bin ich auf das:

    GML-Quellcode

    1. if sprite_index=spr_jump_left and vspeed=0 and collision_point(x, y+16, obj_megaman, false, false)
    2. {
    3. if! place_free(x,y+16)
    4. {
    5. sprite_index=spr_megaman_left
    6. }
    7. }
    8. if sprite_index=spr_jump_right and vspeed=0 and collision_point(x, y+16, obj_megaman, false, false)
    9. {
    10. if! place_free(x,y+16)
    11. {
    12. sprite_index=spr_megaman_right
    13. }
    14. }
    15. if sprite_index=spr_jump_left and vspeed>0 and collision_point(x, y+16, obj_megaman, false, false)
    16. {
    17. if! place_free(x,y+16)
    18. {
    19. sprite_index=spr_run_left
    20. }
    21. }
    22. if sprite_index=spr_jump_right and vspeed>0 and collision_point(x, y+16, obj_megaman, false, false)
    23. {
    24. if! place_free(x,y+16)
    25. {
    26. sprite_index=spr_run_right
    27. }
    28. }
    Alles anzeigen


    gekommen, was allerdings immer noch nicht funktioniert :/. Nach dem Sprung sollte man halt - je nachdem wie schnell man ist - entweder in der rechts rennen/rechts stehen oder links rennen/links stehen animation sein. Allerdings bleibt man beim Aufkommen noch in der Sprunganimation. Weiß wer was ich da falsch mache?
  • Kopako schrieb:

    ja so kann man es acuh machen, aber das is ja auch nur fürs nach rechts gehen...

    naja und wenn man auch noch links einbaut wird es doch ziemlich komplex im vergleich zu ner simplen abfrage vor dem ändern des sprites^^


    Nein, ist es nicht. Das ist für beides. Denn ich kann genausogut schreiben:

    Create

    GML-Quellcode

    1. left = 0;
    2. right = 1;
    3. jump = 0;


    Step

    GML-Quellcode

    1. if keyboard_check(vk_right) { right = 1; left = 0; }
    2. if keyboard_check(vk_left) { right = 0; left = 1; }
    3. if place_free(x,y+1) { jump = 1; } else { jump = 0; }
    4. if right = 1 and jump = 0 { sprite_index = spr_right; }
    5. if right = 1 and jump = 1 { sprite_index = spr_jump_right; }
    6. if left = 1 and jump = 0 { sprite_index = spr_left; }
    7. if left = 1 and jump = 1 { sprite_index = spr_jump_left; }


    Oder auch:

    Create

    GML-Quellcode

    1. richtung = 0;
    2. jump = 0;


    Step

    GML-Quellcode

    1. if keyboard_check(vk_right) { richtung = 1; }
    2. if keyboard_check(vk_left) { richtung = 0; }
    3. if place_free(x,y+1) { jump = 1; } else { jump = 0; }
    4. if richtung = 1 and jump = 0 { sprite_index = spr_right; }
    5. if richtung = 1 and jump = 1 { sprite_index = spr_jump_right; }
    6. if richtung = 0 and jump = 0 { sprite_index = spr_left; }
    7. if richtung = 0 and jump = 1 { sprite_index = spr_jump_left; }


    Ist alles das selbe. ;)

    EDIT:

    Luchs08 schrieb:

    Nach einigem hin und her bin ich auf das:

    GML-Quellcode

    1. if sprite_index=spr_jump_left and vspeed=0 and collision_point(x, y+16, obj_megaman, false, false)
    2. {
    3. if! place_free(x,y+16)
    4. {
    5. sprite_index=spr_megaman_left
    6. }
    7. }
    8. if sprite_index=spr_jump_right and vspeed=0 and collision_point(x, y+16, obj_megaman, false, false)
    9. {
    10. if! place_free(x,y+16)
    11. {
    12. sprite_index=spr_megaman_right
    13. }
    14. }
    15. if sprite_index=spr_jump_left and vspeed>0 and collision_point(x, y+16, obj_megaman, false, false)
    16. {
    17. if! place_free(x,y+16)
    18. {
    19. sprite_index=spr_run_left
    20. }
    21. }
    22. if sprite_index=spr_jump_right and vspeed>0 and collision_point(x, y+16, obj_megaman, false, false)
    23. {
    24. if! place_free(x,y+16)
    25. {
    26. sprite_index=spr_run_right
    27. }
    28. }
    Alles anzeigen


    gekommen, was allerdings immer noch nicht funktioniert :/. Nach dem Sprung sollte man halt - je nachdem wie schnell man ist - entweder in der rechts rennen/rechts stehen oder links rennen/links stehen animation sein. Allerdings bleibt man beim Aufkommen noch in der Sprunganimation. Weiß wer was ich da falsch mache?


    Probiers mal mit meinem Code! :)
  • ja ich sagte ja , man müsste es eben entsprechend ergänzen ;) schon klar, dass das richtig war... aber meiner meinung nach zu kompliziert.. egal .. hauptsache es geht jetzt
    Dieses Kind wird ein neues Reich gründen. Es wird Frieden stiften, das Recht aufrichten ...

    Von diesem kleinen Kind geht Frieden aus und Freude und Liebe.
  • Benutzer online 1

    1 Besucher