【发布时间】:2011-11-28 15:09:59
【问题描述】:
我正在尝试使用最少的代码/迭代在 Flash 中绘制弧线。我在下面从一个旧的 AS2 示例中移植了此方法,但它需要循环执行多个步骤才能使其看起来流畅,我宁愿避免这种情况。我看到 AS3 有一个“curveTo”命令,但它并没有真正绘制圆弧,而是绘制贝塞尔曲线。 flash中是否有arc命令?还是一种画圆的方法?
这是我的旧代码:
function drawSolidArc (drawObj:Object, centerX:Number,centerY:Number,innerRadius:Number,outerRadius:Number,startAngle:Number,arcAngle:Number,steps:int=20):void {
if (Math.abs(startAngle)>360)startAngle%=360
if (Math.abs(arcAngle)>360)arcAngle%=360
startAngle/=360,arcAngle/=360
var twoPI:Number = 2 * Math.PI;
var angleStep:Number = arcAngle/steps;
var angle:Number, i:int, endAngle:Number;
var xx:Number = centerX + Math.cos(startAngle * twoPI) * innerRadius;
var yy:Number = centerY + Math.sin(startAngle * twoPI) * innerRadius;
var xxInit:Number=xx;
var yyInit:Number=yy;
drawObj.graphics.moveTo(xx,yy);
for(i=1; i<=steps; i++) {
angle = (startAngle + i * angleStep) * twoPI;
xx = centerX + Math.cos(angle) * innerRadius;
yy = centerY + Math.sin(angle) * innerRadius;
drawObj.graphics.lineTo(xx,yy);
}
endAngle = startAngle + arcAngle;
for(i=0;i<=steps;i++) {
angle = (endAngle - i * angleStep) * twoPI;
xx = centerX + Math.cos(angle) * outerRadius;
yy = centerY + Math.sin(angle) * outerRadius;
drawObj.graphics.lineTo(xx,yy);
}
drawObj.graphics.lineTo(xxInit,yyInit);
};
var myArc:Shape = new Shape(); //or another DisplayObject
myArc.graphics.beginFill(0xcccccc, 0.50);
//objName, centerX,centerY, innerRadius, outerRadius, startAngle (12 o'clock is -90), arcAngle (degrees from startAngle), steps (smoothness)
drawSolidArc (myArc,250, 250, 180, 200, -90, 65, 100);
myArc.graphics.endFill();
this.addChild(myArc);
【问题讨论】:
标签: flash actionscript-3 actionscript drawing