problem mit 2 animationen in einem step event

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

  • problem mit 2 animationen in einem step event

    hallo freunde....


    wie ihr seht hab ich am anfang einen code fürs [color=#FF0000]throwen[/color] und einen fürs pickup.....und komischerweise funktioniert es nicht.....also wenn ich jetzt das pickup rausnehme ,funktioniert der throw einwandfrei, aber mit dem pickup ist es so(also wenn beide codes im step event sind) ,das beim throw nur die pfeile abgeschossen werden und keine animation abgespielt wird...und dazu auch beim pickup nicht.....das selbe auch wenn ich throw rausnehme..dann funktioniert pickup einwandfrei......bitte was ist daran falsch


    Hier das ganze step event von mir

    GML-Quellcode

    1. ///PLAYER MOVEMENT AND INTERACT
    2. if (xp >=5000)
    3. {
    4. xp=0;
    5. global.levelup+=1;
    6. }
    7. //!!--Throw--!!//
    8. if (throw == 0 && global.lastpressed == "right")
    9. {
    10. sprite_index = spr_player_idle_right;
    11. image_speed = 0.3;
    12. }
    13. else if (throw == 1 && global.lastpressed == "right")
    14. {
    15. sprite_index = spr_player_throw_right;
    16. image_speed = 0.6;
    17. }
    18. else if (throw == 0 && global.lastpressed=="left")
    19. {
    20. sprite_index = spr_player_idle_left;
    21. image_speed = 0.3;
    22. }
    23. else if (throw == 1 && global.lastpressed == "left")
    24. {
    25. sprite_index = spr_player_throw_left;
    26. image_speed = 0.6;
    27. }
    28. if mouse_check_button_pressed(mb_left) && !sound_isplaying(snd_throw)
    29. {
    30. sound_play(snd_throw);
    31. image_index = 0;
    32. throw = 1;
    33. alarm[0] = 20;
    34. instance_create(x,y+50,obj_pfeil);
    35. }
    36. //!!--Pick Up--!!//
    37. if (pickup==0)
    38. {
    39. if (global.lastpressed=="right")
    40. {
    41. image_speed=0.3;
    42. sprite_index=spr_player_idle_right;
    43. }
    44. else if (global.lastpressed=="left")
    45. {
    46. image_speed=0.3;
    47. sprite_index=spr_player_idle_left;
    48. }
    49. if keyboard_check_pressed(global.key_interact)
    50. {
    51. if global.lastpressed=="right"
    52. {
    53. sprite_index=spr_player_pickup_right;
    54. image_speed=0.6;
    55. image_index=0;
    56. alarm[1] = 40;
    57. pickup=1;
    58. }
    59. else if (global.lastpressed=="left")
    60. {
    61. sprite_index=spr_player_pickup_left;
    62. image_speed=0.6;
    63. image_index=0;
    64. alarm[1] = 40;
    65. pickup=1;
    66. }
    67. }
    68. }
    69. //!!--Horizontale Geschwindigkeit--!!//
    70. hspeed=0;
    71. //!!--Health Player--!!//
    72. if (hp <=0)
    73. {lives-=1
    74. hp=100;
    75. }
    76. if (lives <=0) && (global.lastpressed=="right")
    77. {
    78. sprite_index=spr_player_died_right;
    79. }
    80. else if (lives <=0) && (global.lastpressed=="left")
    81. {
    82. sprite_index=spr_player_died_left;
    83. }
    84. //!!--Wenn die Taste gedrückt wird--!!//
    85. if keyboard_check(global.key_left)
    86. {
    87. scr_movement("left");
    88. global.lastpressed="left";
    89. image_speed=0.3;
    90. sprite_index=spr_player_run_left;
    91. }
    92. if keyboard_check_released(global.key_left)
    93. {
    94. hspeed=0
    95. global.lastpressed="left";
    96. image_speed=0.2;
    97. sprite_index=spr_player_idle_left;
    98. }
    99. if keyboard_check(global.key_right)
    100. {
    101. scr_movement("right");
    102. global.lastpressed="right";
    103. image_speed=0.3;
    104. sprite_index=spr_player_run_right;
    105. }
    106. if keyboard_check_released(global.key_right)
    107. {
    108. hspeed=0
    109. global.lastpressed="right";
    110. image_speed=0.2;
    111. sprite_index=spr_player_idle_right;
    112. }
    113. //!!--Schild--!!//
    114. if (global.item1 > 0) && keyboard_check_pressed(global.key_schild)
    115. {
    116. if !instance_exists(obj_schild)
    117. {
    118. global.item1-=1;
    119. instance_create(x,y,obj_schild)
    120. image_speed=0.3;
    121. }
    122. }
    123. //!!--Gravitation--!!//
    124. vspeed+=0.8;
    125. //!!--Schneller Rennen--!!//
    126. if keyboard_check(global.key_shift)
    127. {
    128. movespeed*=2;
    129. }
    130. //!!--Springen--!!//
    131. if keyboard_check_pressed(global.key_up)
    132. {
    133. if place_free(x,y+10) == false
    134. {
    135. jump=1;
    136. vspeed=-12;
    137. }
    138. }
    139. //!!--Sprunghöhe ändern--!!//
    140. if keyboard_check_released(global.key_up)
    141. {
    142. if (vspeed < 0)
    143. vspeed /=2;
    144. }
    145. //!!--Kollisionserkennung links rechts--!!//
    146. if place_free(x+hspeed,y) == false
    147. {
    148. if (hspeed > 0){
    149. move_contact_solid(0,-1)} ///0 ist rechts 180 ist links
    150. if (hspeed < 0){
    151. move_contact_solid(180,-1)}
    152. hspeed=0;
    153. }
    154. //!!--Kollisionserkennung oben unten--!!//
    155. if place_free(x,y+vspeed) == false
    156. {
    157. if (vspeed > 0){
    158. move_contact_solid(270,-1)} ///270 ist unten 90 ist oben
    159. if (vspeed < 0){
    160. move_contact_solid(90,-1)}
    161. vspeed=0;
    162. }
    163. //!!--Nicht an Ecken hängen bleiben--!!//
    164. if place_free(x+hspeed,y+vspeed) == false
    165. {
    166. hspeed=0;
    167. }
    168. if place_free(x,y+10) //Abfrage wenn wir springen dann sollen die sprites verwendet werden und wenn wir am boden sind diese sprites....
    169. { //In der Luft
    170. if global.lastpressed == "right"
    171. sprite_index =spr_player_jump_right // Nach Rechts Schauen
    172. else
    173. sprite_index = spr_player_jump_left // Nach Links Schauen
    174. }
    175. //!!--View--!!//
    176. view_xview= ((x-view_wview/2)+view_xview*9)/10;
    177. view_yview= ((y-view_hview/2)+view_yview*9)/10;
    178. //!!--View nicht aus dem Raum--!!//
    179. if (view_xview <0)
    180. {
    181. view_xview=0;
    182. }
    Alles anzeigen
  • Ich gehe mal davon aus, dass du throw und pickup in deinem create event mit 0 initialisierst.

    Drückst du dann deine linke Maustaste wird in einem step (throw == 0 && global.lastpressed=="left")
    und auch if (pickup==0) if (global.lastpressed=="left") ausgeführt. Das ist wahrscheinlich nicht was du willst.
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort
  • Ja es sollte if (throw && ...)
    und if (pickup && etc...) sein.
    Ausserdem sollte bei deiner Levelup Bedingung nicht xp = 0 sondern xp -= 5000; stehen. So wie es jetzt ist können Punkte verschwinden, zB wenn man 4995 xp hat und dann 50 dazubekommt.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • @Bartlbey

    also nein...ja ich hab im create event pickup und throw mit 0 initialisiert....und wenn man dann die linke maustaste drückt wird throw zu 1 und ausgeführt, und wenn man E drückt wird pickup zu 1 und ausgeführt..hab auch schon im create event pickup mit true und false gemacht und natürlich dann auch alle anderen änderungen ....



    @Rhazul
    warum sollte es throw&& dann hab ich ja die abfrage nicht ob es gerade ausgeführt wird oder nicht....
    es ist so....wenn man die maustaste drückt wird throw 1 und wenn man E drückt wird pickup 1 ansonsten ist es 0;
    und danke wegen der xp werd ich mir mal ansehn....aber brauch jetzt mal da hilfe..

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

  • Das Problem ist, dass dieser Code:

    GML-Quellcode

    1. if (pickup==0)
    2. {
    3. if (global.lastpressed=="right")
    4. {
    5. image_speed=0.3;
    6. sprite_index=spr_player_idle_right;
    7. }
    8. else if (global.lastpressed=="left")
    9. {
    10. image_speed=0.3;
    11. sprite_index=spr_player_idle_left;
    12. }
    Alles anzeigen


    immer nach Throw usgeführt wird, egal ob du etwas gethrowed hast oder nicht. Du solltest so eine Struktur für dein Event verwenden;

    GML-Quellcode

    1. if keyboard(throwkey) && throw == 0
    2. {
    3. sprite = throwsprite;
    4. instance_create;
    5. alarm = 20;
    6. }
    7. else if keyboard(pickupkey) && pickup == 0
    8. {
    9. sprite = pickupsprite;
    10. alarm = 40;
    11. }
    12. else
    13. {
    14. sprite = idle;
    15. }
    16. //lastpressed überprüfen für blickrichtung
    17. if lastpressed == right
    18. {
    19. image_xscale = 1;
    20. }
    21. if lastpressed == left
    22. {
    23. image_xscale = -1;
    24. }
    Alles anzeigen




    Alternativ könntest du eine Art State Machine machen:

    GML-Quellcode

    1. state = "idle";

    GML-Quellcode

    1. if state == "idle"
    2. {
    3. sprite == idle
    4. //und aller andere idle code
    5. }
    6. if state == "throw"
    7. {
    8. instance_create;
    9. sprite = throw;
    10. }
    11. if state == "pickup"
    12. {
    13. sprite = pickup;
    14. }
    15. if state == "walk"//im walk state kann in alle anderes states gewechselt werden je nachdem welche taste gedrückt wird
    16. {
    17. if key(throw)
    18. {
    19. state = "throw";
    20. }
    21. else if key(interact)
    22. {
    23. state = "pickup";
    24. }
    25. //gravity
    26. //walking
    27. // etc
    28. else
    29. {
    30. state = "idle";
    31. }
    32. }
    Alles anzeigen

    Je nachdem welcher string in der variable state abgespeichert ist, wird dann nur der betreffende code ausgeführt, dann brauchst du dich nur mit einer einzigen variable rumschlagen, anstatt für jede tätigkeit eine eigene.


    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Aku_Ryou ()

  • so meinst du????

    GML-Quellcode

    1. ​if keyboard_check(global.key_interact)&& (pickup==0)
    2. {
    3. sprite_index=spr_player_pickup;
    4. alarm[1]=40;
    5. pickup=1;
    6. }
    7. else if (mouse_check_button(mb_left)&& (throw==0)&& !sound_isplaying(snd_throw))
    8. {
    9. sprite_index=spr_player_throw;
    10. sound_play(snd_throw);
    11. image_index = 0;
    12. throw = 1;
    13. alarm[0] = 20;
    14. instance_create(x,y+50,obj_pfeil);
    15. }else
    16. {
    17. sprite_index=spr_player_idle;
    18. }
    19. if (global.lastpressed=="right")
    20. {
    21. image_xscale=1;
    22. }
    23. else if (global.lastpressed=="left")
    24. {
    25. image_xscale=-1;
    26. }
    Alles anzeigen
  • Verstehe, dann brauchst du entweder im else eine überprüfung ob er gerade laufen will,

    GML-Quellcode

    1. else
    2. {
    3. if isrunning == true
    4. {
    5. //idle
    6. }
    7. }

    oder du solltest tatsächlich dann zu der "state machine" lösung greifen.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • mit der state machine hab ich es schon probiert und nicht geschafft....ich probier jetzt mal das von dir jetzt..............


    EDIT:::: youhuuuuuuuuuuuuuuuu ich habs gelöst......also ich hab einfach in den alarm events das mit sprite_index=spr_player_idle rein getan.....dann konnte ich schon schießen und pickupen....dann hab ich nur noch bei keyboard_check right einfach das sprite_index= geändert....danke für deine hilfe.....bin so froh das es jetzt funkt....




    @Aku_Ryou eins noch......könntest du dir vielleicht vorstellen das du mir kleine hausaufgaben gibts ??? ich will lernen und mit den tutorials ist das nicht richtiges lernen...zwar hab ich schon was gelernt aber ich will selbst noch probleme lösen und aktionen erstellen...nur weiß ich nie was ich machen soll.deshalb wäre es toll wenn du mir (da du dich gut damit auskennst) kleine anfangsaufgaben erteilst.

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

  • ach und ein kleines problem habe ich noch und zwar wie kann ich es machen das wenn der player sagen wir nach rechts schaut ich aber mit der maus links von ihm drücke er das sprite für nach links throwen erstellt??(wie du vielleicht weißt ist es ja jetzt so das wenn man irgendwo die maustaste drückt schießt er einen pfeil ab und mit der animation throwen.)
  • danke sehr.....


    aber eins noch ich hab jetzt das problem das er nach einem sprung immer noch die sprung animation anzeigt....also wenn man springt und dann aufkommt wird weiterhin die springen animation angezeigt..


    habe es schon mit einer variable probiert aber es nicht hinbekommen.

    hier mein code fürs springen

    GML-Quellcode

    1. //!!--Springen--!!//
    2. if keyboard_check_pressed(global.key_up)
    3. {
    4. if place_free(x,y+10) == false
    5. {
    6. jump=1;
    7. vspeed=-12;
    8. }
    9. }
    10. //!!--Sprunghöhe ändern--!!//
    11. if keyboard_check_released(global.key_up)
    12. {
    13. if (vspeed < 0)
    14. vspeed /=2;
    15. }
    Alles anzeigen
  • er wechselt den sprite nicht weil du ihm sagst wenn place_free bei y+10 soll dieser sprite sein... und deshalb bleibt der auch... du musst beispielsweiße mit else oder einer weiteren if abfrage so machen das wenn du nicht in der luft bist er den anderen sprite benutzt. ist wie bei der fahrschule ... immer gerade aus bis der fahrlehrerer was anderes sagt und genau das läuft hier ab... du sagst ihm einmal mach das und dann macht er es die ganze zeit bis du ihm was anderes sagst
    Wir stehen zusammen und wir fallen zusammen
  • ja das hatte ich schon mal...also so

    GML-Quellcode

    1. if place_free(x,y+10) //Abfrage wenn wir springen dann sollen die sprites verwendet werden ....
    2. { //In der Luft
    3. sprite_index =spr_player_jump // Nach Rechts Schauen
    4. }else
    5. {
    6. sprite_index=spr_player_idle;
    7. }



    aber dadurch wurden dann andere codes gestört...damit meine ich das dadurch zb. beim rennen nach links oder rechts ständig das idle sprite ausgeführt wurde.