2 registered members (AndrewAMD, Imhotep),
567
guests, and 4
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Wegfindung per WED Pfade
#402741
06/09/12 18:40
06/09/12 18:40
|
Joined: Apr 2006
Posts: 273 Germany, NRW
Meerkat
OP
Member
|
OP
Member
Joined: Apr 2006
Posts: 273
Germany, NRW
|
Hallo liebe Community, ich bin mir nicht sicher ob ich einen Bug gefunden habe oder aber es einfach nur einen dicken Logikfehler habe im Code. Und zwar möchte ich mit diesem Code das eine Entity einem mit WED gesetzten Pfad folgt. Hier ist der Code:
VECTOR Temp_var;
var AIReichweite;
action GegnerAI()
{
while(!player){wait(1);} //warte bis Spieler da ist!
my.skill4 = 1; //Aktueller Wegpunkt!
path_set(my, "path_000");
path_getnode(my,my.skill4,Temp_var,NULL);
while(1)
{
my.skill3 = c_trace(my.x,Temp_var, IGNORE_ME | USE_POLYGON);
AIReichweite = my.skill3; //Globale Variable um zu sehen ob die Reichweitenmessung funktioniert!
if(my.skill3 > 30) //skill3 = Reichweite bis zum nächsten Wegpunkt!
{
path_getnode(my,my.skill4,Temp_var,NULL);
vec_sub(Temp_var, my.x);
vec_to_angle(my.pan,Temp_var);
c_move(my, vector(3*time_step,0,0), nullvector, GLIDE);
}
else
{
my.skill4 += 1; //Wenn Wegpunkt erreicht, setze nächsten!
}
wait(1);
}
return;
}
Ich warte erstmal mit der AI bis der Spieler im Level erstellt worden ist. Dann setz ich mit Skill4 den anzupeilenden Wegpunkt. Mit Path_Set setze ich die AI auf eine Route von WED und sage mit Path_Getnode das ich die erste Position von der Node in dem vordefinierten Vector gespeichert haben will. Per C_Trace möchte ich dann prüfen wie weit die AI vom Wegpunkt entfernt ist damit ich damit bestimmen kann ab welcher Entfernung auf den nächsten Wegpunkt umgesprungen wird. Das ist meine Theorie und in der Praxis sollte das auch funktionieren. Ich habe jedoch die Feststellung gemacht das sich die AI keinen Meter bewegt. Der Tracewert ist "0"! Lasse ich jedoch eine Temporäre Entity an der Nodeposition erscheinen und lasse diese antracen, dann funktioniert die Reichweitenmessung. Warum ist das so? Ist das ein Bug oder mache ich wie gesagt einen Fehler? Immerhin denke ich das in Temp_var ja die Position von der ersten Node gespeichert ist und das antracebar sein sollte. Ich arbeite derzeit wieder mit der A7. Wenn da jemand eine Lösung weiss oder was ich halt falsch mach, bitte gebt mir einen Ratschlag bzw. Tip. MfG Meerkat Laru
http://www.gpi-studios.comOS: Windows 7 Home Premium (64 Bit Version) AMD Athlon 64 X2 Dual Core Processor 5200+ 6gb DDR 2 - RAM NVIDIA GeForce GTX 460 GameStudio Version A8 Commercial
|
|
|
Re: Wegfindung per WED Pfade
[Re: Meerkat]
#402748
06/09/12 19:12
06/09/12 19:12
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Per C_Trace möchte ich dann prüfen wie weit die AI vom Wegpunkt entfernt ist damit ich damit bestimmen kann ab welcher Entfernung auf den nächsten Wegpunkt umgesprungen wird. Das ist meine Theorie und in der Praxis sollte das auch funktionieren. Das ist leider eine schlechte und sehr langsame Lösung, benutze doch einfach vec_dist(), um Distanzen zu bestimmen. Wie du dem Manual entnehmen kannst, liefert c_trace nur dann einen Wert größer 0 zurück, wenn etwas getroffen worden ist. Sonst ist der Rückgabewert 0. EDIT: Übrigens, wenn du nah genug am Ziel bist und den Node-Skill erhöhst, musst du natürlich auch deinen Ziel-Vektor (temp_var) neu setzen.
Last edited by Superku; 06/09/12 19:13.
"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual Check out my new game: Pogostuck: Rage With Your Friends
|
|
|
Re: Wegfindung per WED Pfade
[Re: Superku]
#402750
06/09/12 19:49
06/09/12 19:49
|
Joined: Apr 2006
Posts: 273 Germany, NRW
Meerkat
OP
Member
|
OP
Member
Joined: Apr 2006
Posts: 273
Germany, NRW
|
Ah ok, danke. Werd ich nachher mal probieren. Ich bin neu im Gebiet des Pathfinding. ^^ Edit: Templates will ich nicht benutzen da ich es von Grund auf neu lernen möchte damit ich es besser verstehe. Edit2: Okay ich bin verwirrt. Auf der 1. Hälfte der Strecke zählt er normal runter, ab der 2. Hälfte zählt er wieder hoch??? Und dabei erreicht er nichtmal die "0" sondern schnellt bei ca. 320 wieder hoch. Wasn das? Heißt ergo ich kann immer noch nicht prüfen wann er den Wegpunkt erreicht. Dabei mache ich das schon mit "my.skill3 = vec_dist(Temp_var, my.x);". ^^ Letzter Edit: Ich hab es ans laufen bekommen. Gott was bin ich happy. ^^
Last edited by Meerkat; 06/09/12 21:10.
http://www.gpi-studios.comOS: Windows 7 Home Premium (64 Bit Version) AMD Athlon 64 X2 Dual Core Processor 5200+ 6gb DDR 2 - RAM NVIDIA GeForce GTX 460 GameStudio Version A8 Commercial
|
|
|
|