AS3 画扇形函数

最近工作需要,进一步了解了些Flash代码的东西,对AS3更是起了浓厚的兴趣。于是把之前JS写的连连看游戏搬到flash上面来。

当然,flash上很多这种游戏了,个人只是为了学习和进步。现在还没有完善好,过几天再放上来。现在临时研究了点扇形画法的问题。贴出来源代码共享下。

库函数一枚:

package com.shirne.extend
{
	import flash.display.Graphics;

	public class ExGraphics
	{

		public static function drawSector(obj:Graphics,x:Number=0,y:Number=0,radius:Number=100,fromRadian:Number=0,radian:Number=0):void
		{
			obj.moveTo(x,y);
			if(Math.abs(radian) > Math.PI * 2){
				obj.drawCircle(x,y,radius);
			}else{
				var n:int = Math.ceil(radian * 4 / Math.PI);
				var angleAvg:Number = radian / n;
				var angleMid:Number, bx:Number, by:Number,cx:Number, cy:Number;
				obj.lineTo(x + radius * Math.cos(fromRadian),y + radius * Math.sin(fromRadian));
				for (var i=1; i<=n; i++)
				{
					fromRadian +=  angleAvg;
					angleMid = fromRadian - angleAvg * .5;
					bx=x + radius * Math.cos(angleMid) / Math.cos(angleAvg * .5);
					by=y + radius * Math.sin(angleMid) / Math.cos(angleAvg * .5);
					cx = x + radius * Math.cos(fromRadian);
					cy = y + radius * Math.sin(fromRadian);
					obj.curveTo(bx,by,cx,cy);
				}
				obj.lineTo(x,y);
			}
		}
		
	}
}

 

flash代码一枚:

 

import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import com.shirne.extend.ExGraphics;
import flash.events.Event;


stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

var sp:Sprite=new Sprite();
addChild(sp);

var ag:Number=0,speed:Number=.02,type:Boolean=true;

this.addEventListener(Event.ENTER_FRAME,drawAll);
function drawAll(e:Event):void
{
	ag += speed;
	if(ag>=2){
		type = !type;
		speed = -speed;
	}else if(ag<=0){
		type = !type;
		speed = -speed;
	}
	sp.graphics.clear();
	sp.graphics.beginFill(0xffaa00,.8);
	ExGraphics.drawSector(sp.graphics,stage.stageWidth*.5,stage.stageHeight*.5,Math.min(stage.stageWidth,stage.stageHeight)*.25,type ? 0 : Math.PI*(2-ag),Math.PI * ag);
	sp.graphics.endFill();
}
使用方法:

 

1.把库函数导入到flash类库.或者直接将com/shirne/extend/ExGraphics.as这个目录文件结构放到flash文件目录里。

2.新建一个flash as3文件,把第二段代码全部帖到第一帧的代码里,然后运行就可以了。效果如下:

Flash画扇形效果演示