package { import away3d.cameras.HoverCamera3D; import away3d.containers.ObjectContainer3D; import away3d.containers.View3D; import away3d.core.math.Number3D; import away3d.core.render.Renderer; import away3d.materials.ColorMaterial; import away3d.primitives.Cube; import away3d.test.Button; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.geom.ColorTransform; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.net.URLRequest; import flash.system.Security; import flash.text.TextField; import flash.ui.Keyboard; import flash.utils.ByteArray; [SWF(backgroundColor="#cccccc", frameRate="30", quality="LOW", width="500", height="375")] public class Away3d_demo2 extends Sprite { private var View : View3D; private var view : View3D; private var group : ObjectContainer3D; private var camera : HoverCamera3D; private var lastKey:uint; private var keyIsDown:Boolean = false; private var cubeColors:Array; private var lastMouseX:Number; private var lastMouseY:Number; private var lastPanAngle:Number; private var lastTiltAngle:Number; private var move:Boolean = false; private var soundBytes:ByteArray; private var soundPlaying:Boolean = false; private var soundValues:Array; private var cubeColumns : Number = 14; private var cubeRows : Number = 20; private var blockWidth:Number = 100; private var blockHeight:Number = 20; private var blockDepth:Number = 100; private var blockGap:Number = 10; private var mp3 : Sound; private var channel : SoundChannel; private var cubesArray : Array; private var redrawingCubes : Boolean; private var addColumn : Button; private var addRow : Button; private var removeColumn : Button; private var removeRow : Button; private var playButton : Button; private var pauseButton : Button; private var text: TextField; private var showMe : Button; public function Away3d_demo2() { showMe = new Button("SHOW ME, SHOW ME, SHOW ME", 240, 20); showMe.x = 100; showMe.y = 120; showMe.addEventListener(MouseEvent.CLICK, showMeHandler); addChild(showMe); } /** *Setup method after registering interest from the user * @param e * */ private function showMeHandler(e:Event):void { removeChild(showMe); Security.allowDomain("*"); text = new TextField(); text.x = 200; text.width = 300; text.selectable = false; addChild(text); removeRow = new Button("row -"); removeRow.addEventListener(MouseEvent.CLICK, mouseClickedHandler); addChild(removeRow); addRow = new Button("row +"); addRow.x = 100; addRow.addEventListener(MouseEvent.CLICK, mouseClickedHandler); addChild(addRow); removeColumn = new Button("col -"); removeColumn.y = 30; removeColumn.addEventListener(MouseEvent.CLICK, mouseClickedHandler); addChild(removeColumn); addColumn = new Button("col +"); addColumn.y = 30; addColumn.x = 100; addColumn.addEventListener(MouseEvent.CLICK, mouseClickedHandler); addChild(addColumn); playButton = new Button("play"); playButton.addEventListener(MouseEvent.CLICK, playSound); playButton.x = 400; addChild(playButton) pauseButton = new Button("stop"); pauseButton.addEventListener(MouseEvent.CLICK, stopSound); pauseButton.x = 400; pauseButton.y = 30; addChild(pauseButton); soundBytes = new ByteArray(); soundValues = new Array(); cubeColors = new Array(); camera = new HoverCamera3D(); view = new View3D({x:250,y:230}); addChild(view); view.camera = camera; view.renderer = Renderer.BASIC; camera.y = 100; // Move camera up camera.z = -1000 camera.x = -200 camera.lookAt( new Number3D(0,0,0)); // Point it toward scene center again, so the target is right (setting y does not change where the camera is pointing) camera.focus = 22; // Create a group and add to scene // setup and load mp3 mp3 = new Sound(); mp3.addEventListener(Event.OPEN, playSound); mp3.addEventListener(IOErrorEvent.IO_ERROR,errorHandler); mp3.load(new URLRequest("http://tomkordys.net/blog/files/assets/mp3/indo.mp3")); // Note: you will have to change this to point to one of your own mp3 files channel = new SoundChannel(); cubesArray = new Array(); drawCubes(); this.stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown); this.stage.addEventListener(KeyboardEvent.KEY_UP,keyUp); this.addEventListener(Event.ENTER_FRAME,update); this.stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown); this.stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp); this.stage.addEventListener(MouseEvent.MOUSE_WHEEL, zoom); } /** * Method that draws the cubes * */ private function drawCubes():void { try { view.scene.removeChild(group); } catch (e:Error) { } group = new ObjectContainer3D(); group.y = 100; view.scene.addChild(group); cubesArray = new Array(); for (var i:int = 0; i0 ) { camera.zoom += 0.2; } else { camera.zoom -= 0.2; } } /** * Zoom with keyboard * */ private function zoomIn():void { camera.zoom += 0.1; } /** * Zoom with keyboard * */ private function zoomOut():void { camera.zoom -= 0.1; } private function keyDown(e:KeyboardEvent):void { lastKey = e.keyCode; keyIsDown = true; } private function keyUp(e:KeyboardEvent):void { keyIsDown = false; } /** * Play sound + do nice camera hovering effect; * @param e * */ private function playSound(e:Event):void { lastPanAngle = camera.targetpanangle = 910; lastTiltAngle = camera.targettiltangle = 10; if(!soundPlaying){ soundPlaying = true; channel = mp3.play(); if( !channel.hasEventListener(Event.SOUND_COMPLETE) ){ channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); } } } /** * Stop sound * @param e * */ private function stopSound(e:Event):void { channel.stop(); soundPlaying = false; } /** *Loop sound * @param e * */ private function soundCompleteHandler(e:Event):void { soundPlaying = false; playSound(e); } private function errorHandler(e:IOErrorEvent):void { text.text = "File not found"; } } }