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

Text ParticleEffect

// forked from twistcube's ParticleEffect
////////////////////////////////////////////////////////////////////////////////
//
//  外部画像を1pxごとに表示
//
////////////////////////////////////////////////////////////////////////////////
package
{
    import flash.display.* ;
    import flash.events.* ;
    import flash.filters.ColorMatrixFilter;
    import flash.net.* ;
    import flash.system.* ;
    import flash.utils.getTimer ;
    
    [SWF(width="500", height="500", backgroundColor="0xFFFFFF", frameRate="30")]
    public class ParticleEffect extends Sprite
    {
        private var _loader:Loader ;
        private var _loaderInfo:LoaderInfo ;
        private var _particleList:Array = new Array( ) ;
        private var _bitmapList:ParticleBitmap ;
        private var _startTime:int ;
        
        public function ParticleEffect( )
        {
            init( ) ;
        }
        
        private function init( ):void
        {
            stage.scaleMode = StageScaleMode.NO_SCALE ;
            stage.align = StageAlign.TOP_LEFT ;
            stage.quality = StageQuality.LOW ;
            
            Security.loadPolicyFile( "http://www.twist-cube.com/wonderfl/crossdomain.xml" ) ;
            
            var loaderContext:LoaderContext = new LoaderContext( ) ;
            loaderContext.checkPolicyFile = true ;
            
            _loader = new Loader( ) ;
            _loader.load( new URLRequest( "http://www.twist-cube.com/wonderfl/logo.png" ), loaderContext ) ;
            
            _loaderInfo = _loader.contentLoaderInfo ;
            _loaderInfo.addEventListener( Event.COMPLETE, onLoadComplete ) ;
        }
        
        private function onLoadComplete( event:Event ):void
        {
            _loaderInfo.removeEventListener( Event.COMPLETE, onLoadComplete ) ;
            _bitmapList = new ParticleBitmap( _loader ) ;
            
            var nStartX:Number = Math.floor( ( stage.stageWidth - _loader.width ) / 2 ) ;
            var nStartY:Number = Math.floor( ( stage.stageHeight - _loader.height ) / 2 ) ;
            
            /*
            _loader.x = nStartX ;
            _loader.y = nStartY ;
            
            addChild( _loader ) ;
            
            var grayScale:Array = 
                [
                    1/3, 1/3, 1/3,   0, 0,
                    1/3, 1/3, 1/3,   0, 0,
                    1/3, 1/3, 1/3,   0, 0,
                      0,   0,   0, .05, 0
                ] ;
            
            _loader.filters = [ new ColorMatrixFilter( grayScale ) ] ;
            */
            
            var nLength:uint = _bitmapList.list.length ;
            var bmp:Bitmap ;
            var current:Object ;
            for ( var i:uint = 0; i < nLength; i++ )
            {
                current = _bitmapList.list[ i ] ;
                bmp = current.bitmap ;
                //bmp.alpha = 0 ;
                bmp.x = nStartX + current.x - 5000 * Math.random( ) + 2500 ;
                bmp.y = nStartY + current.y - stage.stageHeight - 5000 * Math.random( ) ;
                addChild( bmp ) ;
                _particleList.push( bmp ) ;
            }
            
            //_particleList.reverse( ) ;
            //_bitmapList.list.reverse( ) ;
            
            _startTime = getTimer( ) ;
            addEventListener( Event.ENTER_FRAME, onRender );
        }
        
        private function onRender( event:Event ):void
        {
            var nStartX:Number = Math.floor( ( stage.stageWidth - _loader.width ) / 2 ) ;
            var nStartY:Number = Math.floor( ( stage.stageHeight - _loader.height ) / 2 ) ;
            var nLength:uint = _particleList.length ;
            var bmp:Bitmap ;
            var current:Object ;
            var now:int = getTimer( ) ;
            var wait:Number ;
            for ( var i:uint = 0; i < nLength; i++ ) 
            {
                current = _bitmapList.list[ i ] ;
                
                // 下から吸着させる
                wait = ( 1 - ( current.y / _loader.height ) ) * 4000 ;
                
                if ( _startTime + wait > now ) continue ; 
                
                bmp = _particleList[ i ] ;
                bmp.x += ( ( nStartX + current.x ) - bmp.x ) * .2 ;
                bmp.y += ( ( nStartY + current.y ) - bmp.y ) * .2 ;
                //bmp.alpha += ( 1 - bmp.alpha ) * .1 ;
            }
        }
    }
}


import flash.display.* ;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Rectangle;

class ParticleBitmap
{
    private var _originImage:DisplayObject ;
    private var _list:Array = new Array( ) ;
    
    public function ParticleBitmap( _originImage:DisplayObject )
    {
        this._originImage = _originImage ;
        init( ) ;
    }
    
    private function init( ):void
    {
        var nW:Number = _originImage.width ;
        var nH:Number = _originImage.height 
        var originBitmapData:BitmapData = new BitmapData( _originImage.width, _originImage.height, true, 0x00FFFFFF ) ;
        originBitmapData.draw( _originImage ) ;
        
        var originBitmap:Bitmap = new Bitmap( originBitmapData ) ;
        
        for ( var i:uint = 0; i < nW; i++ )
        {
            for ( var j:int = 0; j < nH; j++ )
            {
                var color:uint = originBitmapData.getPixel32( i, j ) ;
                if ( color == 0 ) continue ;
                var bmpData:BitmapData = new BitmapData( 1, 1, true, color ) ;
                var bmp:Bitmap = new Bitmap( bmpData ) ;
                _list.push( { bitmap:bmp, x:i, y:j } ) ;
            }
        }
    }
    
    public function get list( ):Array
    {
        return _list ;
    }
    
    public function set list( _list:Array ):void
    {
        this._list = _list ;
    }
}