|
Re: Pfad-Verfolgung
[Re: Flo]
#109377
01/26/07 22:57
01/26/07 22:57
|
Joined: Oct 2004
Posts: 262 Augsburg,Bayern
ARAS
Member
|
Member
Joined: Oct 2004
Posts: 262
Augsburg,Bayern
|
Hi, im Handbuch gibt es folgenden Path Code. Du musst dann Deiner Entity noch die Aktion "walk_path" zuweisen. Einfache Funktionen für die Bewegung und die Drehung schreibe ich Dir hier einmal auf. Überprüfe noch einmal die Skill´s die ich zugewiesen haben, das sie bei Dir nicht schon in Verwendung sind. Code:
define direction_pan,skill32; define direction_tilt,skill33; define direction_roll,skill34; define rel_speed,skill35; define rel_speed_x,skill36; define rel_speed_y,skill37; define _TARGET_X,skill38; define _TARGET_Y,skill39; define _TARGET_Z,skill40; var force[3]; var aforce[3]; var my_angle[3]; var force;
function actor2_move() { my.rel_speed_x = time * 10; // Geschwindigkeit den Bedürfnissen anpassen my.rel_speed_y = 0; my.rel_speed_z = 0; move_mode = ignore_passable + glide; ent_move(my.rel_speed_x,nullvector); }
function actor2_turn() { temp = ang(my_angle.pan - my.pan); if(temp > 5) { aforce.pan = force; } else { if(temp < -5) { aforce.pan = -force; } else { aforce.pan = force * temp * 0.25; } } temp = ang(my_angle.tilt - my.tilt); if(temp > 5) { aforce.tilt = force; } else { if(temp < -5) { aforce.tilt = -force; } else { aforce.tilt = force * temp * 0.25; } } temp = min(time*ang_fric,1); my.direction_pan += (time * aforce.pan) - (temp * my.direction_pan); my.pan += my.direction_pan * time; my.direction_tilt += (time * aforce.tilt) - (temp * my.direction_tilt); my.tilt += my.direction_tilt * time; }
action walk_path // lass die Entity einen Rundweg folgen { temp.pan = 360; // finde den Pfad und hänge ihn an die Entity temp.tilt = 180; temp.z = 1000; result = scan_path(my.x,temp); if (result == 0) { return; } // kein Path gefunden ent_waypoint(my._TARGET_X,1); // speichere ersten Wegpunkt while (1) { temp.x = my._TARGET_X - my.x; // finde die Richtung zum Wegpunkt temp.y = my._TARGET_Y - my.y; temp.z = 0; result = vec_to_angle(my_angle,temp); // in Zielnähe? Dann finde den nächsten Wegpunkt if (result < 25) { ent_nextpoint(my._TARGET_X); } // wende und gehe Richtung Ziel force = my._FORCE; actor2_turn(); // wende dich dem Wegpunkt zu actor2_move(); // geh geradeaus wait(1); }
}
Ich hoffe es sind keine Fehler in den Skripten. Habe sie nicht getestet. Wenn doch bitte wieder melden.
|
|
|
Re: Pfad-Verfolgung
[Re: ARAS]
#109378
01/27/07 07:57
01/27/07 07:57
|
Joined: Dec 2006
Posts: 46 Germany
Flo
OP
Newbie
|
OP
Newbie
Joined: Dec 2006
Posts: 46
Germany
|
Danke für das Script... Ich hab es in eine neue wdl-Datei gemacht und mit "include..." im Main-Script eingebunden... Doch irgendwie will es nicht funktionieren  Ich erhalte immer beim Starten folgende Fehler: Gruß Flo
|
|
|
Re: Pfad-Verfolgung
[Re: Flo]
#109379
01/27/07 14:28
01/27/07 14:28
|
Joined: Oct 2004
Posts: 262 Augsburg,Bayern
ARAS
Member
|
Member
Joined: Oct 2004
Posts: 262
Augsburg,Bayern
|
Hallo Flo,
ich habe ein paar Definitionen vergessen. Kommt davon wenn man das Skript nicht probiert. Also ich gebe Dir hier noch einmal die Definitionen und Variablen an. Einfach die alten ersetzen.
define direction_pan,skill32; define direction_tilt,skill33; define direction_roll,skill34; define rel_speed,skill35; define rel_speed_x,skill35; define rel_speed_y,skill36; define rel_speed_z,skill37; define _TARGET_X,skill38; define _TARGET_Y,skill39; define _TARGET_Z,skill40; define _force,skill41;
var force[3]; var aforce[3]; var my_angle[3]; var force; var ang_fric = 0.6;
Schreibe bitte auch noch am Anfang der Aktion "walk_path" also vor der Zeile "temp.pan = 360;" noch die Zeile "my._FORCE = 2; // Geschwindigkeit der Drehung des Vogels"
Sollte der Vogel zu langsam oder schnell fliegen, einfache die Zahl 10 in folgender Zeile erhöhen oder verringern.
"my.rel_speed_x = time * 10;"
|
|
|
Re: Pfad-Verfolgung
[Re: Flo]
#109381
01/28/07 17:11
01/28/07 17:11
|
Joined: Oct 2004
Posts: 262 Augsburg,Bayern
ARAS
Member
|
Member
Joined: Oct 2004
Posts: 262
Augsburg,Bayern
|
Hallo Flo, Du musst eine neue Definition und neue Animationszeilen im Skript angeben. Code:
define anim_perc,skill41;
action walk_path // lass die Entity einen Rundweg folgen { temp.pan = 360; // finde den Pfad und hänge ihn an die Entity temp.tilt = 180; temp.z = 1000; result = scan_path(my.x,temp); if (result == 0) { return; } // kein Path gefunden ent_waypoint(my._TARGET_X,1); // speichere ersten Wegpunkt while (1) { ent_cycle("fly", my.anim_perc % 100); // Hier den Animationsframe angeben my.anim_perc += 2 * time; // Hier die Geschwindigkeit der Animation ändern
temp.x = my._TARGET_X - my.x; // finde die Richtung zum Wegpunkt temp.y = my._TARGET_Y - my.y; temp.z = 0; result = vec_to_angle(my_angle,temp); // in Zielnähe? Dann finde den nächsten Wegpunkt if (result < 25) { ent_nextpoint(my._TARGET_X); } // wende und gehe Richtung Ziel force = my._FORCE; actor2_turn(); // wende dich dem Wegpunkt zu actor2_move(); // geh geradeaus wait(1); }
} In der Zeile mit dem Animationsframe musst Du statt "fly" Deinen Framenamen angeben.
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|