nur bei interesse - ich verwende folgenden code für eine frei-drehbare und zoombare camerasteuerung mit kollision:
Code:
define _camera_dist_max, 512;
define _camera_dist_min, 64;
var camera_dist = _camera_dist_max;
function camera_collision
{
var camera_dist_traced;
trace_mode = ignore_me + ignore_models + ignore_passable + use_box;
camera_dist_traced = trace(player.x, camera.x);
if(camera_dist_traced != 0)
{
//camera_dist_traced += 24;
camera.x = player.x - camera_dist_traced * cos(camera.pan) * cos(camera.tilt);
camera.y = player.y - camera_dist_traced * sin(camera.pan) * cos(camera.tilt);
camera.z = player.z - camera_dist_traced * sin(camera.tilt) + _eye_hight;
}
}
function camera_move
{
var camera_dist_to;
camera.tilt = -15;
while(1)
{
while(game_freeze){wait(1);}
if(mouse_mode == 0)
{
camera.pan -= 50 * mouse_force.x * time;
camera.tilt = min(max(ang(camera.tilt + 50 * mouse_force.y * time),-60),-10);
}else{
if(mouse_pos.x > screen_size.x - 10){camera.pan -= 5 * time;}
if(mouse_pos.x < 10) {camera.pan += 5 * time;}
if(mouse_pos.y > screen_size.y - 10){camera.tilt = min(max(ang(camera.tilt - 5 * time),-90),15);}
if(mouse_pos.y < 10) {camera.tilt = min(max(ang(camera.tilt + 5 * time),-90),15);}
}
camera_dist = min(max(camera_dist - 4 * mickey.z * time,_camera_dist_min),_camera_dist_max);
camera_dist_to += 0.2 * (camera_dist - camera_dist_to) * time;
camera.x = player.x - camera_dist_to * cos(camera.pan) * cos(camera.tilt);
camera.y = player.y - camera_dist_to * sin(camera.pan) * cos(camera.tilt);
camera.z = player.z - camera_dist_to * sin(camera.tilt) + _eye_hight;
camera_collision();
wait(1);
}
}