topical media & game development
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.