flash on 2014-12-16

by mutantleg
♥0 | Line 99 | Modified 2014-12-16 04:40:44 | 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/13wR
 */

package {
    import flash.events.MouseEvent;
    import flash.display.BitmapData;
    import flash.geom.Point;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            vecBlob = new Vector.<xBlob>(0,false);
            
            canvas = new BitmapData(460, 460, false, 0);
            
            
            var dat:BitmapData;
            dat = new BitmapData(128, 128, true, 0);
            dat.noise(2143);
            wx = 128 + 64; wy = 128+64;
            bdExplo(dat, 128, 128, 8,8);

            
            stage.addEventListener(MouseEvent.CLICK, onClick);
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor

        public function onClick(e:MouseEvent):void
        {
            var dat:BitmapData;
            dat = new BitmapData(128, 128, true, 0);
            dat.noise(2143);
            wx = stage.mouseX; wy = stage.mouseY;
            bdExplo(dat, 128, 128, 8,8);
   
        }//onclick

        public var wx:Number = 0;
        public var wy:Number = 0;
        public var pow:Number = 8.0;
        
        public function getMag(ax:Number, ay:Number):Number
        { return Math.sqrt(ax*ax+ay*ay); }

        public function bdExplo(bd:BitmapData,cx:Number,cy:Number, cw:int=16, ch:int=16):void
        {
            var w:int; var h:int;    var i:int; var k:int;
            var a:xBlob; var d:Number;
            
            vecBlob = new Vector.<xBlob>(0,false);
            
            w = bd.width; h = bd.height;
            d = w > h ? w : h;
            
            for (i = 0; i < h; i+=cw)
            {
              for (k = 0; k < w; k+=ch)  
              {
                a = new xBlob();
                a.dat = bd;
                a.rect.x = k; a.rect.y = i;
                a.rect.width = cw; a.rect.height = ch;
                a.cx = cx+k; a.cy = cy+i;
                //a.vx = -2; a.vy = -2;
                var ang:Number; var mag:Number;
                ang = Math.atan2(a.cy-wy, a.cx-wx);
                ang += Math.random()*0.1;
                mag = getMag(a.cy-wy, a.cx-wx);
                mag =  d - mag; if (mag < 0) { mag = 0.1; } mag /=d;
                mag +=0.2;
                mag*= pow;
                a.vx = Math.cos(ang)*mag;
                a.vy = Math.sin(ang)*mag;
                
                vecBlob.push(a);  
              }//nextk
            }//nexti
        }//bdexplo


        
        public var canvas:BitmapData;
        
        public var vecBlob:Vector.<xBlob>;
        
        public var dp:Point = new Point();
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2,0);
            
            canvas.fillRect(canvas.rect, 0);
            
            var i:int; var num:int; var a:xBlob;
            num = vecBlob.length;
            for (i = 0; i < num; i++)
            {
                a = vecBlob[i];
                
                a.vy += 0.09;
                
                if (a.vx >0 && a.cx > 430) { a.vx*=-0.25; }
                if (a.vx <0 && a.cx < 0) { a.vx*=-0.25; }
                if (a.vy >0 && a.cy > 430) { a.vy*=-0.25; a.vy+=Math.random()*0.5; }
                if (a.vy <0 && a.cy < 0) { a.vy*=-0.25; }
                
                a.cx += a.vx; a.cy += a.vy;
                dp.x = a.cx;  dp.y = a.cy;
                canvas.copyPixels(a.dat, a.rect, dp);
                
            }//nexti
            
            graphics.beginBitmapFill(canvas, null,false,false);
            graphics.drawRect(0,0,460,460);
            graphics.endFill();
            
        }//onenter
        
    }//classend
}
import flash.geom.Rectangle;
import flash.display.BitmapData;

internal class xBlob
{
    public var cx:Number = 0;
    public var cy:Number = 0;
    public var vx:Number = 0;
    public var vy:Number = 0;

    public var dat:BitmapData;
    public var rect:Rectangle = new Rectangle();    
    
}//xblob