円弧の描画はAS3CB Libraryを使っています。
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); } } }
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; } } } }
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.