forked from: Happy Christmas!

by savage69kr forked from Happy Christmas! (diff: 80)
fork: http://wonderfl.net/c/mABH

graphics: http://blog.naver.com/dazi88
♥2 | Line 123 | Modified 2011-12-23 23:28:13 | MIT License | (replaced)
play

Related images

ActionScript3 source code

/**
 * Copyright savage69kr ( http://wonderfl.net/user/savage69kr )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/4I7r
 */

// forked from neofatalist's Happy Christmas!
package
{
    import flash.events.*;
    import flash.display.*;
    import flash.net.*;
    import flash.utils.*;
    import flash.system.*;
       
    [SWF(backgroundColor=0x000000,width='465',height='465',frameRate='45')]
    public class Main extends Sprite
    {
        internal var img:Loader;
        internal var flakes:Array;
        internal var snowLayer:Sprite;
        internal var emitTime:int;
        internal var emitter:Timer;
        
        public function Main()
        {
            addEventListener(Event.ADDED_TO_STAGE,__init);
            addEventListener(Event.REMOVED_FROM_STAGE,__dispose)
        }
        internal function __init(_e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE,__init);
            
            addChild(new Bitmap(new BitmapData(stage.stageWidth,stage.stageHeight,false,0x660000)));
            
            addChild(img=new Loader);
            img.contentLoaderInfo.addEventListener(Event.COMPLETE,__init_end);
            img.load(new URLRequest("http://assets.wonderfl.net/images/related_images/c/ca/cada/cada771d91e87fb27d4110e1255f15fba84cb696"),new LoaderContext(true));
        }
        internal function __init_end(_e:Event):void
        {
            flakes=new Array;
            addChild(snowLayer=new Sprite);
            
            emitTime=1;
            emitter=new Timer(emitTime);
            emitter.start();
            emitter.addEventListener(TimerEvent.TIMER,__emit);
        }
        
        internal function __dispose(_e:Event):void
        {
            removeEventListener(Event.REMOVED_FROM_STAGE,__dispose);
            
            for(var i:int=0,j:int=flakes.length;i<j;i++)
                removeChild(flakes[i]);
            flakes=null;
        }
        
        internal function __emit(_e:TimerEvent):void
        {
            if(snowLayer.numChildren-1<400)
            {
                var i:Number=flakes.length;
                snowLayer.addChild(flakes[i]=new particle);
                flakes[i].addEventListener('melted',__emit_melted);
                flakes[i].x=-100+Math.floor(Math.random()*1000);
                flakes[i].z=(Math.random()*900)+550;
                flakes[i].y=-700;
                flakes[i]._id=i;
            }
        }
        internal function __emit_melted(_e:Event):void
        {
            _e.target.removeEventListener('melted',__emit_melted);
            snowLayer.removeChild(_e.target as Sprite);
            
            var idx:int=flakes.indexOf(_e.target);
            if(idx>-1)
                flakes.splice(idx,1);
        }
    }
}


import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.filters.*;
class particle extends Sprite
{
    internal var rect:Sprite=new Sprite;
    internal var onStage:Boolean = false;        
    internal var xVel:Number = (Math.random()*2)-1;
    internal var yVel:Number= 2.5;
    internal var zVel:Number = Math.random()*5 - 2.6;
    internal var fil:BlurFilter = new BlurFilter();
    internal var _id:Number;

    public function particle() {
        addEventListener(Event.ADDED_TO_STAGE, added);
        addEventListener(Event.REMOVED_FROM_STAGE, dispose);            
    }
        
    internal function added(e:Event):void{
        var mat:Matrix= new Matrix();
        var colors:Array = [0xEEEEEE,0xFFFFFF];
        var alphas:Array = [1,0];
        var circRad:Number = 10;
        var ratios:Array = [0,255];            

        mat.createGradientBox(2*circRad, 2*circRad, 0, -circRad, -circRad);
        graphics.lineStyle();
        graphics.beginGradientFill(GradientType.RADIAL,colors,alphas,ratios,mat);
        graphics.drawCircle(0,0,circRad);
        graphics.endFill();
            
        addEventListener(Event.ENTER_FRAME, loop)
        onStage=true;
        cacheAsBitmap = true;
    }
        
    internal function loop(e:Event):void{
        if(y < 650){
            y+=(yVel +(z/900));
            x+=xVel;
            z+=zVel;
                                
            yVel+= .01;
            xVel += (Math.random()*1)-.5;
            zVel += (Math.random()*1) - .5;
            if( y < -800 || x < -500 || x > 1800 || z > 2000 || z < -2000 ){dispatchEvent(new Event("melted"))};
        }else{
            alpha  -= .02;
            if(scaleX < 2) scaleX += .04;
            if(scaleY > .25)scaleY -= .02;                
            if(alpha < 0) {dispatchEvent(new Event("melted"))};
        }   
    }        
        
    internal function dispose(e:Event):void{
            fil = null;
            onStage=false;
            removeEventListener(Event.ENTER_FRAME, loop)
            removeEventListener(Event.ADDED_TO_STAGE, added);
            removeEventListener(Event.REMOVED_FROM_STAGE, dispose);
    }
}