colorful rain

by takishiki
Stats
♥0 | Line 118 | Modified 2010-08-03 14:34:50 | MIT License
play

ActionScript3 source code

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

package 
{
    import flash.display.AVM1Movie;
    import flash.display.Graphics;
    import flash.display.Sprite;
    import flash.events.Event;
    import net.hires.debug.Stats;    // Stats
    
    public class FlashTest extends Sprite  
    {
        private var deg             :uint = 0;
        private var circle_x        :Array = [];
        private var circle_y        :Array = [];
        private var circle_color    :Array = [];
        private var circle_radius   :Array = [];
        
        private const c_max         :uint = 50;
        private const r_min         :uint = 1;
        private const r_max         :uint = 30;
        private const c_spread      :uint = 50;
        
        private var sprite:Sprite = new Sprite();
        
        // コンストラクタ
        public function FlashTest() {
            var i:int;
            for(i = 0; i < c_max; i++) {
                circle_x[i] = randRange(0, stage.stageWidth);
                circle_y[i] = randRange(0, stage.stageHeight);
                circle_radius[i] = r_min;
                circle_color[i] = 0xFFFFFFFF;
            }
            this.addChild(sprite);
            this.addChild(new Stats());    // Stats
            this.addEventListener(Event.ENTER_FRAME, onEnterframe);
        }
        
        // 
        private function onEnterframe(event:Event):void {
            var i:int;
            for(i = 0; i < c_max; i++) {
                circle_x[i] = circle_x[i+1];
                circle_y[i] = circle_y[i+1];
                circle_radius[i] = circle_radius[i+1];
                circle_color[i] = circle_color[i+1];
            }
            
            circle_x[c_max-1] = randRange(0, stage.stageWidth);
            circle_y[c_max-1] = randRange(0, stage.stageHeight);
            circle_radius[c_max-1] = randRange(r_min, r_max);
            deg++;
            circle_color[c_max-1] = hsv2rgb(deg, 1, 1);
            
            // 描画処理
            var g:Graphics = sprite.graphics;
            g.clear();
            for(i = 0; i < c_max; i++){
                g.lineStyle(10, circle_color[i], i/c_max/2);
                g.beginFill(circle_color[i], i/c_max);
                g.drawCircle(circle_x[i], circle_y[i], c_max-i);
                g.endFill();
            }
        }
        
        // 
        private function rgb2hex(r:Number = 0, g:Number = 0, b:Number = 0):uint {
            r = Math.round(r);
            g = Math.round(g);
            b = Math.round(b);
            
            var rgb:uint = 0xff000000 + r * 0x10000 + g * 0x100 + b;
            return rgb;
        }
        
        // a-bの乱数生成
        private function randRange(min:Number, max:Number):Number {
            var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
            return randomNum;
        }
        
        // HSV -> RGB
        private function hsv2rgb(h:Number, s:Number, v:Number):uint {
            var r:Number = 0;
            var g:Number = 0;
            var b:Number = 0;
            
            if(s==0){
                r = v;
                g = v;
                b = v;
            }else{
                var hTemp:Number = (h+360)%360;
                hTemp /= 60;
                var i:Number = Math.floor(hTemp);   //整数部
                var f:Number = hTemp-i;             //小数部
                
                var p:Number = v*(1.0-s);
                var q:Number = v*(1.0-(s*f));
                var t:Number = v*(1.0-(s*(1.0-f)));
                
                switch(i){
                case 0:
                    r = v;
                    g = t;
                    b = p;
                    break;
                case 1:
                    r = q;
                    g = v;
                    b = p;
                    break;
                case 2:
                    r = p;
                    g = v;
                    b = t;
                    break;
                case 3:
                    r = p;
                    g = q;
                    b = v;
                    break;
                case 4:
                    r = t;
                    g = p;
                    b = v;
                    break;
                case 5:
                    r = v;
                    g = p;
                    b = q;
                    break;
                }
            }
            var rgb:uint = 0xff000000 + Math.round(r*255) * 0x10000 + Math.round(g*255) * 0x100 + Math.round(b*255);
            return rgb;
        }
    }
    
}