package { import away3d.cameras.HoverCamera3D; import away3d.cameras.TargetCamera3D; import away3d.containers.View3D; import away3d.core.base.Object3D; import away3d.events.MouseEvent3D; import away3d.primitives.Cone; import away3d.primitives.Cube; import away3d.primitives.Sphere; import flash.display.Sprite; import flash.events.Event; import flash.events.KeyboardEvent; import flash.ui.Keyboard; [SWF(width="500", height="400", frameRate="60", backgroundColor="#FFFFFF")] public class Basic06HoverCamera3D extends Sprite { private var cam:HoverCamera3D; private var lastKey:uint; private var keyIsDown:Boolean = false; private var View:View3D; private var cover:Cover; private var sphere:Sphere; private var cone:Cone; private var cube:Cube; public function Basic06HoverCamera3D() { // create a basic camera cam = new HoverCamera3D(); cam.z = -1000; // make sure it's positioned away from the default 0,0,0 coordinate cam.panangle = 0; cam.tiltangle = 0; cam.targetpanangle = 0; cam.targettiltangle = 0; cam.mintiltangle = -90; // create a viewport View = new View3D({camera:cam,x:250,y:200}); addChild(View); // make some objects and put it on the 3D stage sphere = new Sphere({material:"red#black",radius:50}); View.scene.addChild(sphere); cone = new Cone({material:"green#black", radius:50, height:100, x:-150}); View.scene.addChild(cone); cube = new Cube({material:"blue#black", depth:100, width:100, height:100, x:150}); View.scene.addChild(cube); // add a huge surrounding sphere so we really can see what we're doing var largeSphere:Sphere = new Sphere({radius:1500,material:"yellow#black"}); largeSphere.invertFaces(); View.scene.addChild(largeSphere); cam.hover(); View.render(); // only run when user is above the SWF cover = new Cover(this); addChild(cover); this.stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown); this.stage.addEventListener(KeyboardEvent.KEY_UP,keyUp); this.addEventListener(Event.ENTER_FRAME,onEnterFrame); // Listen for clicks on the objects sphere.addEventListener(MouseEvent3D.MOUSE_DOWN,objectClick); cone.addEventListener(MouseEvent3D.MOUSE_DOWN,objectClick); cube.addEventListener(MouseEvent3D.MOUSE_DOWN,objectClick); } private function onEnterFrame(e:Event):void { if(!cover.visible) { if(keyIsDown){ // if the key is still pressed, just keep on moving switch(lastKey){ case 87 : cam.targettiltangle -= 10; break; case 83 : cam.targettiltangle += 10; break; case 65 : cam.targetpanangle -= 10; break; case 68 : cam.targetpanangle += 10; break; } } // render the view cam.hover(); View.render(); } } private function keyDown(e:KeyboardEvent):void { lastKey = e.keyCode; keyIsDown = true; } private function keyUp(e:KeyboardEvent):void { keyIsDown = false; } private function objectClick(e:MouseEvent3D):void { var obj:Object3D = e.target as Object3D; cam.target = obj; } } }