Nach Sprung falsche Grafik

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

  • Nach Sprung falsche Grafik

    Hallo,
    schweres Problem aber bestimmt hatte es jemand von euch schon mal.
    Also:
    Bei meinem neuen J'n'R Spiel, kann man springen :D (cool wa?)
    Nur das Problem ist sobald ich die Sprung taste los lasse ändert sich wieder das Bild in "stehen", auch wenn ich in der Luft bin.

    Also habe ich nen code gemacht, der checkt ob der Player in der Luft ist und so lange soll er die Grafik anzeigen:

    GML-Quellcode

    1. if place_free(x,y+1) then
    2. {
    3. sprite_index=spr_player_sprung;
    4. }


    so wenn ich jetzt

    GML-Quellcode

    1. else
    2. {
    3. sprite_index=spr_player_stand;
    4. }

    schreiben würde. Würde er das Stand Bild die ganze Zeit anzeigen, da ich ja unter mir keinen Platz habe. So wird dann z.B auch nicht die Geh Animation angezeigt.

    So also habe ich es erstmal ohne dem else da stehen. Nur wenn er jetzt aufkommt bleibt er ja noch immer in der gleichen Animation (sprung). Wenn ich dann gehe kommt die Geh Animation.

    Jetzt das Problem:
    Nur ich will das wenn ich auf komme direkt in das "Stand" Bild komme. Wie kann ich das umsetzten?

    MfG Marvin
  • Jo danke funktioniert. Bin ich gar nicht drauf gekommen :D
    Aber leider (war auch vorher so ist mir vor 5 Minuten auf gefallen) das passiert nicht immer und zwar:
    Wenn ich springe und danach gehe kommt manchmal zwischen durch die Geh Animation. Manchmal aber nach dem Sprung läuft alles perfekt.

    Hier ist mal das Skript:

    GML-Quellcode

    1. //argument0 = x
    2. //argument1 = vspeed
    3. //argument2 = gravity
    4. //argument3 = Sprite Gehen
    5. //argument4 = Sprite Springen
    6. //Das Gehen:
    7. if global.player_cantmove=false then
    8. {
    9. if keyboard_check(vk_left) then
    10. {
    11. if place_free(x-argument0,y) then
    12. {
    13. x-=argument0;
    14. sprite_index=spr_player_laufen;
    15. image_speed=0.5;
    16. image_xscale=-1;
    17. background_hspeed[0]=+0.5;
    18. }
    19. };
    20. if keyboard_check(vk_right) then
    21. {
    22. if place_free(x+argument0,y) then
    23. {
    24. x+=argument0;
    25. sprite_index=spr_player_laufen;
    26. image_speed=0.5;
    27. image_xscale=+1;
    28. background_hspeed[0]=-0.5;
    29. }
    30. };
    31. if keyboard_check(vk_up) then
    32. {
    33. if not place_free(x,y+1) then
    34. {
    35. vspeed-=argument1;
    36. sprite_index=spr_player_wurf;
    37. vspeed_check_jump=true;
    38. image_speed=0.5;
    39. }
    40. }
    41. };
    42. //Die Release damit man wieder zum alten bild kommt:
    43. if global.player_cantmove=false then
    44. {
    45. if keyboard_check_released(vk_left) then
    46. {
    47. sprite_index=spr_player_stand;
    48. background_hspeed[0]=0;
    49. };
    50. if keyboard_check_released(vk_right) then
    51. {
    52. sprite_index=spr_player_stand;
    53. background_hspeed[0]=0;
    54. };
    55. }
    56. //Funktionen//////////////////
    57. //Gravitiy
    58. gravity=argument2;
    59. gravity_direction=270;
    60. if not place_free(x,y+1) then
    61. {
    62. gravity=0;
    63. }
    64. else
    65. {
    66. gravity=argument2;
    67. };
    68. //Wenn in Luft dann auch nur Springen zeigen:
    69. if place_free(x,y+1) then
    70. {
    71. sprite_index=spr_player_wurf;
    72. }
    73. else
    74. {
    75. if keyboard_check(vk_right) or keyboard_check(vk_left) then
    76. {
    77. sprite_index=spr_player_laufen;
    78. }
    79. else
    80. {
    81. sprite_index=spr_player_stand;
    82. }
    83. }
    84. //Damit man nicht höher als vorgegeben Springen kann:
    85. if vspeed<-argument1
    86. {
    87. vspeed=argument1;
    88. };
    89. //Damit der Sprung auch abgebrochen werden kann
    90. if vspeed_check=true then
    91. {
    92. if keyboard_check_released(vk_up)
    93. {
    94. vspeed_check=false;
    95. vspeed=vspeed/2;
    96. }
    97. };
    Alles anzeigen
  • Also ersma ein kleiner Tipp:
    Statt global.player_cantmove=false kann man !global.player_cantmove,
    bzw. statt vspeed_check=true kann man auch vspeed_check schreiben ;)

    Gut, also dann zum eigentlichen Thema:
    a) Gib uns die gm6, dann können wir uns besser was darunter vorstellen und lösen.
    b) Wie wärs mit einer Liste um zu checken wann was ist? Also mach eine Liste und schreib jeden Step hinein, was du ausführst und was du für ein Sprite hast. Das ganze schreibts du in eine datei und kannst es dir angucken.
  • Danke für die Tipps wusste ich nicht. Aber man lernt immer dazu.

    Also hier ist die .gm6 datei und den Fehler kommt sobald man Springen (nach oben) und z.B. Rechts gehen (nach rechts) gedrückt hält und vor dem Boden noch Springen los lässt aber Rechts oder Links gedrückt hält und danach weiter geht.

    Hier ist die Datei:
  • Wie der Name schon sagt aktiviert es die präzise Kollisionsberechnung.
    Sprich: Die Maske des Sprites verursacht die Kollision, und nicht die Boundingbox (diese spielt dabei dann keine Rolle mehr).

    Deaktiviert wird die beim Sprite eingestellte rechteckige Boundingbox für die Kollisionsberechnungen verwendet.

    (Alles nachzulesen in der Hilfe.)
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Benutzer online 7

    7 Besucher