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

ikoan's practice:グラデーション

グラデーションのタイプ指定に用いる
Get Adobe Flash player
by ikoan 29 May 2009
/**
 * Copyright ikoan ( http://wonderfl.net/user/ikoan )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/yCxu
 */

package {
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.display.GradientType;    // グラデーションのタイプ指定に用いる
    import flash.events.Event;
    import flash.text.TextField;
    import flash.utils.getTimer;

    public class FlashTest extends Sprite {
        // スプライト
        private var redCircle:Sprite = new Sprite();

        // グラデーションで用いる配列セット
        private var colors:Array = [0x0000ff, 0xff0000, 0x00ff00, 0x0000ff];
        private var alphas:Array = [1, 1, 1, 1];
        private var ratios:Array = [0, 85, 170, 255];
        private var circleX:int  = 0;        // サークル位置
        private var circleY:int  = 0;        // サークル位置
        private var moveX:int    = 5;        // 移動速度初期値
        private var moveY:int    = 5;        // 移動速度初期値
        
        public function FlashTest() {
            // 以下スプライトの設定
            
            // nsmt's <赤い円を作成>より
            //redCircle.graphics.beginFill(0xff0000);
            
            // サークルをステージにセット
            addChild(redCircle);
            
            // 円の標準描画位置を指定
            redCircle.x = stage.stageWidth/2;
            redCircle.y = stage.stageHeight/2;
            
            addEventListener(Event.ENTER_FRAME, update) 
        }
        
        // グラデーションのアニメーション
        private function animGradientColor():void{
            var text:TextField = new TextField();
            text.background = true;
            
            if(ratios[0] >= 40)
                return;
            for(var n:int=0 ; n<2 ; n++){
                ratios[n] += 1;
            }
            if( ratios[2] > 254){
                shiftColor();
                shiftRatio();
            }
        }
        
        // カラー配列をシフト
        private function shiftColor():void{
            var tempColor:int = colors[3];
            colors[3] = colors[2];
            colors[2] = colors[1];
            colors[1] = tempColor;
            colors[0] = tempColor;
        }
        
        // 色分布比率配列をシフト
        private function shiftRatio():void{
            ratios[2] = ratios[1];
            ratios[1] = ratios[0];
            ratios[0] = 0;
        }
        
        // グラデーションセット&ドロー
        private function setGradientColor():void{
            // グラデーションセット            
            redCircle.graphics.beginGradientFill(
                GradientType.RADIAL,    // グラデーションタイプ
                colors,                 // 色指定
                alphas,                 // アルファ値
                ratios                  // 色描画領域
                );
                
            // 円を書きます
            redCircle.graphics.drawCircle(0, 0, 100);
            redCircle.graphics.endFill();
        }
        
        // 円の移動
        private function moveCircle():void{
            circleX += moveX;
            circleY += moveY;
            
            if( circleX > stage.stageWidth ){
                moveX = -5;
            }
            if( circleX < 0 ){
                moveX = 5;
            }

            if( circleY > stage.stageHeight ){
                moveY = -5;
            }
            if( circleX < 0 ){
                moveY = 5;
            }

            redCircle.x = circleX;
            redCircle.y = circleY;
        }
        
        private function update(event:Event):void{
            animGradientColor();
            setGradientColor();
            //moveCircle();
        }
    }
}