package { import away3d.cameras.HoverCamera3D; import away3d.containers.View3D; import away3d.core.base.Object3D; import away3d.core.base.Vertex; import away3d.core.math.Number3D; import away3d.primitives.LineSegment; import away3d.primitives.SeaTurtle; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import gs.TweenLite; import gs.easing.Elastic; [SWF(width="500", height="300", frameRate="60", backgroundColor="#FFFFFF")] public class Basic08_linesegment extends Sprite { private var view:View3D; private var cover:Cover; private var cam:HoverCamera3D; private var turtle1:SeaTurtle; private var turtle2:SeaTurtle; private var line:LineSegment; // camera variables private var move:Boolean = false; private var lastPanAngle:Number; private var lastTiltAngle:Number; private var lastMouseX:Number; private var lastMouseY:Number; [Embed(source="resources/seaturtle.jpg")] private var turtleTexture:Class; public function Basic08_linesegment() { cam = new HoverCamera3D({zoom:1, focus:7}); cam.targetpanangle = cam.panangle = 45; cam.targettiltangle = cam.tiltangle = 5; cam.mintiltangle = -90; // create a viewport view = new View3D({x:250,y:150,camera:cam}); addChild(view); view.camera.y = 300; view.camera.zoom = 35; view.camera.lookAt(new Number3D(0,0,0)); // Add a couple turtles and the line we'll connect them with turtle1 = new SeaTurtle({material:turtleTexture,rotationX:-90}); turtle1.scale(0.4); view.scene.addChild(turtle1); turtle2 = new SeaTurtle({material:turtleTexture,rotationX:-90}); turtle2.scale(0.4); view.scene.addChild(turtle2); line = new LineSegment({material:"#red"}); view.scene.addChild(line); // add the cover that prevents the problem with too many SWF files running at once cam.hover(); view.render(); cover = new Cover(this,500,300,"Just hover above this movie to see the turtles tween to random positions"); addChild(cover); // render on enterframe this.addEventListener(Event.ENTER_FRAME,render); stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown); stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp); startTween(); } private function render(e:Event):void { if(!cover.visible) { // reposition line line.start = new Vertex(turtle1.x,turtle1.y,turtle1.z); line.end = new Vertex(turtle2.x,turtle2.y,turtle2.z); // rerender viewport var cameraSpeed:Number = 0.3; // Approximately same speed as mouse movement. if (move) { cam.targetpanangle = cameraSpeed*(stage.mouseX - lastMouseX) + lastPanAngle; cam.targettiltangle = cameraSpeed*(stage.mouseY - lastMouseY) + lastTiltAngle; } cam.hover(); view.render(); } } private function randomTween(obj:Object3D):void { /* var sp:Sphere = new Sphere({material:mat,segmentsW:5, segmentsH:5, radius:10, x:e.sceneX, y:e.sceneY, z:e.sceneZ}); view.scene.addChild(sp); */ var randomX:Number = Math.random()*400-200; var randomY:Number = Math.random()*400-200; var randomZ:Number = Math.random()*1200-600; var randomRot:Number = Math.random()*365; TweenLite.to(obj, 1, {x:randomX,y:randomY,z:randomZ,rotationX:randomRot,rotationY:randomRot,onComplete:startTween,ease:gs.easing.Elastic.easeInOut}); } private function startTween():void { randomTween(turtle1); randomTween(turtle2); } private function MouseDown(event:MouseEvent):void { trace("MouseDown"); lastPanAngle = cam.targetpanangle; lastTiltAngle = cam.targettiltangle; lastMouseX = stage.mouseX; lastMouseY = stage.mouseY; move = true; } private function MouseUp(event:MouseEvent):void { move = false; } } }