flash on 2015-1-25

by mutantleg
♥0 | Line 79 | Modified 2015-01-25 04:24:18 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.BlendMode;
    import flash.geom.ColorTransform;
    import flash.geom.Matrix;
    import flash.events.Event;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            skin = new BitmapData(64,64, true, 0);
            var ax:Number; var ay:Number;
            ax = skin.width*0.5;
            ay = skin.height*0.5;
            var i:int; var k:int;
            var w:int; var h:int; 
            var c:uint; var n:int; var a:int;
            var m:Number; var d:Number; 
            d = skin.width*0.5;
            w= skin.width; h = skin.height;
            for (i = 0; i < h; i++)
            for (k = 0; k < w;k++)
            {
              m = 1 - (getMag(ax-k,ay-i) /d);
              n = m * 255; if (n > 255) {n = 255;} if (n < 4) { n = 0; }
              //a = n *4; if (a > 255) {a=255;}
              c = (n<<24) | (n<<16)|(n<<8)|n;
             // c = 0x880000F0;    if (n < 8) { c = 0x0; }
              skin.setPixel32(k,i, c); 
                
            }//nextk
            
            graphics.beginBitmapFill(skin,null);
            graphics.drawRect(0,0,465,465);
            graphics.endFill();
            
            back = new BitmapData(128,128, false, 0);
            back.perlinNoise(5,12,5,2,true,true,7,true);
            
            dark = new BitmapData(465,465, true,0);
            canvas = new BitmapData(465,465,false, 0);
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public function getMag(ax:Number, ay:Number):Number
        { return Math.sqrt(ax*ax+ay*ay); }
        
        public var skin:BitmapData;
        
        public var canvas:BitmapData;
        public var dark:BitmapData;
        
        public var back:BitmapData;
        
        public var ct:ColorTransform = new ColorTransform();
        
        public var gt:int;
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            
            gt +=1;
            
            canvas.fillRect(canvas.rect, 0xFF);
            drawSprite(canvas,back,230,230,0,false,false,4,4);
            dark.fillRect(dark.rect, 0xFF000000);
            
            var blend:String;
            blend = BlendMode.ADD;
            //blend = BlendMode.HARDLIGHT;
            //blend = BlendMode.SCREEN;
            //blend = BlendMode.LIGHTEN;
           // blend = BlendMode.NORMAL;
           // blend = BlendMode.DIFFERENCE;
           
         //   ct.blueMultiplier = 1; ct.greenMultiplier = 1; ct.redMultiplier = 1;

            ct.blueMultiplier=0.3; ct.redMultiplier = 0.1;  ct.greenMultiplier = 1; ct.alphaMultiplier=0.5;   
            drawSprite(dark, skin, 230,230, gt*0.01, false,false,8+Math.sin(gt*0.03),8+Math.sin(gt*0.03),blend,ct);
            
            ct.blueMultiplier=0.1;ct.greenMultiplier=0.5;   ct.redMultiplier = 1;  ct.alphaMultiplier=1;     
            drawSprite(dark, skin, stage.mouseX, stage.mouseY, 0.7, false,false,7,7,blend,ct);
 
            canvas.draw(dark,null, null, BlendMode.MULTIPLY);            
            
            graphics.beginBitmapFill(canvas, null, false,false);
             graphics.drawRect(0,0,465,465);
            graphics.endFill();
            
            
        }//onenter
     
        public var mirMat:Matrix = new Matrix();   
        public function drawSprite(to:BitmapData, spr:BitmapData, ax:Number, ay:Number,
        ang:Number=0, xmir:Boolean=false,ymir:Boolean=false, 
        scalex:Number=1.0, scaley:Number=1.0, blend:String = null, trans:ColorTransform=null):void
         {
              var aw:Number;        var ah:Number;         var rad:Number;
              rad = spr.width > spr.height ? spr.width : spr.height;     
              if (to.width < ax - rad) { return; }        if (to.height < ay - rad) { return; }
              if (0 > ax + rad) { return; }        if (0 > ay + rad) { return; }
              aw = spr.width * 0.5;        ah = spr.height * 0.5;      
              mirMat.identity();   mirMat.tx = -aw; mirMat.ty = -ah;
              //fix (should mirror before rotate -- (how this affects xy scale?) (seems to be ok)
              mirMat.scale(xmir? -scalex:scalex, ymir? -scaley:scaley );          mirMat.rotate(ang);        
              mirMat.translate( ax, ay );  
              to.draw(spr, mirMat, trans, blend, null, false); 
         }//drawsprite2

    }//classend
}