使用最少量的代码/迭代尝试在闪存中绘制圆弧,并绘制圆环楔(具有内部和外部圆弧的圆弧)。我从一个旧的AS2例子中移植了这个方法,但是它需要通过多个步骤循环才能使它看起来平滑,我宁愿避免这种情况。我看到AS3有一个“curveTo”命令,但它并不真正绘制圆弧,它绘制了一条贝塞尔曲线。闪光灯中是否有弧线命令?或者绘制一段圆的方法?flash as3使用curveTo
这里是我的旧代码:
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);
我没有看到文件名为cubicCurveTo任何功能,当我尝试使用该功能我得到的错误。 – mheavers
只需按照联系;) 语言版本:\t的ActionScript 3.0 运行时版本:\t的Flash Player 11,AIR 3 – Kodiak
我甚至无法在CS5发布到Flash Player 11 - 不是一个真正的可行的选择,我现在。我看到一个MXP增加了这个功能,但是你必须在计算机上以管理员身份运行才能安装它,这对我来说也不是一种选择。但在更新版本的闪光灯中使用更精确的曲线方法会很好。 – mheavers