2008年8月26日星期二

actionscript3 代码片段2

1,pie切片

var radius:Number = 100;
var TO_RADIANS:Number = Math.PI / 180;
graphics.clear();
graphics.lineStyle(2, 0x45ef98, 1);
graphics.beginFill(0xf0f0f0, 1);
graphics.moveTo(0, 0);
graphics.lineTo(radius, 0);

var angle:Number = 50;
var a:Number = Math.tan((angle/2)*TO_RADIANS);

var endx:Number;
var endy:Number;
var ax:Number;
var ay:Number;

endx = radius*Math.cos(angle*TO_RADIANS);
endy = radius*Math.sin(angle*TO_RADIANS);
ax = endx+radius*a*Math.cos((angle-90)*TO_RADIANS);
ay = endy+radius*a*Math.sin((angle-90)*TO_RADIANS);
graphics.curveTo(ax, ay, endx, endy);
graphics.endFill();
graphics.lineTo(0, 0);

2,donut,甜甜圈
var colors:Array = [0x87347e, 0x0000ef, 0x8D6433];
var alphas:Array = [100, 100, 100];
var ratios:Array = [0, 110, 255];
var matrix:Matrix = new Matrix();// { a:300, b:0, c:50, d:0, u:300, v:0, tx: -3, ty:3, w:1 };
graphics.beginGradientFill("radial", colors, alphas, ratios, matrix);
drawdonut(86, 36, 100, 94);
graphics.endFill();
其中drawdonut函数
public function drawdonut(r1:Number, r2:Number, x:Number, y:Number):void {
var TO_RADIANS:Number = Math.PI/180;
this.graphics.moveTo(0, 0);
this.graphics.lineTo(r1, 0);

// draw the 30-degree segments
var a:Number = 0.268; // tan(15)
var i:Number;
var endx:Number;
var endy:Number;
var ax:Number;
var ay:Number;
for ( i=0; i < 12; i++) {
endx = r1*Math.cos((i+1)*30*TO_RADIANS);
endy = r1*Math.sin((i+1)*30*TO_RADIANS);
ax = endx+r1*a*Math.cos(((i+1)*30-90)*TO_RADIANS);
ay = endy+r1*a*Math.sin(((i+1)*30-90)*TO_RADIANS);
this.graphics.curveTo(ax, ay, endx, endy);
}

// cut out middle (draw another circle before endFill applied)
this.graphics.moveTo(0, 0);
this.graphics.lineTo(r2, 0);

for ( i =0; i < 12; i++) {
endx = r2*Math.cos((i+1)*30*TO_RADIANS);
endy = r2*Math.sin((i+1)*30*TO_RADIANS);
ax = endx+r2*a*Math.cos(((i+1)*30-90)*TO_RADIANS);
ay = endy+r2*a*Math.sin(((i+1)*30-90)*TO_RADIANS);
this.graphics.curveTo(ax, ay, endx, endy);
}

this.x = x;
this.y = y;
}


效果:

没有评论: