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

ローディングのくるくるアニメーションを生成するクラス

ローディングのくるくるアニメーションを生成するクラス
http://github.com/kjkmr/KIMULABOAS3/blob/master/src/jp/kimulabo/display/LoadingCircle.as
/**
 * Copyright kjkmr ( http://wonderfl.net/user/kjkmr )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/mWrO
 */

package {
    /*
    
    ローディングのくるくるアニメーションを生成するクラス
    http://github.com/kjkmr/KIMULABOAS3/blob/master/src/jp/kimulabo/display/LoadingCircle.as
    
    */
    import flash.display.Sprite;
    public class LoadingAnimation extends Sprite {
        public function LoadingAnimation() {
            
            stage.scaleMode = "noScale";            
            
            //デフォルト設定(直径30ピクセル、グレー)
            var l1:LoadingCircle = new LoadingCircle();
            l1.x = 240;
            l1.y = 110;
            addChild( l1 );
            
            //青色、直径30ピクセルで、バーの長さが半径に対して0.6
            var l2:LoadingCircle = new LoadingCircle( 0x5390CD, 30, 0.6 );
            l2.x = 330;
            l2.y = 110;
            addChild( l2 );
            
            //水色、直径30ピクセルで、バーの長さが半径に対して0.3
            var l3:LoadingCircle = new LoadingCircle( 0x4CBFDD, 30, 0.3  );
            l3.x = 420;
            l3.y = 110;
            addChild( l3 );
            
            //青緑色、直径30ピクセルで、バーの長さが半径に対して0.3、バーの太さがバーの長さに対して0.5
            var l4:LoadingCircle = new LoadingCircle( 0x34B7AF, 30, 0.3, 0.5 );
            l4.x = 240;
            l4.y = 190;
            addChild( l4 );
            
            //緑色、直径30ピクセルで、バーの長さが半径に対して0.3、バーの太さがバーの長さに対して1
            var l5:LoadingCircle = new LoadingCircle( 0x8FC31F, 30, 0.3, 1 );
            l5.x = 330;
            l5.y = 190;
            addChild( l5 );
            
            //黄色、直径30ピクセルで、バーの長さが半径に対して0.2、バーの太さがバーの長さに対して1、
            //バーの本数が8、スピードがフレームレートに対して0.25
            var l6:LoadingCircle = new LoadingCircle( 0xFABE00, 30, 0.2, 1, 8, 0.25 );
            l6.x = 420;
            l6.y = 190;
            addChild( l6 );
            
            //オレンジ色、直径30ピクセルで、バーの長さが半径に対して0.2、バーの太さがバーの長さに対して1、
            //バーの本数6、スピードがフレームレートに対して0.25
            var l7:LoadingCircle = new LoadingCircle( 0xEF7A00, 30, 0.2, 1, 6, 0.25 );
            l7.x = 240;
            l7.y = 270;
            addChild( l7 );
            
            //ピンク色、直径30ピクセルで、バーの長さが半径に対して0.2、バーの太さがバーの長さに対して1、
            //バーの本数16
            var l8:LoadingCircle = new LoadingCircle( 0xEC7FAF, 30, 0.2, 1, 16 );
            l8.x = 330;
            l8.y = 270;
            addChild( l8 );
            
            
            //薄いグレー、直径30ピクセルで、バーの長さが半径に対して1、バーの太さがバーの長さに対して0.15、
            //バーの本数16
            var l9:LoadingCircle = new LoadingCircle( 0xd0d0d0, 30, 1, 0.15, 16 );
            l9.x = 420;
            l9.y = 270;
            addChild( l9 );
            
            //黒色、直径125ピクセルで、バーの長さが半径に対して0.45、バーの太さがバーの長さに対して0.15
            var l0:LoadingCircle = new LoadingCircle( 0, 195, 0.45, 0.15 );
            l0.x = 75;
            l0.y = 190;
            addChild( l0 );
            
        }
    }
}
    
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.display.Graphics;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.events.Event;
    
    /*--------------------------------------------------
    * ローディングの円を描画するクラス
    --------------------------------------------------*/
    class LoadingCircle extends Sprite {
        
        /*--------------------------------------------------
        * プロパティ
        --------------------------------------------------*/
        private var _index:Number = 0;
        private var _bitmaps:Array = [];
        private var _speed:Number = 0.5;
        private var _bitmap:Bitmap = new Bitmap();
        
        /*--------------------------------------------------
        * コンストラクタ
        *
        * i_color:uint    色
        * i_size:uint    直径
        * i_barLength    半径に対するバーの長さ
        * i_barWidth    バーの長さに対するバーの幅
        * i_steps        バーの本数
        * i_speed        フレームレートに対するスピード( 1だと1フレーム毎にコマが進み、0.5だと2フレーム毎にコマが進む)
        * i_minAlpha    最も色が薄くなるalpha値
        *
        --------------------------------------------------*/
        public function LoadingCircle( i_color:uint = 0x999999, i_size:uint = 30, i_barLength:Number = 0.5, i_barWidth:Number = 0.3, i_steps:uint = 12, i_speed:Number = 0.5, i_minAlpha:Number = 0.25 ) {
            
            _speed = i_speed;
            
            
            //棒の幅、長さを計算
            var barLength:int = i_size * i_barLength * 0.5 >> 0;
            if ( barLength < 1 ) barLength = 1;
            var barWidth:int = barLength * i_barWidth >> 0;
            if ( barWidth < 1 ) barWidth = 1;
            
            //ひとつ分の棒作成
            var s:Shape = new Shape();        //一本の棒を描画するためのShape
            var g:Graphics = s.graphics;
            var w:Sprite = new Sprite();
            g.beginFill( i_color );
            g.drawRoundRect( -barWidth * 0.5, -i_size * 0.5, barWidth, barLength, barWidth, barWidth );
            g.endFill();
            
            s.x = s.y = i_size * 0.5;
            w.addChild( s );
            
            //回転させながらBitmapDataにdraw
            
            var rotStep:Number = 360 / i_steps;
            var alphaStep:Number = ( 1 - i_minAlpha ) / i_steps;
            var i:uint, j:uint;
            var b:BitmapData;
            
            for ( i=0; i<i_steps; i++ ) {
                b = new BitmapData( i_size, i_size, true, 0 );
                b.lock();
                for ( j=0; j<i_steps; j++ ) {
                    s.rotation = rotStep * ( i+j );
                    s.alpha = i_minAlpha + alphaStep * j;
                    if ( s.alpha > 1 ) s.alpha = 1;
                    b.draw( w, null, null, null, null, true );
                }
                b.unlock();
                _bitmaps.push( b );
            }
            
            
            _bitmap.bitmapData = _bitmaps[_index];
            _bitmap.x = _bitmap.y = - i_size * 0.5;
            addChild( _bitmap );
            
            //
            addEventListener( Event.ADDED_TO_STAGE, _added );
        }
        
        /*--------------------------------------------------
        * 配置イベント
        --------------------------------------------------*/
        private function _added( i_event:Event ):void {
            removeEventListener( Event.ADDED_TO_STAGE, _added );
            addEventListener( Event.ENTER_FRAME, _enterFrame );
            addEventListener( Event.REMOVED_FROM_STAGE, _removed );
        }
        
        private function _removed( i_event:Event ):void {
            removeEventListener( Event.REMOVED_FROM_STAGE, _removed );
            removeEventListener( Event.ENTER_FRAME, _enterFrame );
            addEventListener( Event.ADDED_TO_STAGE, _added );
        }
        
        /*--------------------------------------------------
        * EnterFrame
        --------------------------------------------------*/
        private function _enterFrame( i_event:Event ):void {
            _index += _speed;
            if ( _index >= _bitmaps.length ) _index = 0;
            _bitmap.bitmapData = _bitmaps[_index >> 0];
        }
    }