Spring und Fall Sprite ändern

  • GM 8

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

  • Spring und Fall Sprite ändern

    Heyhey,

    ich hab hier folgendes Problem, anderweitig nichts im forum gefunden und bitte euch deshalb um hilfe..

    Folgendes ist das Problem bei meinem Platform Spiel.. Der Spieler geht links und rechts, animiert.. Wenn er springt wechselt er in ein anderes Sprit, passend
    zum Sprung. Nun möchte ich noch nicht nur das eine Sprungsprite wenn er hoch hüpft, sondern auch ein anderes Sprite wenn er dann wiederrum
    fällt. Das sieht bei mir folgendermaßen aus:

    Quellcode

    1. if place_free (x,y+7) == false
    2. { // am boden
    3. if gehsprunganimation == "right"
    4. sprite_index = purple_gehen
    5. else
    6. sprite_index = purple_gehen_links
    7. }
    8. else
    9. { // in der luft
    10. if gehsprunganimation == "right"
    11. sprite_index = purple_springen_hoch_rechts
    12. else
    13. sprite_index = purple_springen_hoch_links
    14. }
    Alles anzeigen


    Was muss ich noch beifügen damit ich noch den fall Sprite habe?

    Danke im vorraus! =)


    Grüße, Ferrius
    zu viele dicke kinder und zu wenig dicke beats...
    zu viele dicke autos und titten auf mtv...
    zu viele leute glauben dicke styles kauft man wie weed...
    stiel hat man oder nicht und manche lernens nie

    Mono & Nikitaman - Digge digge
  • warscheinlich benutzt du doch dann vspeed oder?

    GML-Quellcode

    1. if vspeed>0
    2. {
    3. sprite_index=sprite_nach_oben
    4. }
    5. else if vspeed !=0
    6. {
    7. sprite_index=sprite_nach_unten
    8. }
    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
  • Funktioniert nicht... Komischer weise wechselt er dann an der Spitze des Sprungs ganz kurz auf denb Sprite für den Sprung nach oben...

    Ich hab jetzt schon vieles probiert, war aber alles vergebens... Ich hoff jemand hat die lösung ;)
    Hier mal der ganze code vom Player:
    Create Code:

    Spoiler anzeigen

    GML-Quellcode

    1. image_speed = 0
    2. gehsprunganimation = "right"


    Step Event Code:

    Spoiler anzeigen

    GML-Quellcode

    1. hspeed = 0
    2. if keyboard_check (ord("D")) // steuerung rechts links
    3. {
    4. hspeed += 6
    5. gehsprunganimation = "right"
    6. }
    7. if keyboard_check (ord("A"))
    8. {
    9. hspeed -= 6
    10. gehsprunganimation = "left"
    11. }
    12. if place_free (x,y+7) == true
    13. {if vspeed != 0
    14. sprite_index = purple_springen_runter_rechts}
    15. if place_free (x,y+7) == false
    16. { // am boden
    17. if gehsprunganimation == "right"
    18. sprite_index = purple_gehen
    19. else
    20. sprite_index = purple_gehen_links
    21. }
    22. else
    23. { // in der luft
    24. if gehsprunganimation == "right"
    25. sprite_index = purple_springen_hoch_rechts
    26. else
    27. sprite_index = purple_springen_hoch_links
    28. }
    29. image_index = x/10
    30. if place_free (x+hspeed,y) == false // kollisions erkennung rechts links
    31. {
    32. if hspeed > 0
    33. move_contact_solid (0,-1)
    34. if hspeed < 0
    35. move_contact_solid (180,-1)
    36. hspeed = 0
    37. }
    38. vspeed += 0.5 // gravitation
    39. if keyboard_check_pressed (ord("W")) // springen
    40. if place_free (x,y+5) == false
    41. vspeed -= 9
    42. if place_free (x,y+vspeed) == false // kollisions erkennung oben unten
    43. {
    44. if vspeed > 0
    45. move_contact_solid (270,-1)
    46. if vspeed < 0
    47. move_contact_solid (90,-1)
    48. vspeed = 0
    49. }
    50. if keyboard_check (vk_space) // schwertschlag !!
    51. if place_free (x+hspeed,y+vspeed) == false // nicht an ecken hängen
    52. hspeed = 0
    53. if keyboard_check_released (ord("W"))
    54. if vspeed < 0
    55. vspeed /= 3
    56. view_xview = ((x-view_wview/3) +view_xview*9)/10 // bildschirmausschnitt richtig anzeigen
    57. view_yview = ((y-view_hview/1.6) +view_yview*9)/10
    58. if view_xview < 0 // kamera und ränder
    59. view_xview = 0
    60. if view_yview < 0
    61. view_yview = 0
    62. if view_xview > room_width-view_wview
    63. view_xview = room_width-view_wview
    64. if view_yview > room_height-view_hview
    65. view_yview = room_height-view_hview
    Alles anzeigen
    zu viele dicke kinder und zu wenig dicke beats...
    zu viele dicke autos und titten auf mtv...
    zu viele leute glauben dicke styles kauft man wie weed...
    stiel hat man oder nicht und manche lernens nie

    Mono & Nikitaman - Digge digge
  • Hi

    Ich löse sowas immer mit einer Variabel.
    Z.B
    im Create des Player

    GML-Quellcode

    1. // Gravitation
    2. gravity = 0.5;
    3. gravity_direction = 270;
    4. // Animationsgeschwindigkeit
    5. image_speed = 0.5;
    6. // Alle Variabeln auf null setzen.
    7. vspeed = 0;
    8. hspeed = 0;
    9. fallen = false; // Variabel für runterfallen. Ab eine gewisse Höhe stürzt du ab
    10. x_dir = false; // Variabel für die Richtung rechts und links - false = links - true = rechts
    Alles anzeigen


    im Step

    GML-Quellcode

    1. ///////////////////////////////////
    2. // --- <= Bewegungroutine => --- //
    3. ///////////////////////////////////
    4. //////////////////////////////////////////////////////////////////////
    5. // Überpürfe ob global.player_steht auf true steht, wenn ja spring //
    6. // aus der Routine heraus, damit der Player sich nicht bewegen kann //
    7. //////////////////////////////////////////////////////////////////////
    8. if (global.player_steht == true) exit;
    9. ////////////////////////////////////////////////////////////////
    10. // Hier wird Überprüft ob du die Rechte Cursor-Taste drückst //
    11. ////////////////////////////////////////////////////////////////
    12. if (keyboard_check(vk_right)) && !(keyboard_check(vk_left))
    13. && !(fallen == true)
    14. {
    15. hspeed = 0;
    16. image_xscale = 1;
    17. if (place_meeting(x+4,y,obj_blocks))
    18. {
    19. move_contact_solid(0,4);
    20. }
    21. else
    22. {
    23. x += 4;
    24. x_dir = true; // rechts
    25. }
    26. }
    27. ////////////////////////////////////////////////////////////////
    28. // Hier wird Überprüft ob du die Linke Cursor-Taste drückst //
    29. ////////////////////////////////////////////////////////////////
    30. if (keyboard_check(vk_left)) && !(keyboard_check(vk_right))
    31. && !(fallen == true)
    32. {
    33. hspeed = 0;
    34. image_xscale = -1;
    35. if (place_meeting(x-4,y,obj_blocks))
    36. {
    37. move_contact_solid(180,4);
    38. }
    39. else
    40. {
    41. x -= 4;
    42. x_dir = false; // links
    43. }
    44. }
    45. /////////////////////////////////////////////////////////////
    46. // Hier wird Überprüft ob du die Hoch Cursor-Taste drückst //
    47. // Ist für das Springen der Figur //
    48. /////////////////////////////////////////////////////////////
    49. if (keyboard_check_pressed(vk_up)) && (place_meeting(x,y+1,obj_blocks))
    50. && !(fallen == true)
    51. {
    52. vspeed = -11;
    53. }
    54. // - \/ Sprung-Höhe \/ -
    55. // Wenn der Spieler die Sprung-Taste losläst,
    56. // wird unser Charakter langsamer.
    57. if !(keyboard_check(vk_up)) && (vspeed < 0)
    58. {
    59. vspeed *= 0.9;
    60. }
    Alles anzeigen


    immer noch in Step

    GML-Quellcode

    1. // --- || Sprites || ---
    2. if (place_meeting(x,y+1,obj_blocks))
    3. {
    4. if (keyboard_check(vk_left) && (fallen == false)) ^^ (keyboard_check(vk_right) && (fallen == false))
    5. {
    6. sprite_index = spr_player_walk;
    7. }
    8. else
    9. {
    10. sprite_index = spr_player_stand;
    11. }
    12. }
    13. else
    14. {
    15. sprite_index = spr_player_jump;
    16. image_index = 0; // lst nur das erste Bild vom spr_player_jump erscheinen
    17. }
    18. // --- >>| Speed Limit |<< ---
    19. if (vspeed>12) // Man verliert ein Leben
    20. {
    21. fallen = true;
    22. }
    Alles anzeigen


    immer noch im Step

    GML-Quellcode

    1. ////////////////////////////////////////
    2. // Hier wird Überprüft ob der Spieler //
    3. // schon zu tief gefallen ist //
    4. ////////////////////////////////////////
    5. {
    6. if (fallen == true) // Variabel fallen testen
    7. {
    8. if (place_meeting(x,y+1,obj_blocks))
    9. {
    10. fallen = false; // Variabel fallen wieder auf false setzen
    11. sleep(1000); // Eine Sekunde das Spiel anhalten
    12. lives -=1; // Ein Leben abziehen
    13. room_restart(); // Level frisch starten, falls Leben noch nicht auf Null steht
    14. }
    15. sprite_index = spr_player_jump; // Sprite für das fallen des Players
    16. image_index = 1; // lässt nur das 2 Bild vom spr_player_jump erscheinen
    17. motion_set(270,vspeed); // Bewege das Sprite nach unten mit der Geschwindigkeit von vspeed
    18. }
    19. }
    Alles anzeigen


    Das sind drei Routine die ich im Step stehen habe. Ich versuche immer einzelne Routine zu schreiben, statt alles in einer einzelne Routine.
    Diese Routine habe ich aus mein Spiel The Thief heraus geholt, das ich hier im Forum zum downlaod steht.
    The Thief - Tuturial

    So ich hoffe es hilft dir bei deinen Problem

    Gruss Drachen