# 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);
x | Zurückgelegte Strecke
VekObj | Bewegungsvektor aus Sicht des Objektes
VekWelt | Bewegungsvektor aus Sicht der Weltkoordinaten
x = c_move(Objekt, VekObj, VekWelt, move_mode);
x | Zurückgelegte Strecke
Objekt | Pointer des Objektes
VekObj | Bewegungsvektor aus Sicht des Objektes
VekWelt | Bewegungsvektor aus Sicht der Weltkoordinaten
move_mode | s.h Tabelle unten
x = c_rotate(Objekt, VekWinkel, move_mode);
x | wenn <0 = drehung konnte nicht ausgeführt werden
Objekt | Pointer des Objektes
VekWinkel | Euler-Winkel
move_mode | s.h Tabelle unten