定义一些以后会用到的变量:
private var View:View3D;
// HoverCam controls
private var camera:HoverCamera3D;
private var lastMouseX:Number;
private var lastMouseY:Number;
private var lastPanAngle:Number;
private var lastTiltAngle:Number;
private var move:Boolean = false;
增加一个HoverCamera3D并且设置它为视图要使用的camera:
camera = new HoverCamera3D({zoom:2, focus:100, distance:250});
View = new View3D({camera:camera,x:250, y:200});
设置camera的一些初始属性值:
camera.targetpanangle = camera.panangle = 45;
camera.targettiltangle = camera.tiltangle = 20;
camera.mintiltangle = -90;
启用ENTER_FRAME侦听器:
addEventListener(Event.ENTER_FRAME, onEnterFrame);
启用鼠标按下、释放侦听器:
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
this.stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp);
鼠标按下的时候,需要记录下camera的一些当前参数:
private function MouseDown(event:MouseEvent):void
{
lastPanAngle = camera.targetpanangle;
lastTiltAngle = camera.targettiltangle;
lastMouseX = stage.mouseX;
lastMouseY = stage.mouseY;
move = true;
}
鼠标释放的时候,需要停止渲染场景:
private function MouseUp(event:MouseEvent):void
{
move = false;
}
where 'the magic' happens:重新计算新的camera位置
private function onEnterFrame(e:Event):void
{
// rerender viewport
var cameraSpeed:Number = 0.3; // Approximately same speed as mouse movement.
if (move) {
camera.targetpanangle = cameraSpeed*(stage.mouseX - lastMouseX) + lastPanAngle;
camera.targettiltangle = cameraSpeed*(stage.mouseY - lastMouseY) + lastTiltAngle;
}
camera.hover();
View.render();
}