hier meine variante aus dem 2.5D opensource spacegame:
http://www.opserver.de/wiki/index.php/2.5D_Spaceshooter_V0_1x_-_OpenSource_by_maslone1
function rotate_rel(VECTOR* meentity, VECTOR* youentity, ANGLE* youangle, VECTOR* distanz)
{
vec_set(meentity.x, distanz);
vec_rotate(meentity.x, youangle.pan);
vec_add(meentity.x, youentity.x);
// rotate_rel(testpos.x, ent_ShipDummie.x, ent_ShipDummie.pan, vector(50, 100, 100));
// Beispiel
}
function Cam1()
{
var cam_goal_dist = -40; //Variable for the camera-distance
camera.x = Ships[1].x; //the x and y position is always the player x and y position
camera.y = Ships[1].y;
camera.z = Ships[1].z;
while(1){
rotate_rel(camera.x, Ships[1].x, Ships[1].pan, vector(cam_goal_dist,0,0));
if(key_u != 0) { cam_goal_dist += 2*time_step; }
if(key_i != 0) { cam_goal_dist -= 2*time_step; }
camera.tilt= 0;
camera.roll= 0;
camera.pan = Ships[1].pan;
wait(1);
}
}
Die relative Poistion zu einer Ziel-Entity änderst du unter der funktion rotate_rel(camera.x, Ships[1].x, Ships[1].pan, vector(cam_goal_dist,0,0));
unter vector(cam_goal_dist "X", 0 "Y",0 "Z")
(unter "" angeführten achsen sind zur änderung der relativen position da)
Der große Vorteil hier..... kann mich aber irren,
du kannst sehr einfach die kamera in echtzeit verschieben und in andere richtungen drehen. Die Verwendbarkeit ist also recht groß. Einer der Gründe warum ich es so geschrieben habe.....
aber möglich dass es noch viel bessere und schnellere lösungen gibt.