In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: Smooth Green Dynamics Spheres

// forked from jbraccini's Smooth Green Dynamics Spheres
package {

    import flash.display.GradientType;
    import flash.display.Sprite;
    import flash.events.TimerEvent;
    import flash.filters.GlowFilter;
    import flash.geom.Matrix;
    import flash.utils.Timer;
    import flash.display.BlendMode;

    [SWF(backgroundColor="#000000", frameRate=25)]
    public class GradientSphere extends Sprite {
        
        private const AMOUNT:Number = 300;
        private const GRAVITY:Number = .5;
        
        private var _wind:Number = 0;
        private var _windSeed:Number = 0;
        private var _dpoList:Array = [];
        private var _colors:Array = [0xfffffc, 0xe3ff00, 0xa2ff00, 0xffd5f2];
        private var _render:Timer;
        private var _sequencer:Timer;
        
        private var _background:Sprite;

        public function GradientSphere() {
            // write as3 code here..
            init();
        }

        private function init():void {
            
            _render = new Timer(33);
            _render.addEventListener(TimerEvent.TIMER, handleRender);
            
            _sequencer = new Timer(33);
            _sequencer.addEventListener(TimerEvent.TIMER, handleSequence);
            
            drawBackground();
            start();
        }
        
        private function drawBackground():void {
            var matrix:Matrix = new Matrix();
            var backgroundSize:Number = 750;
            matrix.createGradientBox(backgroundSize, backgroundSize, (3 * Math.PI / 2), 0, 10);
            
            _background = new Sprite();
            _background.graphics.beginGradientFill(GradientType.RADIAL, [0xfffffc, 0xa4ce2c, 0x1d9300, 0x003800], [100, 100, 100, 100], [0, 50, 100, 200], matrix);
            _background.graphics.drawRect(0, 0, backgroundSize, backgroundSize);
            
            _background.x = (-_background.width/2) + (stage.stageWidth/2);
            _background.y = (-_background.height/2) + (stage.stageHeight/2);

            addChild(_background);
           }
        
        private function start():void {
            _render.start();
            _sequencer.start();    
        }
        
        private function stop():void {
            _render.stop();
            _sequencer.stop();
           }

        private function getNewGradientSphere(r:Number):Sprite {
            var sphere:Sprite = new Sprite();
            var color:uint = _colors[randRange(0, _colors.length)];
            sphere.graphics.beginGradientFill(GradientType.RADIAL, [color, color], [1,0], [0,r]);
            sphere.graphics.drawCircle(0,0,r);
            
            return sphere;
        }
        
        private function handleRender(e:TimerEvent):void {
            
            var dpo:Object;
            var sphere:Sprite;
            var speed:Number;
            
            _wind = Math.sin(_windSeed++);
            _wind -= GRAVITY;
            
            for(var i:Number = 0; i < _dpoList.length; i++){
                dpo = _dpoList[i];
                sphere = dpo.sphere;
                speed = dpo.speed;
                
                sphere.y += speed;
                sphere.x += dpo.wind;
                
                _dpoList[i] = calculateDynamics(dpo)
                
                if(sphere.y > stage.stageHeight + 200){
                    removeChild(sphere);
                    _dpoList.splice(i, 1);
                }
            }
        }
        
        private function calculateDynamics(dpo:Object):Object {
            dpo.wind += _wind;
            
            return dpo;
        }
        
        private function handleSequence(e:TimerEvent):void {
            if(_dpoList.length < AMOUNT){
                
                var dpo:Object = new Object();
                var speed:Number = randRange(5, 20);
                var radius:Number = randRange(1, 50);
                var sphere:Sprite = getNewGradientSphere(radius);
                
                sphere.x = stage.stageWidth;
                sphere.y = -200;
                sphere.blendMode = BlendMode.ADD;
                sphere.filters = [new GlowFilter(0xe8ff07, 1, 15,15)];
                
                dpo.sphere = sphere;
                dpo.speed = speed;
                dpo.wind = 0;
                
                addChild(sphere);
                 
                _dpoList.push(dpo);
            }
        }
        
        private function randRange(start:Number, end:Number) : Number {
            return Math.floor(start +(Math.random() * (end - start)));
        }


    }
}