AI - in Deckung gehen klappt nicht !!

Posted By: DexLoomer

AI - in Deckung gehen klappt nicht !! - 07/15/07 21:55

Hallo Leute,
ich versuche eine Gegner-Ai, nach dem Tutorial aus dem 3DGS-Magazin zu scripten, die in Deckung geht wenn sie getroffen wird. Leider fuktioniert das ganze noch nicht sauber..
Zum einen werden die Zielpunkte nicht immer richtig gesetzt, zum anderen "hängen" die meissten Gegner fest und "flackern" sobald sie ihren Zielpunkt erreichen!
Hier der entsprechende Codeteil:

Code:
  
.
.
.
// MY.action_state=4: ENEMIE SUCHT DECKUNG
while (my.action_state == 4)
{
if (my.hint_counter <= 360)
{
my.hint_counter += 36;
temp.x = my.x + fsin(my.hint_counter, 300);
temp.y = my.y + fcos(my.hint_counter, 300);
temp.z = my.z;

c_trace(my.x, temp.x, Ignore_me | Ignore_passable);
result = c_trace(target.x, plBiped01_entity.x, Ignore_me | Ignore_passable);

if((result != 0) && (you != plBiped01_entity))
{
My.move_pos_x = target.x;
My.move_pos_y = target.y;
My.move_pos_z = my.z;

while(1)
{
ent_animate(me, "Run", my.skill46, ANM_CYCLE);
my.skill46 += 10 * time_step;
vec_set (temp.x, my.move_pos_x);
vec_sub (temp.x, my.x);
vec_to_angle (my.pan, temp);
my.tilt = 0;
my.skill53 = 20 * time_step;
my.skill54 = 0;
my.skill55 = 0;
result = c_move (my, my.skill53, nullvector, ignore_passable | glide);

if ((result < (0.5 * my.skill53 * time_step)) || (vec_dist(my.x, My.move_pos_x) < 20))
{
my.action_state = 0;
break;
}
wait (1);
}
}
}
else
{
my.hint_counter = 0;
}
wait(1);
}
.
.
.



Weiss jemand Hilfe oder hat einen Tip? Auch würde ich mich über einen anderen Ansatz freuen, die Gegner Deckung suchen zu lassen...
Dex
Posted By: Germanunkol

Re: AI - in Deckung gehen klappt nicht !! - 07/16/07 08:19

if ((result < (0.5 * my.skill53 * time_step)) || (vec_dist(my.x, My.move_pos_x) < 20))
um das flackern zu verhindern könntest du versuchen, hier die 0.5 größer zu machen. zum beispiel 2.0 oder so...
Posted By: DexLoomer

Re: AI - in Deckung gehen klappt nicht !! - 07/16/07 13:54

Hi Germanunkol,
leider hilft auch das erhöhen des 0.5 Wertes nicht weiter!
Was ich festgestellt habe ist, dass in der zweiten Hälfte der Zeile
... || (vec_dist(my.x, My.move_pos_x) < 20)) es Probleme gibt!
Auch wenn ich die ..<20 erhöhe, scheint die Distanz nie drunter zu kommen.
Als ob der Gegner den Zielpunkt nicht erreicht!
Posted By: Poison

Re: AI - in Deckung gehen klappt nicht !! - 07/16/07 19:16

da hast du dier jetyt etwas schweres aus gesucht habs auch mal probiert es klappt aber der gegner fliegt weg falls er aufsteht in deinem fall kann ich dir sagen warum der gegner ist an dem punkt angelangt aber dabei ist er immer in bewegung und kann den punkt nicht richtig bestimmen deswegen flackert es das ist kein kollision fall es hatt etwas mit der distans vom gegner yu seinem punkt zu tun also lass dir etwas einfallen denn von fehlern wird man um 100 royent schlauer in dieser branche, ich kenn mich aus glaubs mir.
Posted By: DexLoomer

Re: AI - in Deckung gehen klappt nicht !! - 07/16/07 20:38

Yap, ist zum verückt werden!!
Ich hänge nun schon seit Wochen daran, meiner AI Deckungsverhalten beizubringen und nichts klappt! Bin schon drauf und dran alles hinzuschissen...
Ich hab schon sämtliche AUM´s durchsucht, weil ich gehofft hatte, dort einen Anderen CodeSchnipsel zu finden, um die Gegner ausweichen oder Deckung suchen zu lassen. Ich bin halt Grafiker und kein Programmierer
Posted By: DexLoomer

Re: AI - in Deckung gehen klappt nicht !! - 07/16/07 22:22

Wo ich gerade dabei bin...
Ich versuche gerade den Gegner nur ein kleines Stück nach links oder rechts (random!) ausweichen zu lassen. Dabei soll dieser aber immer noch zum Player ausgerichtet bleiben, nur eine seitliche Walk-Anim abspielen.
Im Moment bewegt der Gegner sich immer auf der selben Achse, egal von wo der Player kommt! Weiss jemand wie man so etwas geht??
Code:
  
while (my.action_state == 5)
{ var zufall;
var w_counter = 0;
zufall = int(random(2));
while ( w_counter <= 50 )
{ w_counter += 1;
if (zufall == 0)
{my.y += 3;}
else
{my.y -= 3;}
temp.x = my.x;
temp.y = my.y;
temp.z = my.z;
ent_animate(me, "Run", my.skill46, ANM_CYCLE);
my.skill46 += 10 * time_step;
animation speed
vec_set (temp.x, my.move_pos_x);
vec_sub (temp.x, my.x);
vec_to_angle (my.pan, temp);
my.tilt = 0;
//my.skill53 = 1 * time_step;
my.skill54 = 0;
my.skill55 = 0;
result = c_move (my, my.skill53, nullvector, ignore_passable | glide);
if (result < (0.5 * my.skill53 * time_step))
{ my.action_state = 0; //Position erreicht!!
break;
}
wait (1);
}
my.action_state = 0;
wait(1);
}


Posted By: DexLoomer

Re: AI - in Deckung gehen klappt nicht !! - 07/17/07 11:47

Habe das Problem mit dem Ausweichen nach Links/Rechts gelöst!
Fehlt nur noch ein bischen finetuning!

Code:
  

while (my.action_state == 5)
{
var zufall;
var w_counter = 0;

//check_state(); // Zustand wird überprüft
//if (my.action_state != 5) {break;}

zufall = int(random(2));

while ( w_counter <= 50 )
{
w_counter += 1;

my.speed_x = 0; // Nach Links oder rechts Strafen
my.speed_y = 0;

if(zufall == 0)
{
my.speed_y = 10;
}
else
{
my.speed_y = -10;
}

my.tilt = 0;
if(my.speed_y != 0)
{
c_move(my,
vector(my.speed_x * time,my.speed_y * time,0),
vector(0,0,my.speed_z * time),
ignore_passable + glide);
}
wait(1);

ent_animate(my,"run",my.skill46,ANM_CYCLE);
my.skill46 = (my.skill46 + 6 * time) % 100;

}
my.action_state = 0; //Position erreicht!!

wait(1);
}




Leider hänge ich bei der Sache mit der Deckungssuche, noch immer fest ...
Hat nicht irgend Jemand eine Idee???
© 2024 lite-C Forums