Brauche Hilfe bei Jump Animationen

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

  • Brauche Hilfe bei Jump Animationen

    Hallo,

    ich arbeite noch mit Studio 1 bin noch ein Anfänger im Coding so please dont shoot me. Ich mache ein simples Jump and Run Spiel mit Sonic, und habe ich mich in meiner eigenen Logik vercodet. Die Jump Animationen sollten dauerhaft sein, der Igel rollt sich ein während er in der Luft ist, so wie bei allen Sonic Spielen übrig ist. Bei mir wird jedoch nur die Jump Animation einmal abgespielt und bei Dash (Wenn Sonic superschnell läuft) wird sie garnicht erst abgespielt. Kann da jemand mal bitte drüber schauen und mir helfen? :)

    Hier meine GMX Datei: easyupload.io/ybuaug

    Hier die Codes

    Create

    GML-Quellcode

    1. sprite_index = spr_sonic_idle;image_speed = 0.2;speed_walk = 7;speed_sprint = 6;shift = false;endurance = 99;


    Step

    GML-Quellcode

    1. /// Spieler Bewegung
    2. // Variablen
    3. right = keyboard_check(ord("D"));
    4. left = keyboard_check(ord("A"));
    5. jump = keyboard_check(ord("W"));
    6. special = keyboard_check(vk_space);
    7. var move_speed = speed_walk;
    8. // Bewegung links oder rechts
    9. if (left and not right and place_free(x - 4, y)) {
    10. x -= move_speed;
    11. sprite_index = spr_sonic_run
    12. image_speed = 0.25;
    13. image_xscale = -1;
    14. }
    15. if (not left and right and place_free(x + 4, y)) {
    16. x += move_speed;
    17. sprite_index = spr_sonic_run
    18. image_speed = 0.25;
    19. image_xscale = 1;
    20. }
    21. if (not left and not right and special = false) {
    22. sprite_index = spr_sonic_idle
    23. image_speed = 0.2;
    24. }
    25. if (left and not right and keyboard_check(vk_shift) and place_free(x - 4, y)) {
    26. if endurance > 0{
    27. endurance -= 1.5;
    28. move_speed = speed_sprint;
    29. x -= move_speed;
    30. sprite_index = spr_sonic_dash
    31. image_speed = 5;
    32. }
    33. } else {
    34. if shift = false {
    35. if endurance < 100 {
    36. endurance += 0.5;
    37. }
    38. }
    39. }
    40. if (not left and right and keyboard_check(vk_shift) and place_free(x + 4, y)) {
    41. if endurance > 0{
    42. endurance -= 1.5;
    43. move_speed = speed_sprint;
    44. x += move_speed;
    45. sprite_index = spr_sonic_dash
    46. image_speed = 5;
    47. }
    48. } else {
    49. if shift = false {
    50. if endurance < 100 {
    51. endurance += 0.3;
    52. }
    53. }
    54. }
    55. // Gravitation
    56. if (place_free(x, y +1)) {
    57. if (shift = false) gravity = .7;
    58. if (shift = true) {
    59. gravity = .7
    60. }
    61. if (vspeed >= 0) {
    62. if (move_speed = speed_walk)
    63. if (left and not right) { sprite_index = spr_sonic_jump; {
    64. image_xscale = -1;
    65. image_speed = 1;
    66. }
    67. }
    68. }
    69. if (vspeed <= 0) {
    70. if (move_speed = speed_walk) sprite_index = spr_sonic_jump; {
    71. image_speed = 1;
    72. }
    73. }
    74. // maximale Fallgeschwindigkeit
    75. if (vspeed >= 10) {
    76. vspeed = 10;
    77. }
    78. } else {
    79. gravity = 0;
    80. // Springen
    81. if (jump) {
    82. if shift = false
    83. {
    84. vspeed = -10
    85. }
    86. if shift = true
    87. {
    88. if endurance > 0{
    89. endurance -= 1.5;
    90. vspeed = -13
    91. }
    92. }
    93. }
    94. }
    Alles anzeigen
  • Der Code ist natürlich schon ziemlich haarsträubend aber deine Sünden seien dir vergeben.

    Du setzt gravity = 0.7 im Sprung. Das könntest du auch im create setzen, ist jedoch nicht das eigentliche Problem.

    Du testest die Kollisionen mit y + 1, gehen wir mal davon aus das der Spieler bei y 0 startet, wird nun nach dem Sprung jeden step 0.7 aufs Y gepackt.
    Also keine Grade Zahl mehr. wenn der Spieler also runterkommt kommt er nicht mehr bei y 0 an sondern eine Kommazahl. Wenn also der Abstand > 0 aber < 1 ist wird nicht ausgelöst. Generell ist das kein gutes Kollisionssystem, jedoch solltest du auch bei links/rechts anstatt place_free(x - 4, y) besser place_free(x - move_speed, y) benutzen.

    Auch solltest du Kommazahlen bei image_speed vermeiden, da es da auch zu Rundungsfehlern kommen kann. Lieber die Animation anpassen oder image_speed auf 0 und manuell image_index hochzählen. Setze auch image_index auf 0 zurück wenn du die Animation änderst.

    Zeile 77 wenn vspeed größer 0 dann wird sprite_index auf jump gesetzt. Das heißt wenn das zutrifft überschreibst du ja die vorherigen Änderungen. Und der Spieler versucht ja jeden step 0.7 zu fallen. Hast du irgendwo ein Collision event wo du x = xprevious; y = yprevious; setzt? Dann kann der Spieler in der jump Animation stecken bleiben.

    Kann morgen noch mal drüber gucken aber am besten versuchst du das nochmal neu zu schreiben mit einer vernünftigen if / else struktur. Du musst dir nur über die hierachie bewusst sein.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel: