円弧の描画はAS3CB Libraryを使っています。

Main.as

package {
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.events.MouseEvent;
    
    [SWF(width="400",height="400",backgroundColor="0x005885",frameRate="24")]

    public class Main extends Sprite{
        
        private const X_NUM:int = 5;
        private const Y_NUM:int = 5;
        private const X_MARGIN:Number = 50;
        private const Y_MARGIN:Number = 50;
        private var _xGrid:Number;
        private var _yGrid:Number;
        
        public function Main(){
            stageConfigure(stage);
            init();
            stage.addEventListener(MouseEvent.MOUSE_DOWN,reset);
        }
        
        private function init():void{
            for (var i:int=0; i<X_NUM; i++){
                for (var j:int=0; j<Y_NUM; j++){
                    var pc:PieChart = new PieChart(30,PieChart.COL_ARRAY.length);
                    addChild(pc);
                    pc.x = _xGrid*i + X_MARGIN;
                    pc.y = _yGrid*j + Y_MARGIN;
                    
                    var mk:MaskCircle = new MaskCircle(30);
                    addChild(mk);
                    mk.x = pc.x;
                    mk.y = pc.y;
                    pc.mask = mk;
                }
            }
        }
        
        private function reset(e:MouseEvent):void{
            while (this.numChildren > 0){
                this.removeChildAt(0);
            }
            init();
        }
        
        private function stageConfigure(target:Stage):void{
            _xGrid = (target.stageWidth - 2*X_MARGIN)/(X_NUM - 1);
            _yGrid = (target.stageHeight - 2*Y_MARGIN)/(Y_NUM - 1);
        }
    }    
}

PieChart.as

package{
    import ascb.drawing.Pen;
    import ascb.util.NumberUtilities;
    import flash.display.Shape;

    public class PieChart extends Shape{
        
        private var _rad:Number;
        private var _colNum:int;
        
        public static const COL_ARRAY:Array = [
            0xFFFFFF,0xCCCCCC,0x999999,0x666666,0x333333,0x000000
        ];
        
        public function PieChart(rad:Number,colNum:int){
            _rad = rad;
            _colNum = colNum;
            draw();
        }
        
        private function draw():void{
            var startAngle:Number = 0;
            
            for (var i:int=0; i<_colNum; i++){
                var endAngle:Number = NumberUtilities.random(startAngle,360);
                
                if (i == _colNum - 1){
                    //Last color
                    endAngle = 360;
                }
                
                var arc:Number = endAngle - startAngle;
                
                var p:Pen = new Pen(graphics);
                p.beginFill(COL_ARRAY[i],0.5);
                p.drawArc(0,0,_rad,arc,startAngle,true);
                p.endFill();
                startAngle = endAngle;
            }
        }
    }
}

MaskCircle.as

package{
    import ascb.drawing.Pen;
    import flash.display.Shape;
    import flash.events.Event;

    public class MaskCircle extends Shape{
        
        private var _rad:Number;
        private var _currentFrame:int;
        
        public function MaskCircle(rad:Number){
            _rad = rad;
            _currentFrame = 0;
            addEventListener(Event.ENTER_FRAME,draw);
        }
        
        private function draw(e:Event):void{
            graphics.clear();
            
            var p:Pen = new Pen(graphics);
            p.beginFill(0x000000);
            p.drawArc(0,0,_rad,_currentFrame,0,true);
            p.endFill();
            
            _currentFrame += 10;
            
            if (_currentFrame > 360){
                removeEventListener(Event.ENTER_FRAME,draw);
            }
        }
    }
}
Powered by blog Boreal Kiss 2008.