Sterbe Problem

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

  • Sterbe Problem

    hy


    ich bins wiedereinmal. :headtouch:


    also mit diesen code vernichte ich meinen gegner oder er mich:

    Player Collision Event mit Enemy

    GML-Quellcode

    1. if (vspeed > 0) or (instance_exists(obj_schild))
    2. {
    3. with other do instance_destroy();
    4. global.Exp=+15;
    5. vspeed=-4;
    6. }else
    7. scr_loosecode();



    das script loosecode ist zurzeit nichts auser game_load mehr nicht.


    jetzt wollte ich aber noch die sterbe animation hinzufügen und da hab ich probleme.mit diesen code erstelle ich die sterbe animation:

    Einfacher Code

    GML-Quellcode

    1. if (global.lastpressed=="right")
    2. {
    3. sprite_index=spr_player_died_right;
    4. image_speed=0.2;
    5. }
    6. if (global.lastpressed=="left")
    7. {
    8. sprite_index=spr_player_died_left;
    9. image_speed=0.2;
    10. }


    aber wo soll ich das hinzufügen??? wollte es in das script loosecode hinzufügen nur zeigt er es dann nicht weil er gleich das spiel ladet.ich dachte dann an einen alarm für das laden aber hab ich nicht hinbekommen.
    dann wollte ich es im collision event hinzufügen und hab das script daweil weggelassen....da zeigt er zwar die sterbe animation aber ich sterbe nicht.


    wie würdet ihr das machen???



    PS:noch eine frage:ich kann jetzt im spiel links und rechts laufen....damit meine ich auch wenn ich schon kurz vorm ende des levels wäre könnte ich nochmal zurück rennen am anfang und das will ich nicht.
  • es gibt zum Beispiel die Variable image_number. Diese enthält die Anzahl der images der Animation.
    Du kannst im Step oder sonst wo immer abfragen, ob man gerade das Sprite ....death... hat und ob image_index >= image_number-1 ist. -1 Deshalb, weil image_index bei 0 anfängt und bei zB. 4 images image_number = 4 hat aber image_index nur bis 3 geht.
    Wenn das der Fall ist, dann kannst du das Level neu laden, da die Animation zu ende ist.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • if (vspeed > 0 || instance_exists(obj_schild)){
    vspeed=-4;
    if (global.lastpressed=="right"){
    with(other)
    sprite_index=spr_player_died_right
    image_speed=0.2;
    if (image_index >= image_number-1)
    {
    instance_destroy();
    global.Exp=+15;
    }
    }
    else if (global.lastpressed=="left")
    {
    with(other)
    sprite_index=spr_player_died_left;
    image_speed=0.2;
    if (image_index >= image_number-1){
    instance_destroy();
    global.Exp=+15;}
    }
    }else
    scr_loosecode();
    Wir stehen zusammen und wir fallen zusammen
  • @Eddysoulo

    hab gerad gemerkt das dieser code unten ein scheis ist...sorry für die ausdrucksweise....ich muss mir nen anderen code machen..
    ich will das wenn der player auf den gegner springt der gegner destroyed oder wenn der player ein schild hat und ihn berührt der gegner destroyed.
    aber mit dem code hier funkt das nur teilweise.

    da dieser code:

    GML-Quellcode

    1. if (vspeed > 0) or (instance_exists(obj_schild))
    2. {
    3. with other do instance_destroy();
    4. global.Exp=+15;
    5. vspeed=-4;
    6. }else
    7. scr_loosecode();



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

  • acidrain833 schrieb:

    @Eddysoulo

    Also das stimmt sicher nicht ...

    da dieser code:

    GML-Quellcode

    1. if (vspeed > 0) or (instance_exists(obj_schild))
    2. {
    3. with other do instance_destroy();
    4. global.Exp=+15;
    5. vspeed=-4;
    6. }else
    7. scr_loosecode();


    bedeutet das wenn der player auf dem gegner springt oder der player einen schild hat und ihn dann berührt das der gegner zerstört wird.und das der player dann in die höhe springt umd vspeed =-4

    wahrscheinlich hast du es falsch verstanden.und geglaubt das die sterbe animation für den gegner war.


    die sterbe animation soll für meinen player sein....wenn der player in den gegner rein rennt ohne schild.


    dann solltest du besser erklären was du willst denn dein code stimmt auch nicht... du sagst wenn vspeed größer als 0 ist und die instance obj_schild existiert soll der gegner zerstört werden, bei global.exp 15 punkte dazugerechnet verden und die (zerstörte) instance soll um 4 nach oben... geht ja wohl nicht...

    if (vspeed > 0 || instance_exists(obj_schild))
    {
    vspeed=-4;
    global.Exp=+15;
    with(other)
    {
    instance_destroy();
    }
    else
    scr_loosecode();
    Wir stehen zusammen und wir fallen zusammen
  • nicht ganz sorry..das ichs schlecht erklärt hab..

    also wenn vspeed größer als 0 ist oder die instance obj_schild existiert soll der gegner zerstört werden dann global.exp 15 punkte dazurechnen und nicht die zerstörte instanz sondern der player soll um 4 nach oben..



    aber wie im vorherigen post schon geschrieben...sorry wurde geändert hast du vielleicht noch nicht gesehn....
    ist dieser code nicht gut....ich brauche einen anderen muss mir was anderes überlegen...es sollte so wie bei super mario sein...
  • soo mit ner anderen ausdrucksweiße hilft man schon viel lieber... ich würde alles komplett bisschen anders machen und zwar würde ich im
    create event: diese 4 Variablen erstellen...

    GML-Quellcode

    1. hspd =0 ;//wird deine Horinzontale bewegung
    2. vspd =0; // wird deine Vertikale bewegung
    3. spd =4; // deine geschwindigkeit
    4. jspd =12; //deine sprunghöhe
    5. grav = 1.5;


    im step event:
    "gilt jetzt nur als beispiel"

    GML-Quellcode

    1. /// Steuerung
    2. var right = keyboard_check(vk_right);
    3. var left = keyboard_check(vk_left);
    4. var jump = keyboard_check(vk_space);
    5. if (!place_meeting(x,y+1,obj_boden)){
    6. vspd += grav;
    7. }
    8. /// die bewegung
    9. if (right){
    10. hspd =spd;
    11. }
    12. if (left){
    13. hspd =-spd;
    14. }
    15. if (jump){
    16. vspd =-jspd;
    17. }
    18. //Kollisionsevent mit bodenobjekt
    19. if (place_meeting(x+(hspd),y,obj_boden)){
    20. while(!place_meeting(x+sign(hspd),y,obj_boden))[
    21. x += sign(hspd);
    22. }
    23. hspd =0;
    24. }
    25. x += hspd;
    26. if (place_meeting(x,y+(vspd),obj_boden)){
    27. while(!place_meeting(x,y+sign(vspd),obj_boden)){
    28. y += sign(vspd);
    29. }
    30. vspd =0;
    31. }
    32. y += vspd;
    33. //kollision mit gegner
    34. is_fallen = (y - yprevious) >0;
    35. if (is_fallen && place_meeting(x,y+1,obj_gegner))
    36. {
    37. vspd =-jspd/2;
    38. global.exp += 15;
    39. with(other){
    40. instance_destory();
    41. }
    42. }else if (!is_fallen && instance_exists(obj_schild)){
    43. global.exp += 15;
    44. with(other)
    45. {instance_destory();
    46. }
    47. else
    48. scr_loosecode();
    Alles anzeigen


    probiers mal
    Wir stehen zusammen und wir fallen zusammen

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

  • dazu hab ich gleich eine frage wegen der kollision

    du verwendest hier place_meeting mit obj_boden aber da ich mehrere arten von böden hab hab ich das place_free für kollision genommen.oder gibt es da eine gute möglichkeit
    alle obj_boden in einen code zu packen