Objekt_Spieler - lauf Animation geht nicht 100 prozentig

  • Allgemein

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

  • Objekt_Spieler - lauf Animation geht nicht 100 prozentig

    Hallo,

    vorweg erstmal ich bin absoluter Anfänger. :D

    Mein Problem, wie beschreibe ich das am besten, ah am einfachsten ist es ihr schaut euch eben das folgende Video an,
    da könnt ihr sehen das alle Laufrichtungen Animiert werden. Nur nicht die für hoch und runter.

    [video]http://youtu.be/CsJmRUmSE2o[/video]

    Hier noch der Code dazu

    Spoiler anzeigen

    GML-Quellcode

    1. // Variablen
    2. // ---------
    3. // Solange keine Taste gedrückt wird, bleibt das Objekt stehen.
    4. // hspeed steht für Horizemtale (X Achse) laufgeschwindigkeit.
    5. // vspeed steht für Vertikale (Y Achse) laufgeschwindigkeit.
    6. //
    7. hspeed = 0
    8. vspeed = 0
    9. // Tastaturbefehle
    10. // ---------------
    11. // Wenn die Taste ESC gedückt wird, wird das Spiel beendet
    12. //
    13. if keyboard_check (vk_escape) == true
    14. {
    15. game_end()
    16. }
    17. // Tastatursteuerrung Spieler
    18. // -------------------------
    19. // Wenn lshift und eine der Bewegungstasten
    20. // gedrückt wird und die Ausdauer größer als 0 ist,
    21. // nur dann bewegt sich das Object(Spieler) mit einer
    22. // Geschwindigkeit von 4.
    23. // Ansosten ist die Laufgeschwindigkeit 2.
    24. //
    25. if keyboard_check(vk_lshift) and p_laufen = true and p_ausdauer > 0
    26. {
    27. p_rennen = 4
    28. p_ausdauer -= 0.8
    29. }
    30. else
    31. {
    32. p_rennen = 2
    33. p_ausdauer += 0.8
    34. }
    35. if p_ausdauer > 100 // Ist die Ausdauer größer als 100,
    36. {
    37. p_ausdauer = 100 // dann setze die Ausdauer wieder auf 100
    38. }
    39. if p_ausdauer < 0 // Ist ausdauer kleiner als 0;
    40. {
    41. p_ausdauer = 0 // dann setze die Ausdauer wieder auf 0
    42. }
    43. // Spieler läuft los sobald die entsprechende
    44. // Taste gedrückt wird.
    45. //
    46. if keyboard_check(ord("A")) == true
    47. {
    48. sprite_index = spr_pl_left
    49. hspeed -= p_rennen
    50. p_laufen = true
    51. }
    52. if keyboard_check(ord("D")) == true
    53. {
    54. sprite_index = spr_pl_right
    55. hspeed += p_rennen
    56. p_laufen = true
    57. }
    58. if keyboard_check(ord("W")) == true
    59. {
    60. sprite_index = spr_pl_back
    61. vspeed -= p_rennen
    62. p_laufen = true
    63. }
    64. if keyboard_check(ord("S")) == true
    65. {
    66. sprite_index = spr_pl_front
    67. vspeed += p_rennen
    68. p_laufen = true
    69. }
    70. image_index = x/15 // gibt die geschindigkeit der Lauf - Aniamtion an
    71. // Kollisionsabfragen
    72. // ------------------
    73. // Spieler darf nicht durch Objekte gehen.
    74. // Die auf Solid gesetzt sind.
    75. //
    76. if (place_free(x+hspeed,y)) == false
    77. {
    78. hspeed = 0
    79. }
    80. if (place_free(x,y+vspeed)) == false
    81. {
    82. vspeed = 0
    83. }
    Alles anzeigen



    Was mich daran verwirrt ist das die Animation ja da ist und auch geht, aber leider nur wenn man schräg rauf oder runter Läuft.

    Wäre toll wenn mir einer das mal erklären könnte, wieso das Objekt nicht Animiert ist wenn es nach oben oder unten geht.
    Was habe ich falsch gemacht oder wo steckt der Fehler?

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

  • GML-Quellcode

    1. image_index = x/15 // gibt die geschindigkeit der Lauf - Aniamtion an


    image_index gibt den Index des Subsprites an, also es sorgt dafür das ein Sprite animiert wird. Aber das ganze wird nun mit der x Koordinate gemacht, heißt wenn man zwar nach links (x-) und rechts(x+) geht, ändert sich der image_index -> das Sprite ist animiert. Bei Oben und Unten ändert sich aber die x Koordinate nicht, sondern nur die y Koordinate -> image_index ändert sich nicht -> Sprite nicht animiert. Wenn du schräg gehst, ändert sich sowohl x als auch y.

    Du musst also einen anderen Weg finden das das Sprite animiert wird. Am einfachsten gehst das in dem du image_speed nutzt, damit steuerst du um wie viel image_index pro Frame erhöht wird (bei image_speed = 1, z.B. ein Subimage pro Frame).


    Wenn du still stehst:

    GML-Quellcode

    1. image_speed = 0; // Animation anhalten
    2. image_index = 0; // erstes Subimage setzen


    Wenn du gehst:

    GML-Quellcode

    1. image_speed = abs(speed) / 15;


    Ich weiß nicht wie gut das aussieht, probiere einfach mal mit image_speed rum.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%

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

  • Super danke, damit hast du mir echt geholfen.

    geht jetzt auch alles.

    Musste aber das f nach der 15 im folgendem Code weg lassen.

    GML-Quellcode

    1. image_speed = abs(speed) / 15f;


    da ich sonst immer folgenden Fehler bekam.

    In Object obj_spieler, in Event StepNormalEvent action number 1 at line 96 : malformed if statement
    Compile Failed - Please check the Compile window for any additional information


    Was Naturlich einfach nur Glück war, das ich einfach mal das f gelöscht habe. :D

    LG Radnak