Gegner Problem

    Gegner Problem

    hy


    also ich hab einen kleinen gegner gemacht der ganze zeit von links nach rechts läuft und wenn er den player sieht fängt er an zu schießen.was auch gut ist.

    mein problem jetzt ist das wenn er gerade schießt und ich mit dem player dann einfach durch ihn durchlaufe auf die andere seite (er schießt nach links ich renne durch ihn durch nach rechts.)
    will ich das er sich auch gleich umdreht.

    ich dachte ich kann das einfach mit

    obj_gegner
    step event

    GML-Quellcode

    1. if (state == "shoot")&& obj_player.x> x
    2. {
    3. image_xscale = 1;
    4. }


    aber das funktioniert leider nicht

    wäre toll wenn mir wer helfen könnte

    hier noch mehr code damit ihr versteht

    obj_gegner
    step event

    GML-Quellcode

    1. if (lastgo == "right")
    2. {
    3. state = "run";
    4. image_xscale = 1;
    5. }
    6. if (lastgo == "left")
    7. {
    8. state = "run";
    9. image_xscale = -1;
    10. }
    11. if (state == "shoot")&&(lastgo == "left")&& (obj_player.x >= x) // funktioniert nicht
    12. {
    13. lastgo = "right";
    14. }
    15. if (save)//hier speichert er nur ein paar koordinaten ab
    16. {
    17. startpos_x = x;
    18. startpos_y = y;
    19. playerpos_x = x-650;
    20. playerpos_y = y;
    21. save = false;
    22. }
    23. if (now1)
    24. {
    25. spd = 2;
    26. go = true;
    27. }
    28. if (go) // hier spielt die musik...fürs hin und her gehn vom gegner,,,na eigentlich nur fürs nach links gehn weil fürs rechts gehn hab ich hier jetzt nicht eingefügt weils eh fast das selbe ist
    29. {
    30. now1 = false;
    31. if distance_to_point(playerpos_x,playerpos_y)>10
    32. {
    33. lastgo = "left";
    34. move_towards_point(playerpos_x,playerpos_y,spd);
    35. }
    36. if distance_to_point(playerpos_x,playerpos_y)<20
    37. {
    38. timer = true;
    39. move_towards_point(playerpos_x,playerpos_y,0);
    40. }
    41. }
    42. if (timer)//timer ist dafür da damit er wenn er den punkt erreicht hat das er dann ein paar sekunden stehn bleibt
    43. {
    44. zeit++;
    45. state = "idle";
    46. }
    47. if (zeit >= 180)
    48. {
    49. zeit = 0;
    50. now2 = true;
    51. go = false;
    52. go2 = false;
    53. timer = false;
    54. }
    55. if (go) // hier nur ne collision line für die sichtline des gegners
    56. {
    57. if (lastgo == "left")&& collision_line(x-300,y,x,y-1,obj_player,false,false)
    58. {
    59. see = true;
    60. }
    61. }
    62. if (see)
    63. {
    64. state = "shoot";
    65. knowit = true;
    66. now1 = false;
    67. now2 = false;
    68. timer = false;
    69. zeit = 0;
    70. }
    71. if (knowit) // also knowit bedeutet wenn er mich gesehen hat das er dann auf mich schießt
    72. {
    73. steps++;
    74. go = false;// geh nach links
    75. go2= false;// geh nach rechts
    76. speed = 0;
    77. }
    78. if (steps == 20)or (steps == 60)or (steps == 100) // schieß ein paar kugeln ab in abständen
    79. {
    80. instance_create(x,y,obj_terrorist_bullet);
    81. }
    82. else
    83. if (steps == 110)
    84. {
    85. steps = 0;
    86. }
    87. if (knowit)&&(see)&& distance_to_point(obj_player.x,obj_player.y)> 400
    88. // also wenn er schon auf mich schießt und ich dann aber weiter weg geh soll er aufhören und wieder den weg entlang gehn(funkt auch) nur ist die funktion distance to point nicht so gut weil egal ob ich rechts oder links vom gegner stehe löst er dann diesen code aus (obwohl es nur links ausgelöst werden sollte aber durch die funktion wird es auf beiden seiten)
    89. {
    90. knowit = false;
    91. steps = 0;
    92. state = "idle";
    93. see = false;
    94. now1 = true;
    95. go = true;
    96. }

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „acidrain833“ ()

    Lass dir mal state und see ausgeben, ich denke sobald der player an dem gegner vorbeigeht wird see = false gesetzt und demnach auch der state in indle geändert.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    @Rhazul

    danke dir für deine hilfe und antwort habs schon rausgefunden warum es nicht ging.ich hatte es ja hier so:

    GML-Quellcode

    1. ​if (lastgo == "left")
    2. {
    3. state = "run";
    4. image_xscale = -1;
    5. }



    jetzt hab ich das state einfach rausgenommen und in den move towards rein gepackt und jetzt gehts.


    jedoch hab ich immer noch ein problem und zwar wirkt die gravitation nicht...ich hab einfach vspeed+=0.8 im step event aber er fliegt nicht runter.

    hab einen normalen collisions code was kann das sein?hmm werd es mal mit gravition_direction und gravitation versuchen..thx
    if (knowit)&&(see)&& distance_to_point(obj_player.x,obj_player.y)> 400
    // also wenn er schon auf mich schießt und ich dann aber weiter weg geh soll er aufhören und wieder den weg entlang gehn(funkt auch) nur ist die funktion distance to point nicht so gut weil egal ob ich rechts oder links vom gegner stehe löst er dann diesen code aus (obwohl es nur links ausgelöst werden sollte aber durch die funktion wird es auf beiden seiten)


    das ist einfach gelöst mit:

    GML-Quellcode

    1. obj_player.x < obj_gegner.x


    Versuchs mal so:

    GML-Quellcode

    1. if (knowit)&&(see)&& distance_to_point(obj_player.x,obj_player.y)> 400 && obj_player.x < obj_gegner.x
    huhu
    du setzt bei if (knowit) speed = 0;
    Das überschreibt deinen vspeed, aber den kannst du ja auch nach dem code zB im end-Step setzen.
    oder du änderst speed = 0; in hspeed = 0;
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    @Rhazul

    danke dir..aber wieso ist bei speed gleich der vspeed gemeint??? ich musste speed =0 nehmen wegen den move towards point...würde ich im move towards point ne variable für den speed nehmen wie zb : spd

    und diese dann auf 0 setzen würde das nix bringen...nur wenn ich speed = 0 schreibe bleibt er auch wirklich stehn.