Hi Leute,
ich habe ein Problem mit meinem Side-Scroller! Ich will, dass ein generischer Hubschrauber, sich in einem Tunnelsystem entlang eines Pfades bewegt.
Das klappt mit meiner Pathwalk-Funktion auch ganz gut auf der x-Achse, leider nicht entlang der Z-Achse (Y-Achse geht zwar, brauch ich aber nicht!). Die Funktion stammt ursprünglich von einem normalen Pathwalk-Script, bei dem sich der Gegner entlang der X und Y-Achsen bewegt. Ich habe schon sehr viel ausprobiert um den Heli auch zu höher und tiefer gesetzten Knoten zu bewegen, aber ohne Erfolg. Kann mir jemand sagen, wie ich dieses Problem lösen kann?

Code:
 
function pathwalk()
{
// WED-Pfad suchen und Move-Routine ablaufen
my.pnode = path_scan(me,my.x,my.pan,vector(360,180,200)); // find first waypoint
if (my.pnode == 0) { beep();return; } // no path found
path_getnode(my,my.startNode,my.xNode,null);


while (my.pathwalkflag > 0)
{

my.enemy_distance = vec_dist (my.x, player.x); // Ermittle Distanz zwischen Enemy und Player
if (my.enemy_distance < 300) // Ist der Spiele zu nahe, mach weiter mit normaler Steuerung! Beispiel: 300!!!!!!!
{
my.pathwalkflag = 0;
}

// find distance
my.nodeDist = vec_dist(my.xNode,my.x);
// near target? Find next waypoint of the path
if(my.nodeDist < 50)
{
path_getnode(my,my.pnode,my.xNode,path_skills);
//Stand Skill abfragen und warten
if (path_skills[0] != 0)
{
zaehler_warten = path_skills[0];
// rumstehen je nach Skillwert
while (zaehler_warten > 0)
{
my.enemy_distance = vec_dist (my.x, player.x); // Ermittle Distanz zwischen Enemy und Player
if (my.enemy_distance < 300) // Ist der Spiele zu nahe, mach weiter mit normaler Steuerung! Beispiel: 300!!!!!!!
{
my.pathwalkflag = 0;
}
//PLATZHALTER
zaehler_warten -= 0.01;
wait (1);
}
}
my.pnode = path_nextnode(my,my.pnode,1);
path_getnode(my,my.pnode,my.xNode,path_skills);
}
vec_set(my.angPan,nullvector);
my.panFlag = 0;
my.angPan = 0;
vec_diff(my.angPDiff,my.xNode,my.x);
vec_to_angle(my.angPan,my.angPDiff);
my.angDist = ang(my.pan - my.angPan);
if(max(0,int(my.angDist)) > 0)
{ my.panFlag = 1;
my.angPan = (my.angDist * -0.10) * time_step;
}
if(min(int(my.angDist),0) < 0)
{
my.panFlag = 1;
my.angPan = (my.angDist * -0.10) * time_step;
}
if(my.panFlag == 1)
{
c_rotate(me,vector(my.angPan,0,0),ignore_sprites);
}

my.xSpeed = my.moveSpeed * time_step;
my.ySpeed = 0;

// gravity(); //Place the Enemy on Ground!

if ((normal.x != 0) || (normal.y != 0))
{
vec_set(my.normal_pan ,nullvector);
my.normal_pan = -my.pan;
vec_rotate(normal,my.normal_pan);
my.normal_tilt = -asin(normal.x);
my.normal_roll = -asin(normal.y);
}
else
{
my.normal_tilt = 0;
my.normal_roll = 0;
}


// Bewegungswerte umsetzen
my.heli_move_x = my.xSpeed;
my.heli_move_y = my.ySpeed;
my.heli_move_z = my.zSpeed;
heli_bewegunggumsatz();
wait(1);
}
chopter_steuerung(); // Starte normale Steuerung! Position, Neigung, Bewegung usw. umstezen!
}




A8-Com-v 8.47.1