Ein Objekt bewegen

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°
x = ent_move (VekObj, VekWelt);
xZurückgelegte Strecke
VekObjBewegungsvektor aus Sicht des Objektes
VekWeltBewegungsvektor aus Sicht der Weltkoordinaten

x = c_move(Objekt, VekObj, VekWelt, move_mode);
xZurückgelegte Strecke
ObjektPointer des Objektes
VekObjBewegungsvektor aus Sicht des Objektes
VekWeltBewegungsvektor aus Sicht der Weltkoordinaten
move_modes.h Tabelle unten

x = c_rotate(Objekt, VekWinkel, move_mode);
xwenn <0 = drehung konnte nicht ausgeführt werden
ObjektPointer des Objektes
VekWinkelEuler-Winkel
move_modes.h Tabelle unten