定义一些以后会用到的变量:
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(); }