Enemy Problem

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

  • Enemy Problem

    hallo

    also ich wollte einen enemy machen der den player verfolgt wenn er in der nähe ist und das funktioniert auch...dann hab ich noch gemacht das wenn man auf ihn raufspringt das der player in die höhe springt...und wenn man in den enemy reinläuft dann wird man weggestossen und springt auch teilweise....jetzt hab ich probleme und zwar wollte ich wenn man raufspringt auf den enemy das der sein sprite zu platt wechselt....und wenn man ein 2tes mal raufspringt sollte er zum sprite dead wechseln....jedoch funktioniert es nicht...hier mal mein code

    step event enemy

    GML-Quellcode

    1. if point_distance(x,y,obj_player.x,obj_player.y)< 200
    2. {
    3. move_towards_point(obj_player.x,obj_player.y+26,spd);
    4. Estate = "run"; // sprite fürs rennen
    5. vspeed = 0;
    6. }
    7. if point_distance(x,y,obj_player.x,obj_player.y)> 250
    8. {
    9. speed = 0;
    10. }
    11. if place_meeting(x,y,obj_player)&& (getroffen == 0) //getroffen wollte ich benutzen für die abfrage ob er das 1te oder 2te mal raufspringt
    12. {
    13. if (obj_player.y < y-30)
    14. {
    15. with (obj_player)
    16. {
    17. vspeed = -jspd;
    18. }
    19. Estate = "hit"; // für die sprite steuerung.habe ein switch wo die cases alle sind...wenn er das erste mal raufspringt soll er zum platten also hit sprite wechseln
    20. getroffen = 1;
    21. }
    22. else if (facing == "left") // facing ist für die steuerung ob er nach links oder rechts geht
    23. {
    24. global.playerlive -=1;
    25. with (obj_player)
    26. {
    27. hspeed = -kontakt;
    28. vspeed = -jspd;
    29. }
    30. }
    31. else
    32. {
    33. global.playerlive -=1;
    34. with (obj_player)
    35. {
    36. hspeed = kontakt; // ist eine zahl (156)
    37. vspeed = -jspd; // ist 12
    38. }
    39. }
    40. }
    Alles anzeigen



    wollte eigentlich den selben code nochmal nehmen nur mit diesen unterschieden :



    GML-Quellcode

    1. if place_meeting(x,y,obj_player)&& (getroffen == 1) //hier die variable abfragen ob sie 1 ist
    2. {
    3. if (obj_player.y < y-30)
    4. {
    5. with (obj_player)
    6. {
    7. vspeed = -jspd;
    8. }
    9. Estate = "dead"; // wenn getroffen 1 dann sprite dead
    10. getroffen = 0;
    11. time = 180; // kleinen alarm
    12. time--;
    13. if (time <= 0) // wenn der alarm durch ist soll der enemy zerstört werden
    14. {
    15. instance_destroy();
    16. }
    17. }
    18. else if (facing == "left") // facing ist für die steuerung ob er nach links oder rechts geht
    19. {
    20. global.playerlive -=1;
    21. with (obj_player)
    22. {
    23. hspeed = -kontakt;
    24. vspeed = -jspd;
    25. }
    26. }
    27. else
    28. {
    29. global.playerlive -=1;
    30. with (obj_player)
    31. {
    32. hspeed = kontakt; // ist eine zahl (156)
    33. vspeed = -jspd; // ist 12
    34. }
    35. }
    36. }
    Alles anzeigen




    bitte um hilfe zurzeit ist es so das er ganz kurz das sprite wechselt zum hit sprite aber beim 2ten raufspringen ändert sich nichts.
  • Sorry aber ich und bestimmt viele andere wollen nicht einfach einen Code bekommen und da den Fehler zu finden.
    Kannst du die einzelnen Teile einzeln zeigen und erklären was passieren soll?
    Du verjagst uns sozusagen mit dem langen code der da einfach steht.
    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
  • ok sorry also hier mal
    alles ist im step event vom enemy....

    das erste hier ist nur damit der enemy den player folgt und auch wieder stehn bleibt...funktioniert einwandfrei...

    GML-Quellcode

    1. if point_distance(x,y,obj_player.x,obj_player.y)< 200
    2. {
    3. move_towards_point(obj_player.x,obj_player.y+26,spd);
    4. Estate = "run"; // sprite fürs rennen
    5. vspeed = 0;
    6. }
    7. if point_distance(x,y,obj_player.x,obj_player.y)> 250
    8. {
    9. speed = 0;
    10. }
    Alles anzeigen


    und dieser code hier : also das place meeting fragt ab ob eine kollision mit enemy und player ist....
    dann kommt die if (obj_player.y < y-30) das bedeutet das wenn der player auf den enemy springt....kurz gesagt...
    das with sagt dann das der player nochmal in die luft springen soll...
    dann wird das gesagt welches sprite sein soll...und die variable getroffen sollte dafür sein das er wenn er zum ersten mal raufspringt die variable erhöht wird sodass man ein zweites mal raufspringen kann und er erst dann stirbt.

    GML-Quellcode

    1. if place_meeting(x,y,obj_player)&& (getroffen == 0) //getroffen wollte ich benutzen für die abfrage ob er das 1te oder 2te mal raufspringt
    2. {
    3. if (obj_player.y < y-30)
    4. {
    5. with (obj_player)
    6. {
    7. vspeed = -jspd;
    8. }
    9. Estate = "hit"; // für die sprite steuerung.habe ein switch wo die cases alle sind...wenn er das erste mal raufspringt soll er zum platten also hit sprite wechseln
    10. getroffen = 1;
    11. }
    12. }
    Alles anzeigen



    das sind eigentlich die wichtigsten teile davon....wie gesagt wollte ich diesen code einfach nochmal kopieren und nur mit dem unterschied das ich die variable getroffen auf 1 setze und dann das sprite ändere und dann die instanz zerstöre.
  • Okay. Ich habe vergessen zu sagen, dass es gut ware, wenn du noch dazu sagst, was funktioniert und was nicht.

    Versuche bei der Abfrage ob Berührung und getroffen gleich 1, getroffen nicht auf 0 sondern bspw. Auf -1zu setzen ;)
    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
  • ja sorry habs vergessen also wenn ich diesen code hier benutze

    GML-Quellcode

    1. if place_meeting(x,y,obj_player)&& (getroffen == 0) //getroffen wollte ich benutzen für die abfrage ob er das 1te oder 2te mal raufspringt
    2. {
    3. if (obj_player.y < y-30)
    4. {
    5. with (obj_player)
    6. {
    7. vspeed = -jspd;
    8. }
    9. Estate = "hit"; // für die sprite steuerung.habe ein switch wo die cases alle sind...wenn er das erste mal raufspringt soll er zum platten also hit sprite wechseln
    10. getroffen = 1;
    11. }
    12. }
    Alles anzeigen


    schaltet er zu dem sprite zerquetscht....aber gleich wieder zum normalen(würde wollen das er eine halbe sekunde das zerquetscht sprite macht und dann das normale..aber wegen dem verfolgungscode mit point distance sag ich ja Estate = "run" und deshalb bewegt er sich gleich wieder und wechselt zum rennen sprite...)und ich wollte jetzt noch mal die selbe abfrage benutzen nur halt mit getroffen ==1 damit dann das sterbe sprite kommt für ne kurze zeit.. und er dann stirbt...aber es funktioniert nicht.


    werde es mal mit dem -1 was du geschrieben hast versuchen...







    eins noch....ich hab bei diesem code die variable spd benutzt bei move_towards_point und darunter hab ich dann speed = 0; weil wenn ich dann spd = 0 benutzen würde ,würde sich der enemy garnicht mehr bewegen....wieso nicht.....hier der code

    GML-Quellcode

    1. ​if point_distance(x,y,obj_player.x,obj_player.y)< 200
    2. {
    3. move_towards_point(obj_player.x,obj_player.y+26,spd);
    4. Estate = "run"; // sprite fürs rennen
    5. vspeed = 0;
    6. }
    7. if point_distance(x,y,obj_player.x,obj_player.y)> 250
    8. {
    9. speed = 0;
    10. }
    Alles anzeigen