flash on 2010-11-2

by jamasian
♥0 | Line 184 | Modified 2010-11-03 06:27:48 | MIT License
play

ActionScript3 source code

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

/*
      _                           _             
     | |                         (_)            
     | | __ _ _ __ ___   __ _ ___ _  __ _ _ __  
 _   | |/ _` | '_ ` _ \ / _` / __| |/ _` | '_ \ 
| |__| | (_| | | | | | | (_| \__ \ | (_| | | | |
 \____/ \__,_|_| |_| |_|\__,_|___/_|\__,_|_| |_|

Copyright 2010, Kaiyi Chan
*/
package
{
    import flash.geom.Matrix;
    import flash.text.TextField;
    import flash.system.LoaderContext;
    import flash.net.URLRequest;
    
    import flash.events.*;
    import flash.display.*;

    import flash.geom.Point;
    import flash.geom.Rectangle;


public class pixel extends Sprite
{
    /*----------  VARIABLES  ----------*/
    public var bmd:BitmapData;
    public var bm:Bitmap;
    public var debug:TextField;
    public var MOUSEDOWN:Boolean=false;
    
    public var getPixel:Array=new Array();
    public var COLOR:uint    =    Math.random()*0xCCCCCC;
    
    public var loaderA:Loader;
    public var loaderB:Loader;
    public var URL:String;
    
    public var centerX:Number=465/2;
    public var centerY:Number=465/2;

    public var rotateOn:Boolean=false;
    
    public function pixel()
    {
        debug      =    mainframe();
        
        URL        =    "http://www.sydneyobservatory.com.au/blog/wp-content/uploads/2007/06/milky-way-map_atlas-of-the-universe.jpg";
        
        //onManualRun();
        onAutoRun();
    }
    
    private function onManualRun():void
    {
        bmd    =    new BitmapData(465, 465-75, false, 0);
        bm     =    new Bitmap(bmd);
        addChild(bm);
        onRun();
    }

    private function onAutoRun():void
    {
        loaderA = new Loader();
        loaderA.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
        loaderA.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function():void { debug.text="ERROR HAS OCCURED."; } );
        loaderA.load(new URLRequest(URL), new LoaderContext(true));
    }

    
    private function initHandler(event:Event):void
    {    
        loaderB = new Loader();
        loaderB.contentLoaderInfo.addEventListener(Event.INIT, init);
        loaderB.loadBytes(loaderA.contentLoaderInfo.bytes);
    }
    
    private function init(event:Event):void
    {
        var loader:Loader = event.currentTarget.loader;
        
        bmd = new BitmapData(465, 465-75, false, 0x0);
        
        var matrix:Matrix = new Matrix();
        matrix.scale((200/loader.width), ((200)/loader.height));
        matrix.tx=bmd.width/4;
        matrix.ty=bmd.height/4;
        bmd.draw(loader, matrix);
        
        centerX=bmd.width/2.2;
        centerY=bmd.height/2;
        
        if (bm) removeChild(bm);
        bm = new Bitmap(bmd);
        addChild(bm);
        
        loaderA.contentLoaderInfo.removeEventListener(Event.INIT, initHandler);
        loaderB.contentLoaderInfo.removeEventListener(Event.INIT, init);
        onRun();
    }
    
    
    public function onRun():void
    {
        stage.addEventListener(Event.ENTER_FRAME, update);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void {if(e.keyCode==32) { COLOR = Math.random()*0xCCCCCC}});
        stage.addEventListener(MouseEvent.MOUSE_DOWN,  function():void{MOUSEDOWN=true;});
        stage.addEventListener(MouseEvent.MOUSE_UP,    function():void{MOUSEDOWN=false;});
    }

    private function update(e:Event):void
    {
        debug.text    =    "count dots: " + countDots() +"\n"+"colorMode: "+COLOR+"\ncenterX:"+centerX+" centerY: "+centerY;
        if (MOUSEDOWN) { bmd.fillRect(new Rectangle(mouseX-10, mouseY-10, 20, 20),COLOR); }
        
        var amount:int    =    countDots();
        if (amount > 20000) {
            var rx:Number; var ry:Number; var ru:Number;
            
            while (amount>20000)
            {
                rx=Math.random()*stage.width;
                ry=Math.random()*stage.width;
                
                ru=bmd.getPixel(rx, ry);
                if (ru != 0 && ru <=0x300000) {
                    bmd.setPixel(rx, ry, 0);
                    amount--;
                }
            }
        }
        
        if (mouseX > 0 && mouseY > 0)
        {
            centerX=mouseX;
            centerY=mouseY;
        }

        
        if (rotateOn)
        {
            if (Math.random()>.1) rotate(bm, 1, centerX, centerY);
        }
        
        bmd.lock();
        for (var x:int=stage.width; x>=0; x--)
        {
            for (var y:int=stage.height; y>=0; y--)
            {
                if (this.bmd.getPixel(x, y) > 0x300000)
                {
                var posX:Number=x;
                var posY:Number=y;
                
                var rnd:Number = (Math.random()>.5)? Math.random() : -Math.random();
                var vecX:Number = (posX - centerX);
                var vecY:Number = (posY - centerY);
                var r:Number = Math.sqrt( vecX * vecX + vecY * vecY );
                var angle:Number = Math.atan2( vecY, vecX ) * 180 / Math.PI;
                var vecX2:Number = Math.cos( (angle + 2) * Math.PI / 180 ) * r;
                var vecY2:Number = Math.sin( (angle + 2) * Math.PI / 180 ) * r;
                var getX:Number; var getY:Number;
                
                vecX = (vecX2 - vecX);
                vecY = (vecY2 - vecY);
                r = Math.sqrt( vecX * vecX + vecY * vecY );
                
                vecX /= r;
                vecY /= r;
                
                
                posX += (vecX * 1.7 + rnd*2);
                posY += (vecY * 1.7 + rnd*2);
                
                getX=posX; getY=posY;
                
                if (getX > 1 && getY > 1 && getX < stage.width-1 && getY < stage.height-1)
                {
                    if (bmd.getPixel(getX, getY) == 0)
                    {
                        bmd.setPixel(getX, getY, bmd.getPixel(x, y));
                        bmd.setPixel(x, y, 0);
                    }
                }
                }
                
                /*
                //if (bmd.getPixel(x, y) != COLOR) bmd.setPixel(x, y, COLOR);

                var pwr:int = 2;
                var dir:int  = (Math.atan2(mouseY-y, mouseX-x)*180/Math.PI);// + 95;
                
                var angle:int= dir*Math.PI/180;
                var getX:int = x- Math.cos(angle)*pwr;
                var getY:int = y- Math.sin(angle)*pwr;
                
                //getX += (Math.random() > .5)? (Math.random()*pwr) : -(Math.random()*pwr);
                //getY += (Math.random() > .5)? (Math.random()*pwr) : -(Math.random()*pwr);
                getX+=Math.random()*pwr;
                getY+=Math.random()*pwr;
                
                if (getX > 1 && getY > 1 && getX < stage.width-1 && getY < stage.height-1)
                {
                    if (bmd.getPixel(getX, getY) == 0)
                    {
                        bmd.setPixel(getX, getY, bmd.getPixel(x, y));
                        bmd.setPixel(x, y, 0);
                    }
                }
                */
            }
        }
        bmd.unlock();
    }
    
    public function rotate(ob:*, angleDegrees:int, x:int, y:int):void
    {
        var m:Matrix=ob.transform.matrix;
        
        m.tx -= x;
        m.ty -= y;
        m.rotate (angleDegrees*(Math.PI/180));

        m.tx += x;
        m.ty += y;
        ob.transform.matrix=m;
    }
    
    private function countDots():int
    {
        var value:int;
        
        for (var x:int=0; x<=this.bmd.width; x++)
        {
            for (var y:int=this.bmd.height-1; y>=0;--y)
            {
                if (this.bmd.getPixel(x, y) != 0x0)
                {
                    value+=1;
                }
            }
        }
        
        return value;
    }
    
    private function mainframe():TextField
    {
        /*
        creates a textfield for debugging (mainframe).
        */
        var mainframe:TextField = new TextField();
        mainframe.x           =    0;
        mainframe.y           =    390;
        mainframe.width       =    stage.stageWidth;
        mainframe.height      =    75;
        mainframe.textColor   =    0xFFFFFF;
        
        mainframe.background  =    true;
        mainframe.backgroundColor = 0x111111;
        mainframe.borderColor=0xFFFFFF;
        mainframe.border=true;
        mainframe.mouseEnabled=false;
        addChild(mainframe);
        
        return mainframe;
    }
    
    private function _random(_int:int=1):int { return (Math.random()>=.5)? Math.random()*_int : Math.random()*-_int; }
}
}