In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: text in force map

はじめてのフォースマップ
Get Adobe Flash player
by kkstudio2007 16 Mar 2011
// forked from knd's text in force map
// forked from knd's forked from: forked from: forked from: forked from: My first force map
// forked from knd's forked from: forked from: forked from: My first force map
// forked from knd's forked from: forked from: My first force map
// forked from knd's forked from: My first force map
// forked from knd's My first force map
//はじめてのフォースマップ
package 
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    import flash.geom.Rectangle;
     import flash.geom.ColorTransform;
     import flash.geom.Matrix;
    import flash.filters.BlurFilter;
        import flash.text.*;
    
  [SWF(backgroundColor="0x0", frameRate="90")]
    public class  MyFirstForceMap extends Sprite
    {
        private const WH:uint = 465;

        //Force map
        private const fm: BitmapData = new BitmapData(WH, WH);
        /**
         * ピクセルのRGB値から粒子にはたらく力を決めよう。
         * Rはx方向、Gはy方向に、それぞれ作用する力を
         * Bはその場所における動きにくさ、のようなものを。
         * (早く動くほど受ける力が大きくなる)
         */
        private const VERO:Number = 1.0/150.0; //加速度に掛ける正の値
        private const RESI:Number = 1.0/275.0; //抵抗の大きさ0~255に掛ける正の値
                private const BIAS:int = -128;//加速度の補正値
                
        private var ps:Vector.<Point>;//位置ベクトル
        private var vs:Vector.<Point>;//速度ベクトル
        private const N:uint = 20000;//粒子の数
        
        private const dat:BitmapData = new BitmapData(WH, WH, true, 0xff000000);
        private const bmp:Bitmap = new Bitmap(dat);
                
                private var vh:Boolean;
                private var ct: ColorTransform = new ColorTransform(1, 1, 1, 1, -7, -3, -2, 0);
                private function updateFM():void{
                        var txt : TextField = new TextField;
                        txt.autoSize = TextFieldAutoSize.LEFT;
                        var tf: TextFormat = new TextFormat;
                        tf.color = 0x8080f0;
                        tf.bold = true;
                        tf.size = 60;
                        var mat :Matrix;
            var rnd: uint = 100000 * Math.random();
                        if(vh){
            fm.perlinNoise(WH>>2, WH>>2, 7, rnd, true, true, 7);
                        
                       ct = new ColorTransform(1, 1, 1, 1, -8, -6, -2, 0);
                        txt.text = "毛\n竹";
                        txt.setTextFormat(tf);
                        mat = new Matrix(3,0,0,3, WH>>3, 0);
                        fm.draw(txt, mat);
                        }
                        else{
                        fm.perlinNoise(WH>>2, WH>>2, 7, rnd, true, true, 7);
                        
                        ct = new ColorTransform(1, 1, 1, 1, -8, -6, -2, 0);
                        txt.text = "fm3";
                        txt.setTextFormat(tf);
                        mat = new Matrix(3,0,0,3,0, WH>>3);
                        fm.draw(txt, mat);
}                            
                    vh = !vh
                }
        public function MyFirstForceMap() {
            updateFM();
            ps = new Vector.<Point>();
            while (ps.length != N) {
                ps.push(new Point(WH*Math.random(), WH*Math.random()));
            }
            vs = new Vector.<Point>();
            while (vs.length != N) {
                vs.push(new Point());
            }
            addChild(bmp);
                        var i:int;
            var c:int;
            var fr:Number;
            var fg:Number;
            var fb:Number;
            var resist:Number;
                        var p:Point;
                        var v:Point;
                        
                        const p0:Point = new Point;
                        const blur:BlurFilter = new BlurFilter(4,4);
                        
            addEventListener(Event.ENTER_FRAME, function(e:Event):void {
                dat.lock();
                dat.colorTransform(dat.rect, ct);
                for (i = 0; i < N; i++) {
                                        p = ps[i];
                                        v = vs[i];
                                        
                    c = fm.getPixel(p.x, p.y);
                    fr = VERO * Number(int((c >>> 16) & 0xff) + BIAS);
                    fg = VERO * Number(int((c >>> 8) & 0xff) + BIAS);
                    fb = Number(~c & 0xff) * RESI;
                    
                    v.x = fb * (v.x + fr);
                    v.y = fb * (v.y + fg);
                    p.x += v.x;
                    p.y += v.y;
                    if (p.x > WH){ p.x -= WH; }
                                        else if( p.x < 0){ p.x += WH;}
                    else if (p.y > WH)  p.y -= WH; 
                                        else if( p.y < 0)  p.y += WH;
                                        if(dat.getPixel32(p.x,p.y)== 0xffffffff){
                                            p.x = WH*Math.random() ;
                                            p.y = WH*Math.random() ;
                                            v.x = 0;
                                            v.y = 0;
                                        } else 
                        dat.setPixel32(p.x, p.y, 0xffffffff);
                }
                dat.applyFilter(dat, dat.rect, p0, blur);
                dat.unlock();
            });
            stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
                updateFM();
            });
        }

    }
    
}