Spieleranimation beim stehen (per Gml)

  • GM 8

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

  • Spieleranimation beim stehen (per Gml)

    Joa hi ich bin erst seit kurzem hier sprich entdeckt und nu bin ich derzeit dabei meinem "Helden" neue Sprites zu verleihen welche Animationen beinhalten. Die alten waren einfach nur grob zur übersicht hoch links rechts usw.

    Nun bin ich jedoch auf ein problem gestossen das mit anfänglich zu schaffen macht ziemlich ich hab die vermutung das es am Step Event liegt das sich die animation immer wieder neu startet und es deswegen nicht weitergeht sprich so aussieht das es ned läuft.

    Jetzt hab ich hier mal rumgesucht aba ned wirklich was brauchbares gefunden. Auch einige Youtube Tutorials ect und andere gmk die da gestellt waren haben mir nich wirklich weitergeholfen da dort alles mit D&D gemacht wurde Da ich das aber nicht unbedingt mischen will was Animationen und bewegung angeht da ich das bisher per Gml gelöst habe dank eines Freundes :) is das nun mein problem

    Mein derzeitiges Gml ding sieht so aus und steht im Step event ich hoffe das is alles korrekt für verbesserungen bin ich immer offen

    GML-Quellcode

    1. //Bewegung ohne Schwert
    2. if benutze_Schwert1=0 {
    3. if keyboard_check(vk_down){
    4. sprite_index= Held_2_runter
    5. image_speed=1
    6. vspeed= 4}
    7. if keyboard_check(vk_up){
    8. sprite_index= Held_2_hoch
    9. image_speed=1
    10. vspeed= -4}
    11. if keyboard_check(vk_left){
    12. sprite_index= Held_2_links
    13. image_speed=1
    14. hspeed= -4}
    15. if keyboard_check(vk_right){
    16. sprite_index= Held_2_recht
    17. image_speed=1
    18. hspeed= 4}
    19. }
    20. //Bewegung mit Schwert 1
    21. if benutze_Schwert1=0 {
    22. if keyboard_check(vk_down){
    23. sprite_index= Held_2_runter_S1
    24. image_speed=1
    25. vspeed= 4}
    26. if keyboard_check(vk_up){
    27. sprite_index= Held_2_hoch_S1
    28. image_speed=1
    29. vspeed= -4}
    30. if keyboard_check(vk_left){
    31. sprite_index= Held_2_links_S1
    32. image_speed=1
    33. hspeed= -4}
    34. if keyboard_check(vk_right){
    35. sprite_index= Held_2_recht_S1
    36. image_speed=1
    37. hspeed= 4}
    38. //Stehend Animation (nicht laufen)
    39. if keyboard_check_released(vk_down){
    40. sprite_index= Held1_stehen_runter
    41. image_speed=1
    42. vspeed=0}
    43. if keyboard_check_released(vk_up){
    44. sprite_index= Held_2_hoch_stehen
    45. image_speed=1
    46. vspeed=0}
    47. if keyboard_check_released(vk_left){
    48. sprite_index= Held_2_links_steht
    49. image_speed=1
    50. hspeed=0}
    51. if keyboard_check_released(vk_right){
    52. sprite_index= Held_2_rechts_steht
    53. image_speed=1
    54. hspeed=0}
    55. //Stop bei hoch+runter bzw links+rechts
    56. if keyboard_check_released(vk_down) and keyboard_check_released(vk_up){
    57. image_speed=0
    58. vspeed=0}
    59. if keyboard_check_released(vk_left) and keyboard_check_released(vk_right){
    60. image_speed=0
    61. vspeed=0}
    62. }
    63. //Stop gegen Solid
    64. if !place_free(x+hspeed,y)
    65. {
    66. if hspeed<0
    67. {
    68. move_contact_solid(180,hspeed)
    69. hspeed=0
    70. }
    71. if hspeed>0
    72. {
    73. move_contact_solid(0,hspeed)
    74. hspeed=0
    75. }
    76. }
    77. if !place_free(x,y+vspeed)
    78. {
    79. if vspeed<0
    80. {
    81. move_contact_solid(90,vspeed)
    82. vspeed=0
    83. }
    84. if vspeed>0
    85. {
    86. move_contact_solid(270,vspeed)
    87. vspeed=0
    88. }
    89. }
    Alles anzeigen


    So ahm mir gehts hierbei besonders um folgenden ausschnitt:

    GML-Quellcode

    1. //Stehend Animation (nicht laufen)
    2. if keyboard_check_released(vk_down){
    3. sprite_index= Held1_stehen_runter
    4. image_speed=1
    5. vspeed=0}


    Ich hab nun also vor alle alten sprites vom Held 2 zu Held 1 zu wechseln welche die ganzen subimages hat in dem fall 120 stück pro richtung ich hab wie oben beschrieben die vermutung das ich evtl diese abschnitte nicht im Step event haben sollte wegen neustart da ich ja immer keine taste drücke wenn ich stehe nur bin ich unsicher wie genau ich das dann machn soll bzw wo hin ?

    Danke schonma für die hilfe
  • Nun ich dachte eigentlich auch es müsste so gehn aber es geht ned bei meinem sprite wird nur das erste bild angezeigt aber es läuft nicht weiter zu den andern 119 durch so das die animation entsteht. Ich weis einfach nicht warum und hab halt vermutet das es daran liegt das es im step event steht und darum das immer wieder überprüft wird ob key losgelassn wurde und dann wieder von vorn anfängt bei den subimages -> keine bewegung im spiel sichtbar

    Kann sein das ich mich da auch komplett irre hab damit halt noch nich viel erfahrung

    Hab auch bis auf dieses eine hier im Step Event auch keine anderen sachn mit Bewegungstasten bei meim parent_player

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

  • also ... ersteinmal kannst du vieeeeel code sparen XD....

    GML-Quellcode

    1. move = false;
    2. // hoch runter bewegung
    3. if(keyboard_check(vk_up)){
    4. direction = 90;
    5. if(place_free(x,y-4)){
    6. y -=4;
    7. move = true;
    8. }
    9. }else{
    10. if(keyboard_check(vk_down)){
    11. direction = 270;
    12. if(place_free(x,y+4)){
    13. y +=4;
    14. move = true;
    15. }
    16. }
    17. }
    18. // links rechts bewegung
    19. if(keyboard_check(vk_right)){
    20. direction = 0;
    21. if(place_free(x+4,y)){
    22. x +=4;
    23. move = true;
    24. }
    25. }else{
    26. if(keyboard_check(vk_left)){
    27. direction = 180;
    28. if(place_free(x-4,y)){
    29. x -=4;
    30. move = true;
    31. }
    32. }
    33. }
    34. // image speed bei bewegung
    35. if(move == true){
    36. image_speed = 1;
    37. }else{
    38. image_speed = 0;
    39. move_contact_solid(direction,4);
    40. }
    41. // sprite ändern
    42. if(benutzen_Schwert == 1 && move == true){
    43. switch(direction){
    44. case 0: spr = Held_2_rechts;break;
    45. case 90: spr = Held_2_hoch;break;
    46. case 180: spr = Held_2_links;break;
    47. case 270: spr = Held_2_runter;break;
    48. }
    49. }else{
    50. if(move == true){
    51. switch(direction){
    52. case 0: spr = Held_2_rechts_S1;break;
    53. case 90: spr = Held_2_hoch_S1;break;
    54. case 180: spr = Held_2_links_S1;break;
    55. case 270: spr = Held_2_runter_S1;break;
    56. }
    57. }else{
    58. switch(direction){
    59. case 0: spr = Held_2_rechts_stehen;break;
    60. case 90: spr = Held_2_hoch_stehen;break;
    61. case 180: spr = Held_2_links_stehen;break;
    62. case 270: spr = Held_2_runter_stehen;break;
    63. }
    64. }
    65. }
    Alles anzeigen



    und 2 denk ich mal müste damit auch der fehler behoben sein ... (habs nicht getestet)
    ---- wer fehler findet darf sie behalten ---
  • oh ... sry ... must natürlich ein check pressed event machen ...
    also aus dem

    GML-Quellcode

    1. keyboard_check

    ein

    GML-Quellcode

    1. keyboard_check_pressed


    und da


    GML-Quellcode

    1. if(move == true){
    2. image_speed = 1;
    3. }else{
    4. image_speed = 0;
    5. move_contact_solid(direction,4);
    6. }


    das

    GML-Quellcode

    1. move_contact_solid(direction,4);


    weg ... war auf die schnell ... sry

    ---edit---
    ... und wenn ich mir das gerade nochmal so anschaue kannst du das

    GML-Quellcode

    1. if(move == true){
    2. image_speed = 1;
    3. }else{
    4. image_speed = 0;
    5. move_contact_solid(direction,4);
    6. }


    komplett weg machen ... und den image speed immer auf 1 stellen ...
    ---- wer fehler findet darf sie behalten ---
  • A: okay soweit sogut ich blick da bald nemme durch aba mit dem check pressed geht er nun nur 1 schrit praktisch in die jeweilige richtung ^^
    weil pressed is ja nur dann wenns gedrückt wird glaub da gabs noch nen anderes bei maus gibs pressed released und button
    keyboard is bei D&D nichts dergleichen drann ka wie das dann im GML gemacht wird ^^

    B: was auch noch ned geht is die anzeige der richtung sprich ich hab bisher immernoch das anfangssprite für alle richtungen *grübel*

    was genau bedeutet dieses case ?

    GML-Quellcode

    1. if(move == true){
    2. switch(direction){
    3. case 0: spr = Held_2_recht;break;
    4. case 90: spr = Held_2_hoch;break;
    5. case 180: spr = Held_2_links;break;
    6. case 270: spr = Held1_stehen_runter;break;
    7. }
    8. }else{
    9. switch(direction){
    10. case 0: spr = Held_2_rechts_steht;break;
    11. case 90: spr = Held_2_hoch_stehen;break;
    12. case 180: spr = Held_2_links_steht;break;
    13. case 270: spr = Held1_stehen_runter;break;
    Alles anzeigen


    muss ja damit was zu tun haben ahm geht da nich irgendwie in richtung if direction 90: spr = Held_2.... usw ? xD

    EDIT:

    Hab grad gemerkt das das mit dem

    GML-Quellcode

    1. if(keyboard_check(vk_left)){
    2. direction = 180;
    3. if(place_free(x-4,y)){
    4. x -=4;
    5. move = true;


    funktioniert allerdings nur da ich test jetzt die andern nomma durch ._.
  • ja mit pressed hast du recht sry ... is spät ^^ ...

    und ja würde auch mit if gehen aber switch anweisungen sind schnelle ...

    case ist dei auswahlt ... also wenn direction = 90 trift das auf case 90: zu ...
    und ein break am ende bricht den switch an der stelle ab und macht mit dem rest des codes weiter ...

    --- edit ---
    und mir fällt grad auf ... ich habe zwar die variable spr erstellt aber das sprite_index nicht geändert ...

    also am ende des scriptes noch

    GML-Quellcode

    1. sprite_index = spr;
    ---- wer fehler findet darf sie behalten ---
  • so ahm ich habs nun soweit diese charbewegungen gehn - Bleiben noch 2 fragen

    1. Kann man die erhöhte geschwindigkeit wenn man nu zb hoch+ recht drückt irgendwie verringern das es genausoschnell is wie wenn man nur hoch bzw rechts alleine drückt - kurz 4

    2. Sprites ändern sich derzeit noch nicht wenn ich in ne andere richtung drück
  • k das mit den richtungen un Sprites gelöst

    ahm doch is schneller rechnerisch da ne diagonale länger is als ne gerade ->

    1......2

    O......1

    0 -> 1 1 cm mal angenomm
    0 -> 2 is mehr als 1 cm währe aber in der selben zeit erreicht

    naja zuvor wars gleichschnell / den unterschied merkt man und man kanns ausnutzen
    Und ne kleine frage wegem Imagespeed hätt ich noch und zwar wenn ich für jedes Sprite ne eigene geschwindigkeit festlegen will

    müsste die zeile dafür dann so aussehn ?

    GML-Quellcode

    1. switch(direction){
    2. case 0: spr = Held_2_rechts;break;
    3. case 90: spr = Held_2_hoch;break;
    4. case 180: spr = Held_2_links;break;
    5. case 270: spr = Held_2_runter;break;


    GML-Quellcode

    1. switch(direction){
    2. case 0: spr = Held_2_rechts
    3. image_speed = 1;break;
    4. case 90: spr = Held_2_hoch
    5. image_speed = 1;break;
    6. case 180: spr = Held_2_links
    7. image_speed = 1;break;
    8. case 270: spr = Held_2_runter
    9. image_speed = 1;break;


    zb ?

    PS: bin unsicher ob die Animation geht ich teste ma ebend ^^

    *seufz* scheint nicht zu gehn ._.

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

  • genau so müste es sein ...
    alles was nach case kommt bis zum break wird ausgeführt ...

    GML-Quellcode

    1. switch(direction){
    2. case 90:
    3. spr = Held_2_rechts;
    4. image_speed = 1;
    5. break;
    6. }


    und denk an die ; das macht die fehlersuche eifacher da der gm sich da manschamal affig hat bei error report ^^

    ok ... mit dem diagonale haste eig auch recht ... obwohl mir das grad unlogisch erscheint (4 px sind 4 pix ... ob diagonal oder gerad) ... aber ich habe kopf aua und es is spät ^^ ...

    aber das mit dem speed köntest du so lösen:

    GML-Quellcode

    1. if(keyboard_check(vk_up)){
    2. direction = 90;
    3. // hoch und rechts
    4. if(keyboard_check(vk_right)){
    5. if(place_free(x+2,y)){
    6. x += 2;
    7. move = true;
    8. }
    9. if(place_free(x,y-2)){
    10. y -= 2;
    11. move = true;
    12. }
    13. }else{
    14. // hoch und links
    15. if((keyboard_check(vk_left)){
    16. if(place_free(x-2,y)){
    17. x -= 2;
    18. move = true;
    19. }
    20. if(place_free(x,y-2)){
    21. y -= 2;
    22. move = true;
    23. }
    24. }else{
    25. // nur hoch
    26. if(place_free(x,y-4){
    27. y -= 4;
    28. move = true;
    29. }
    30. }
    31. }
    32. }else{
    33. if(keyboard_check(vk_down)){
    34. direction = 270;
    35. // runter und rechts
    36. if(keyboard_check(vk_right)){
    37. if(place_free(x+2,y)){
    38. x+=2;
    39. move = true;
    40. }
    41. if(place_free(x,y+2)){
    42. y +=2;
    43. move = true;
    44. }
    45. }else{
    46. //runter und links
    47. if((keyboard_check(vk_left)){
    48. if(place_free(x-2,y)){
    49. x-=2;
    50. move = true;
    51. }
    52. if(place_free(x,y-2)){
    53. x -=2;
    54. move = true;
    55. }
    56. }else{
    57. // nur runter
    58. if(place_free(x,y-4){
    59. y += 4;
    60. move = true;
    61. }
    62. }
    63. }
    64. }else{
    65. // nur links
    66. if((keyboard_check(vk_left)){
    67. direction = 180;
    68. if(place_free(x-4,y)){
    69. x -= 4;
    70. move = true;
    71. }
    72. }else{
    73. // nur rechts
    74. if((keyboard_check(vk_right)){
    75. direction = 0;
    76. if(place_free(x+4,y)){
    77. x += 4;
    78. move = true;
    79. }
    80. }
    81. }
    82. }
    83. }
    Alles anzeigen


    hoffe i hab jetzt kein fehler drin ... werd mich jetzt hin hauen ... schau morgen nochmal rein ^^
    ---- wer fehler findet darf sie behalten ---
  • Okay ich danke dir erstma vielmals :) bin zumindest öhm hm naja codetechnisch ein bisschen vorrangekommen xD

    ^^ ist ja auch was


    Joa wie gesagt die Animation mein eigentliches Problem das ich habe geht trotz allem nicht ... ._.
    Und bei der sache mit dem Geschwindigkeitsanpassen diagonal isser jetzt iwie noch schneller geworden hmm.

    Nebenbei noch ne andere frage weil bei mir bezüglich bewegung ganz am anfang wurde ja vspeed und hspeed verwendet mir kommts so vor als währe diese andere sache mit x 4 usw schneller als das mit vspeed 4 zb. ?

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