KI-Code Fehler

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

  • KI-Code Fehler

    HI!
    Ich habe vor ein paar Monaten meine KI fertiggestellt und habe heute noch etwas angefügt. Meine KI funktioniert wie folgt: Ein Objekt wandert von Waypoint zu Waypoint, und trifft es dabei auf den Spieler beliebt es stehen und schießt.
    Jetzt habe ich folgendes hinzugefügt: Das Objekt soll nicht nur einfach plötzlich in die Richtung des Spielers schauen, sondern sich langsam hindrehen. Und das in die Richtung, in die es schneller geht. Dabei sieht ein Teil des Codes so aus:

    GML-Quellcode

    1. // Das Step Event für die KI
    2. // argument0=Waypoint Objekt
    3. // argument1=Gegner der KI
    4. // argument2="Spotting"-Distanz
    5. // argument3=Script für die Attacke
    6. // argument4=Wall Objekt
    7. argument0=waypoint
    8. argument1=enemy
    9. argument2=170
    10. argument3=ki_attack
    11. argument4=wall
    12. inumb=instance_number(argument0)
    13. if (distance_to_object(argument1)<argument2)
    14. {
    15. if not collision_line(x,y,argument1.x,argument1.y,argument4,true,true)
    16. {
    17. global.feind=true
    18. if not (image_angle<point_direction(x,y,argument1.x,argument1.y)+10 and image_angle>point_direction(x,y,argument1.x,argument1.y)-10)
    19. {
    20. if (image_angle>point_direction(x,y,argument1.x,argument1.y)+180)
    21. image_angle+=10
    22. if (image_angle<point_direction(x,y,argument1.x,argument1.y)+181)
    23. image_angle-=10
    24. }
    25. else
    26. {
    27. image_angle=point_direction(x,y,argument1.x,argument1.y)
    28. speed=0
    29. script_execute(argument3)
    30. }
    31. }
    32. }
    33. else
    34. {
    35. global.feind=false
    36. image_angle=direction
    37. }
    38. if (global.feind=false)
    39. {
    40. if (global.suche=true)
    41. {
    42. inst=instance_find(argument0,floor(random(inumb)))
    43. global.suche=false
    44. }
    45. else
    46. {
    47. if (mp_potential_step(inst.x,inst.y,5,false))
    48. {
    49. global.suche=true
    50. }
    51. }
    52. }
    53. if collision_line(x,y,argument1.x,argument1.y,argument4,true,true)
    54. {
    55. global.feind=false
    56. image_angle=direction
    57. }
    Alles anzeigen


    Das ist das Step-Event meines Codes, wobei die Funktion mit dem drehen nicht funktioniert. Ich hoffe ihr könnt mir helfen.

    © 2008 by Teamgrill Productions
  • Ich hab erstmal ein GM6-File draus gemacht

    Deas Problem scheint irgenwo hier zu liegen:

    GML-Quellcode

    1. if not (image_angle<point_direction(x,y,argument1.x,argument1.y)+10
    2. and image_angle>point_direction(x,y,argument1.x,argument1.y)-10)
    3. {
    4. if (image_angle>point_direction(x,y,argument1.x,argument1.y)+180)
    5. image_angle+=10
    6. if (image_angle<point_direction(x,y,argument1.x,argument1.y)+181)
    7. image_angle-=10
    8. }


    Kann es sein, daß er sich in die Falsche Richtung dreht, wenn ein Winkel größer als 180 ist?
    Dateien
    • kitest.rar

      (2,92 kB, 99 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von Melancor ()

  • Die eine Passage so austauschen:

    GML-Quellcode

    1. ...
    2. if (distance_to_object(argument1)<argument2) {
    3. if not collision_line(x,y,argument1.x,argument1.y,argument4,true,true) {
    4. global.feind=true
    5. d = image_angle-point_direction(x,y,argument1.x,argument1.y);
    6. if (abs(d) <= 10) {
    7. image_angle=point_direction(x,y,argument1.x,argument1.y)
    8. speed=0
    9. script_execute(argument3)
    10. }
    11. else {
    12. if (d > 180)
    13. d -= 360;
    14. else if (d < -180)
    15. d += 360;
    16. if (d > 0)
    17. image_angle = (image_angle+350) mod 360;
    18. else
    19. image_angle = (image_angle+10) mod 360;
    20. }
    21. }
    22. }
    23. else {
    24. ...
    Alles anzeigen
  • Benutzer online 1

    1 Besucher