topical media & game development

talk show tell print

actionscript-book-AlgorithmicVisualGenerator-AlgorithmicVisualGenerator.mx

actionscript-book-AlgorithmicVisualGenerator-AlgorithmicVisualGenerator.mx [swf] [flash] flex


  <?xml version="1.0" encoding="utf-8"?>
  <mx:Application
          xmlns:mx="http://www.adobe.com/2006/mxml"
          xmlns:example="*"
          layout="absolute"
          creationComplete="initApp()">
          
          <mx:Script>
                  <![CDATA[
                          import flash.display.Sprite;
                          import flash.display.Shape;
                          import flash.events.Event;
                          import flash.geom.ColorTransform;
                          import flash.display.StageScaleMode;
                          import flash.display.StageAlign;
                          //import com.example.programmingas3.algorithmic.Satellite;
                          
                          private var satellites:Array;
                          private var container:Sprite;
                          private var bg:Shape;
                          private var radius:Number = 50;
                          private var satelliteRadius:Number = 6;
                          private var totalSatellites:Number = 600;                
                          private var visibleSatellites:Number = 100;
                          private var redBias:Number = 0xFF;
                          private var greenBias:Number = 0xFF;
                          private var blueBias:Number = 0xFF;
                          private var useAlphaEffect:Boolean = false;
                          private var stageWidth:Number = 600;
                          private var stageHeight:Number = 400;
                                  
                          public function initApp():void {
                                  radiusSlider.addEventListener(Event.CHANGE,changeSetting);
                                  satelliteRadiusSlider.addEventListener(Event.CHANGE,changeSetting);
                                  visibleSatellitesSlider.addEventListener(Event.CHANGE,changeSetting);
                                  redSlider.addEventListener(Event.CHANGE,changeSetting);
                                  greenSlider.addEventListener(Event.CHANGE,changeSetting);
                                  blueSlider.addEventListener(Event.CHANGE,changeSetting);
          
                                  radiusSlider.minimum = 2;
                                  radiusSlider.maximum = 200;
                                  radiusSlider.value = radius;
                                  satelliteRadiusSlider.minimum = 2;
                                  satelliteRadiusSlider.maximum = 40
                                  satelliteRadiusSlider.value = satelliteRadius;
                                  visibleSatellitesSlider.minimum = 0;
                                  visibleSatellitesSlider.maximum = totalSatellites;
                                  visibleSatellitesSlider.value = visibleSatellites;
                                  redSlider.minimum = 
                                  greenSlider.minimum = 
                                  blueSlider.minimum = 0;
                                  redSlider.maximum = 
                                  greenSlider.maximum = 
                                  blueSlider.maximum = 0xFF;
                                  redSlider.value = redBias;
                                  greenSlider.value = greenBias;
                                  blueSlider.value = blueBias;
                                  
                                  fullScreenBtn.addEventListener(MouseEvent.CLICK, toggleFullScreen);
                                  alphaShadingBtn.addEventListener(MouseEvent.CLICK, toggleAlphaShading);
                                                                  
                                  addEventListener(Event.ADDED_TO_STAGE, setStageListener);
                                  addEventListener(Event.ENTER_FRAME, doEveryFrame);                        
                                  
                                  build();
                          }
                          private function setStageListener(e:Event):void {
                                  stage.scaleMode = StageScaleMode.NO_SCALE;
                                  stage.align = StageAlign.TOP_LEFT;
                                  stage.addEventListener(Event.RESIZE,build);
                          }
                          
                          private function clear():void {
                                  satellites = new Array()
          
                                  if(container) {
                                          drawingArea.removeChild(container);
                                  }
                          }
                          private function build(e:Event = null):void {
                                  clear();
                                  
                                  var drawingAreaMask:Sprite = new Sprite();
                                  drawingAreaMask.graphics.beginFill(0);
                                  drawingAreaMask.graphics.drawRect(0,120,stageWidth,stageHeight);
                                  drawingAreaMask.graphics.endFill();
          
                                  container = new Sprite();
                                  container.y = 120;
                                  container.mask = drawingAreaMask;
                                  drawingArea.addChild(container);
                                  
                                  
                                  bg = new Shape();
                                  bg.graphics.beginFill(0xEEEEEE);
                                  bg.graphics.drawRect(0,0,stageWidth,stageHeight);
                                  container.addChild(bg);
          
                                  var i:uint;
                                  for(i=0; i<totalSatellites; i++) {
                                          var satelliteContainer:Sprite = new Sprite();
                                          satelliteContainer.x = Math.random()*stageWidth;
                                          satelliteContainer.y = Math.random()*stageHeight;
                                          container.addChild(satelliteContainer);
                                          var position:Number = Math.random() * 360;
                                          var color:uint = getRandomColor();
                                          var satellite:actionscript_book_AlgorithmicVisualGenerator_com_example_programmingas3_algorithmic_Satellite = new actionscript_book_AlgorithmicVisualGenerator_com_example_programmingas3_algorithmic_Satellite(position,color);
                                          satelliteContainer.addChild(satellite);
                                          satellites.push(satellite);
                                  }
                          }
                          private function doEveryFrame(e:Event):void {
                                  var i:uint;
                                  for(i=0; i<visibleSatellites; i++) {
                                          var satellite:actionscript_book_AlgorithmicVisualGenerator_com_example_programmingas3_algorithmic_Satellite = satellites[i];
                                          if(satellite) {
                                                  satellite.position += 4;
                                                  satellite.radius = satelliteRadius;
                                                  satellite.orbitRadius = radius;
                                                  satellite.draw(useAlphaEffect);
                                                  satellite.visible = true;
                                          }
                                  }
                                  while(i < totalSatellites) {
                                          var satelliteToHide:actionscript_book_AlgorithmicVisualGenerator_com_example_programmingas3_algorithmic_Satellite = satellites[i];
                                          satelliteToHide.visible = false;
                                          i++
                                  }
                          }
                          private function getRandomColor():uint {
                                  var ct:ColorTransform = new ColorTransform(1,1,1,1,Math.random()*redBias,Math.random()*greenBias,Math.random()*blueBias);
                                  return ct.color;
                          }
                          
                          private function changeSetting(e:Event):void {
                                  switch(e.target) {
                                          case radiusSlider:
                                                  radius = e.target.value;
                                                  break;
                                          case satelliteRadiusSlider:
                                                  satelliteRadius = e.target.value;
                                                  break;
                                          case visibleSatellitesSlider:
                                                  visibleSatellites = e.target.value;
                                                  break;
                                          case redSlider:
                                                  redBias = e.target.value;
                                                  build()
                                                  break;
                                          case greenSlider:
                                                  greenBias = e.target.value;
                                                  build();
                                                  break;
                                          case blueSlider:
                                                  blueBias = e.target.value;
                                                  build()
                                                  break;
                                          default:
                                                  break;
                                  }
                          }
                          private function toggleFullScreen(e:MouseEvent):void {
                                  stage.displayState = stage.displayState == StageDisplayState.FULL_SCREEN ? StageDisplayState.NORMAL : StageDisplayState.FULL_SCREEN;
                          }
                          private function toggleAlphaShading(e:MouseEvent):void {
                                  useAlphaEffect = useAlphaEffect == true ? false : true;
                          }                        
                  ]]>
          </mx:Script>
  
          <mx:UIComponent id="drawingArea" />
  
                  <mx:HSlider x="110" y="60" id="radiusSlider" width="120"/>
                  <mx:HSlider x="110" y="80" id="satelliteRadiusSlider" width="120"/>
                  <mx:HSlider x="110" y="100" id="visibleSatellitesSlider" width="120"/>
                  <mx:HSlider x="240" y="60" id="redSlider" width="120"/>
                  <mx:HSlider x="240" y="80" id="greenSlider" width="120"/>
                  <mx:HSlider x="240" y="100" id="blueSlider" width="120"/>
                  <mx:Text x="10" y="60" text="Orbit Radius"/>
                  <mx:Text x="10" y="78" text="Satellite Radius"/>
                  <mx:Text x="10" y="98" text="Visible Satellites"/>
                  <mx:Text x="360" y="60" text="Red Bias" textAlign="right" width="76"/>
                  <mx:Text x="360" y="78" text="Green Bias" textAlign="right" width="76"/>
                  <mx:Text x="360" y="98" text="Blue Bias" textAlign="right" width="76"/>
                  <mx:Text x="64" y="4" text="Algorithmic Visual Generator Example" fontFamily="Verdana" fontSize="18" textAlign="center"/>
                  <mx:Text x="22" y="31" text="From Programming ActionScript 3.0, Chapter 13: Using the drawing API"/>
                  <mx:Button x="455" y="64" label="Alpha Shading" id="alphaShadingBtn"/>
                  <mx:Button x="463" y="92" label="Full Screen" id="fullScreenBtn"/>                
  
          
  </mx:Application>
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.