KI die bei Blickkontakt schießt..

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

  • KI die bei Blickkontakt schießt..

    Hi, ich suche einen Script für eine KI.
    Also, ich möchte einen Top-Down shooter erstellen, aber bekomme es noch nicht vollbracht,
    das die KI schießt wenn ich in ihrem Radius bin.
    Es soll so sein, das ich z.B. in einen Radius einer KI laufe, die mich dann bemerkt (da ich in ihrem Radius stehe) und
    mich versucht zu erschießen, sobald sie aber bemerkt, das sie mich nicht trifft und ihr igrendetwas im Weg steht (z.B. Mauer), sie um die Mauer herum läuft und mich weiterhin versucht zu erschießen.

    Habe dazu mal schnell ein kleines Bild gemalt:


    Hoffe ihr wisst was ich meine, und jemand könnte mir ein Exampel hochladen. :)


    mfg serenox ^^

    Edit:
    Mir fällt grade auf, das ich mich bei dem Bild verschireben habe, nicht Radios sondern Radius :pinch:


    Edit2:
    z.B. so wie bei dem Spiel Operation Assault | neue Demo

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

  • Also, erstmal herzlich Willkommen im Forum.

    Ich hoffe mal, dass du dich mit GML schon auskennst.
    Also so machst du das mit dem Radius:

    GML-Quellcode

    1. if distance_to_object(obj_player) <= 200
    2. {//deine Aktion schießen, also z.b.:
    3. a = instance_create(x,y,obj_bullet);
    4. a.direction = point_direction(x,y,obj_player.x,obj_player.y);
    5. a.speed = 8;}


    also, das wär mal das mit dem radius, da wird aber keine Wand oder so berücksichtigt.
    Das kannst du zusätzlich mit

    GML-Quellcode

    1. if !collision_line(x,y,obj_player.x,obj_player.y,...)

    machen, das ausrufezeichen bedeutet nicht.
    Also wenn die Linie nicht kollidiert.

    Weitere Details zu der Funktion findest du in dieser Hilfe .


    Ich hoffe, dass ich dir damit ein wenig helfen konnte.
    Gruß Gamer
  • Dass der Gegner schießen soll, sobald du in seinem Radius bist, bekommst du mit der Funktion hin:

    GML-Quellcode

    1. if collision_circle(xc,yc,radius,spieler_obj,prec,notme)>0 then {
    2. //Schießenaktion
    3. }
    Diese Funktion prüft, ob eine Kollision zwischen dem (gefüllten) Kreis mit Kreismittelpunkt an Position (xc,yc) mit gegebenem Radius und Instanzen des Objektes obj vorliegt. Beispielsweise kannst du damit überprüfen, ob ein Objekt dicht an einer bestimmten Stelle liegt.

    Damit der Gegner dann dem Spieler folgt und Mauern umgeht kannst du glaube ich hiermit erreichen:

    GML-Quellcode

    1. mp_potential_step(x,y,stepsize,checkall);
    Diese Funktion lässt die Instanz einen Schritt auf eine bestimmte Position hin machen. Aber diesmal versucht sie Hindernisse zu umgehen. Wenn die Instanz mit "solid" Instanz (oder irgendeiner, wenn "checkall" "true (wahr) ist) zusammen zu stoßen droht, wird sie die Richtung ändern, um die Instanz zu meiden und es umgehen. Diese Näherung unterliegt keiner garantiert funktionierenden Arbeitsweise aber in den meisten einfachen Fällen bewegt es die Instanz effektiv auf die Zielposition. Die Funktion gibt an, ob das Ziel erreicht wurde. Die Schrittweite des Schrittes wird durch "stepsize" angezeigt.

    ____
    Adventskalender 2010: Blue Smiley

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Gimero ()

  • Du musst natürlich die Argumente in der Funktion mit Werten ersetzen. Xc und yc sind die X bzw. Y-Koordinate, wo der Mittelpunkt des Kreises sein soll.
    Edit: Es könnte beispielsweise so aussehen:

    GML-Quellcode

    1. collision_circle(Gegnerobj.x,Gegnerobj.y,15,spieler_obj,true,true);

    ____
    Adventskalender 2010: Blue Smiley
  • hey ich such da auch immer was ...
    also das im create event versteh ich noch aber das:

    GML-Quellcode

    1. if distance_to_object(obj_player)<150 {angreifen=1} else {angreifen=0}
    2. if collision_line(x,y,obj_player.x,obj_player.y,obj_wall,false,true) {gehen=1} else {gehen=0}
    3. if gehen==1 {mp_potential_step(obj_player.x,obj_player.y,3,true)}
    4. if angreifen==1 && gehen==0
    5. {
    6. with instance_create(x,y,obj_bullet) motion_add(point_direction(x,y,obj_player.x,obj_player.y),10)
    7. }
    nix mehr ^^

    warum doch line und nicht circle ?!

    danke ^^
  • Er weis nicht was der Code macht.

    GML-Quellcode

    1. if distance_to_object(obj_player)<150 {angreifen=1} else {angreifen=0} //Wenn der Player weniger als 150 PIxel enfernnt ist wir angreifen auf 1 getsezt
    2. if collision_line(x,y,obj_player.x,obj_player.y,obj_wall,false,true) {gehen=1} else {gehen=0} //Wenn eine Wand dawischen ist wir nihct geschoßen
    3. if gehen==1 {mp_potential_step(obj_player.x,obj_player.y,3,true)} // Gehe zu PLayer
    4. if angreifen==1 && gehen==0
    5. {
    6. with instance_create(x,y,obj_bullet) motion_add(point_direction(x,y,obj_player.x,obj_player.y),10) //Erstellt die Kugel
    7. }
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • ja das kannst du machen.

    GML-Quellcode

    1. //Create Event
    2. delay_on=false;


    GML-Quellcode

    1. //Wenn er schießen soll
    2. if (delay_on=false)
    3. {
    4. //Hier deine Schussaktion
    5. delay_on=true;
    6. alarm[0]=60; //60 = 2 Sekuden
    7. }


    GML-Quellcode

    1. //Alarm 0 Event
    2. delay_on=false;
  • Okay, da ich nun wirklich vom Coden nicht viel weiß, was ist die schussaktion? Ich meine eher den code dafür?
    Kannst du mir nen kompletten code machen, wo ich dann nur noch die namen für die objekte ändern muss. Dann kann ich am besten sehen, wie das geht :D
  • Warscheinlich nerve ich schon, aber was ist meine Position? (x,y,obj_player.x,obj_player.y) ? oder was? und der speed, ist das ne normale zahl?

    EDIT: Und wo kommt der ganze code mit schuss und sekunde und so hin, wenn ich schon den von vorhin benutzt habe???