forked from: perlinNoise遊び4 錯覚。雨が降っているかのように見える

by bradsedito forked from perlinNoise遊び4 錯覚。雨が降っているかのように見える (diff: 1)
円はグラデーション使ってません。
円の中は全て同じ色です。

クリックすると一時停止します。
リロードすればノイズのパターンは変化します。
♥0 | Line 63 | Modified 2012-04-20 16:36:58 | MIT License
play

ActionScript3 source code

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

// forked from cpu_t's perlinNoise遊び4 錯覚。雨が降っているかのように見える
// 円はグラデーション使ってません。
// 円の中は全て同じ色です。
// 
// クリックすると一時停止します。
// リロードすればノイズのパターンは変化します。
// 
package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    public class FlashTest extends Sprite
    {
        private var bmpdata:BitmapData;
        private var sp:Sprite;
        public function FlashTest()
        {
            bmpdata = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0);
            addChild(new Bitmap(bmpdata));
            
            reset();
            
            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void
            {
                isStop = !isStop;
            });
        }
        private var isStop:Boolean = false;
        
        private function reset():void
        {
            bmpdata.perlinNoise(bmpdata.width*.5, bmpdata.height*.5, 1, Math.random() * 0xFFFFFF, false, false);
            addChild(sp = new Sprite());
        }
        
        private var array:Array = new Array();
        private var lifetime:Number = 20;
        private function enterFrameHandler(e:Event):void
        {
            if (isStop) return;
            for (var c:int = 0; c < 3; c++)
            addCrcl()
            
            for (var i:int = 0; i < array.length; i++)
            {
                var obj:Object = array[i];
                obj.sp.scaleX = obj.sp.scaleY = ++obj.life / lifetime;
                if (obj.life >= lifetime)
                {
                    sp.removeChild(obj.sp);
                    array.splice(i--, 1);
                }
            }
        }
        
        private function addCrcl():void
        {
            var crcl:Sprite = new Sprite();
            sp.addChild(crcl);
            var x:int = Math.random() * bmpdata.width;
            var y:int = Math.random() * bmpdata.height;
            crcl.x = x;
            crcl.y = y;
            crcl.scaleX = crcl.scaleY = 0;
            
            crcl.graphics.beginFill(bmpdata.getPixel(x, y));
            crcl.graphics.drawCircle(0, 0, 20);
            
            array.push({
                sp:crcl,
                life:0
            });
        }
    }
}