Mauer im Weg

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

  • Hallo:)
    Ich habe da ein Problem mit einem Jump & Run spiel. Dabei habe ich einen Gegner programmiert, welcher dem Spieler nachgeht(Artificial Intelligence). Jedoch soll dieser mir nicht folgen, wenn ein Objekt im weg ist. Ich habe das mit dem Code

    GML-Quellcode

    1. ​collision_line();

    probiert, jedoch funktioniert dies bei mir nur von der Top-Down-Perspektive. Habt ihr eine Idee, ob es einen anderen Code gibt, oder wieso dieser hier bei dem Jump & Run nicht funktioniert?
  • Also Prinzipiel macht es keinen Unterschied ob es eine Topdown oder Sideview Perspektive ist!

    Der Code macht ja nichts anderes als eine gedachte Linie zu erzeugen die prüft ob dort wo sich die Linie befindet ein Object ist.
    Es wäre vielleicht ganz hilfreich den Code zu sehen mit dem du dies Kollisionsabfrage machtst.

    Grüße Blayde
  • Gegner Step event verlinkt zum cript

    GML-Quellcode

    1. ///scr_Artificial
    2. if(collision_line(x,y,obj_Spieler.x,obj_Spieler.y,obj_Boden,1,1))
    3. {
    4. state_text='Artificial';
    5. }
    6. var dis = point_distance(x,y,obj_Spieler.x,obj_Spieler.y);
    7. hspd = 0;
    8. vspd = 0;
    9. if(!collision_line(x,y,obj_Spieler.x,obj_Spieler.y,obj_Boden,1,1))
    10. {
    11. if (dis <= sight_range)/// der Gegner sieht den Spieler
    12. {
    13. state=scr_chase;
    14. }
    15. }
    16. ///scr_chase
    17. if(!collision_line(x,y,obj_Spieler.x,obj_Spieler.y,obj_Boden,1,1))
    18. {
    19. state_text='chase';
    20. }
    21. var dis = point_distance(x,y,obj_Spieler.x,obj_Spieler.y);
    22. if(!collision_line(x,y,obj_Spieler.x,obj_Spieler.y,obj_Boden,1,1))
    23. {
    24. if (dis<=sight_range)/// wenn in sicht, jedoch nicht in Angrifsweite
    25. {
    26. dir = sign(obj_Spieler.x-x);
    27. hspd = dir *2;
    28. vspd = 0;
    29. }
    30. }
    31. else/// Keine Sichtweite
    32. {
    33. vspd = 0;
    34. hspd = 0;
    35. state=scr_Artificial;
    36. }
    Alles anzeigen
  • Wenn obj_Boden zwischen Gegner und Spieler ist sollte er den state "scr_Artificial" haben. Ist dies nicht der Fall dann verwendest du evtl andere Hindernisse als obj_Boden? Diese anderen Hindernisse müssten dann obj_Boden als Parent zugewiesen bekommen.
  • Nein benutze keine andere Hindernisse.

    GML-Quellcode

    1. ​if(!collision_line(x,y,obj_Spieler.x,obj_Spieler.y,obj_Boden,1,1))
    2. {
    3. state_text='chase';
    4. }
    5. var dis = point_distance(x,y,obj_Spieler.x,obj_Spieler.y);
    6. if (dis <= sight_range)/// wenn in sicht, jedoch nicht in Angrifsweite
    7. {
    8. if(!collision_line(x,y,obj_Spieler.x,obj_Spieler.y,obj_Boden,1,1))
    9. {
    10. dir = sign(obj_Spieler.x-x);
    11. hspd = dir *2;
    12. vspd = 0;
    13. }
    14. }
    15. else/// Keine Sichtweite
    16. {
    17. vspd = 0;
    18. hspd = 0;
    19. state=scr_Artificial;
    20. }
    Alles anzeigen
    Bilder
    • ice_screenshot_20161106-134708.png

      6,41 kB, 416×397, 280 mal angesehen
  • Ich merke grad, dass du geschweifte Klammern falsch gesetzt hast, so sollte das gehen:

    GML-Quellcode

    1. GML-Quellcodeif(!collision_line(x,y,obj_Spieler.x,obj_Spieler.y,obj_Boden,1,1))
    2. {
    3. state_text='chase';
    4. }
    5. var dis = point_distance(x,y,obj_Spieler.x,obj_Spieler.y);
    6. if (dis <= sight_range)/// wenn in sicht, jedoch nicht in Angrifsweite
    7. {
    8. if(!collision_line(x,y,obj_Spieler.x,obj_Spieler.y,obj_Boden,1,1))
    9. {
    10. dir = sign(obj_Spieler.x-x);
    11. hspd = dir *2;
    12. vspd = 0;
    13. }
    14. else/// Keine Sichtweite
    15. {
    16. vspd = 0;
    17. hspd = 0;
    18. state=scr_Artificial;
    19. }
    20. }
    Alles anzeigen