forked from: Practice No8 崩れる文字列

by jmbyh521
♥0 | Line 78 | Modified 2015-12-29 17:20:02 | MIT License
play

ActionScript3 source code

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

// forked from NA8's Practice No8 崩れる文字列
package {
    
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.events.Event;
    import flash.filters.BlurFilter;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.text.TextField;
    import flash.text.TextFormat;

    [SWF(width=465,height=465,backgroundColor=0xffffff)]
    
    public class FallParticleText extends Sprite {

        private var b:Bitmap;
        private var bmp:BitmapData;
        private var bmd:BitmapData;
        private var list:Array=new Array;
        private var p_num:uint=0;
        private var filter:BlurFilter = new BlurFilter(2,2,1);

        public function FallParticleText() {
            if(stage){
                addEventListener(Event.ADDED_TO_STAGE,init);
            }else{
                init();
            }
        }
        private function init(e:Event=null):void{
            
            removeEventListener(Event.ADDED_TO_STAGE,init);
            
            var tx:TextField=new TextField();
            tx.autoSize="left";
            tx.defaultTextFormat
                =new TextFormat("_ゴシック"
                                ,80
                                ,0x9966cc
                                ,true);
            tx.text="崩れる文字列";
            var tw:Number=tx.width;
            var th:Number=465;    //tx.height;
            bmp=new BitmapData(tw,465,true,0);
            bmp.draw(tx,null,null,null
                    ,new Rectangle(0,0,int(tw),int(th))
                    ,true);
            b=new Bitmap(bmp,"auto",true);
            addChild(b);
            
            list=new Array();
            for(var i:int=0;i<int(th);i++){
                for(var j:int=0;j<int(tw);j++){
                    var p:Particle = new Particle();
                    p.x = j;
                    p.y = i;
                    //p.vx =0;
                    p.vy =Math.random()*p.y/5;
                    p.color32 = bmp.getPixel32(j,i) & 0xccf5f5f5; // & 0xeeffffff;
                    
                    list.push(p);
                }
            }

            addEventListener(Event.ENTER_FRAME, loop);
        }

        private function loop(e:Event=null):void{

            bmp.applyFilter(bmp,bmp.rect, new Point(0,0),filter);
            var p:Particle;
            bmp.lock();
            var i:uint=0;
            while(i<list.length){
                p=list[i];
                //p.x+=p.vx;
                if(p.y<465){p.y+=p.vy;}
                bmp.setPixel32(p.x, p.y,p.color32); 
                i++;
            }
            bmp.unlock();
        }
    }   
}

class Particle{
    public var x:Number;
    public var y:Number
    public var vx:Number;
    public var vy:Number;
    public var color32:uint;
}