网上有很多使用AS3画一个扇形的方法,但是却一个都没有解释这个函数是如何运作来画出扇形的,下面浅谈下我对这个函数的理解。

首先上代码,代码来自http://blog.csdn.net/weiming8517/article/details/12023411。

private function drawSector(mc:Sprite, x:Number = 200, y:Number = 200, r:Number = 100, angle:Number = 60, startFrom:Number = 0, color:uint = 0x000000):void
        {
            mc.graphics.clear();
            mc.graphics.beginFill(color,50);   
            mc.graphics.lineStyle(0,color);   
            mc.graphics.moveTo(x,y);
            
            angle=(Math.abs(angle)>360)?360:angle;
            
            var n:Number=Math.ceil(Math.abs(angle)/45);
            
            var angleA:Number=angle/n;
            
            angleA=angleA*Math.PI/180;
            
            startFrom=startFrom*Math.PI/180;
            
            mc.graphics.lineTo(x+r*Math.cos(startFrom),y+r*Math.sin(startFrom));
            
            for(var i:int = 1;i <= n;i++)
            {
                startFrom+=angleA;
                
                var angleMid:Number = startFrom-angleA/2;
                
                var bx:Number=x+r/Math.cos(angleA/2)*Math.cos(angleMid);
                
                var by:Number=y+r/Math.cos(angleA/2)*Math.sin(angleMid);
                
                var cx:Number=x+r*Math.cos(startFrom);
                
                var cy:Number=y+r*Math.sin(startFrom);
                
                mc.graphics.curveTo(bx,by,cx,cy);
            }
            
            if(angle!=360)
            {
                mc.graphics.lineTo(x,y);
            }
            
            mc.graphics.endFill(); 
        }
画扇形函数

相关文章: