Die schnellste, wenn auch nicht die eleganteste Möglichkeit ein Objekt zu bewegen, ist der direkte Zugriff auf die Objektkoordinaten. Gedreht werden kann das Objekt durch direktes Schreiben der objekteigenen Richtungswinkel. Der Nachteil dieser Methode ist, dass hierbei keine Kollisionserkennung statt findet.
Action bewegen
{
while(1)
{
my.x += KEY_FORCE.x;
my.y += KEY_FORCE.y;
my.pan += MICKEY.X;
my.tilt += MICKEY.y;
wait(1);
}
}
Nicht ganz so schnell aber schon mit einer recht groben Kollisionserkennung
ist der "ent_move"-Befehl. Bei dieser Methode wird die Bounding-Box
zur Kollisionserkennung benutzt. Vor dem Aufruf dieses Befehls muss die Variable "move_mode"
gesetzt werden. Bei dieser Methode kann das Objekt auch weiterhin mit dem direkten Schreiben der
objekteigenen Richtungswinkel gedreht werden.
Action bewegen
{
while(1)
{
temp.x = KEY_FORCE.x;
temp.y = KEY_FORCE.y;
move_mode = ignore_passable + glide;
ent_move(temp.x, nullvector);
my.pan += MICKEY.X;
my.tilt += MICKEY.y;
wait(1);
}
}
Die genaueste Methode, aber auch die langsamste, ist die Verwendung des neuen "c_move" Befehls. Hier wird eine poligongenaue Kollisionserkennung durchgeführt. Dies hat zur Folge, dass das Objekt nicht mehr direkt gedreht werden darf. Für Drehungen steht der Befehl "c_rotate" zur Verfügung.
Action bewegen
{
while(1)
{
temp.x = KEY_FORCE.x;
temp.y = KEY_FORCE.y;
temp.z = 0;
move_mode = ignore_passable + glide;
c_move(my, temp.x, nullvector, move_mode);
temp.pan = MICKEY.X;
temp.tilt = MICKEY.y;
temp.roll = 0;
c_rotate(my, temp.pan, move_mode);
wait(1);
}
}
![]() VekObj.y=10 bewegt das Objekt 10 Quants in Richtung 45° VekWelt.y=10 bewegt das Objekt 10 Quants in Richtung 0° |
|