flash on 2011-2-7

by yama3
♥0 | Line 70 | Modified 2011-02-07 16:52:54 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.*;
    import flash.filters.*;
    import flash.geom.*;
    import flash.utils.*;
    import net.hires.debug.Stats;
    
    [SWF(width="465", height="465", frameRate="60")]
    
    public class FlashTest extends Sprite {
        private static const SIZE:int = 465;
        private var base:BitmapData = new BitmapData(SIZE, SIZE, false, 0);
        private var rot:BitmapData = new BitmapData(SIZE, SIZE, false, 0);
        private var canvas:Bitmap = new Bitmap(base);
        private var mtx:Matrix = new Matrix;
        private var blur:BlurFilter = new BlurFilter;
        private var stats:Stats = new Stats;
        
        public function FlashTest() {
           graphics.beginFill(0);
           graphics.drawRect(0, 0, SIZE, SIZE);
           graphics.endFill();
           addChild(canvas);
           addChild(stats);
           stats.visible = false;
           
           var c:uint;
           var r:Rectangle = new Rectangle(0, 0, 32, 32);
           for(var x:int = 0; x < 5; x++) {
               for(var y:int = 0; y < 5; y++) {
                   c = 1 | x*0x100 | y*0x10000;
                   r.x = 456/4 + x*50;
                   r.y = 456/4 + y*50;
                   base.fillRect(r, c);
               }
           }
           addEventListener("enterFrame", frameHandler);
           stage.addEventListener("click", function(e:*):void {stats.visible = !stats.visible});
        }
        
        private var dst:BitmapData = new BitmapData(SIZE, SIZE, false, 0);
        private function process(src:BitmapData, cx:Number, cy:Number):BitmapData {
            var dst:BitmapData = this.dst;
            mtx.identity();
            mtx.translate(-SIZE*1/512, -SIZE*1/512);
            mtx.translate(cx, cy);
            mtx.scale(257/256, 257/256);
            var cnt:int = 8;
            var tmp:BitmapData;
            src.lock();
            dst.lock();
            while(cnt--) {
                mtx.concat(mtx);
                dst.copyPixels(src, src.rect, src.rect.topLeft);
                dst.draw(src, mtx, null, "add");
                dst.applyFilter(dst, dst.rect, dst.rect.topLeft, blur);
                tmp = src;
                src = dst;
                dst = tmp;
            }
            src.unlock();
            dst.unlock();
            return src;            
        }
        
        private function frameHandler(e:*):void {
            mtx.identity();
            mtx.translate(-SIZE/2, -SIZE/2);
            mtx.rotate(getTimer() / 1000);
            mtx.translate(SIZE/2, SIZE/2);
            rot.fillRect(rot.rect, 0);
            rot.draw(base, mtx);
            canvas.bitmapData = process(rot, 0.5 - mouseX/SIZE, 0.5 - mouseY/SIZE);
        }
    }
}