flash as3 使用 curveTo 绘制一个 donut 楔形(具有内外半径的圆弧)

标签 flash actionscript-3 actionscript drawing

我正在尝试使用最少量的代码/迭代在 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);

最佳答案

Graphics.cubicCurveTo()curveTo 相比,它会给您更好的弧形近似值。但它仍然不完美。

关于flash as3 使用 curveTo 绘制一个 donut 楔形(具有内外半径的圆弧),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8297886/

相关文章:

javascript - 是否可以在 Flash 横幅中运行 html &lt;script&gt; ?

flash - Uploadify 在 Google Chrome 和 Safari 中不起作用

javascript - 将第 3 方 Flash 组件集成到 Adob​​e Air 应用程序中?

您可以使用 Adob​​e 的 Alchemy 来执行批处理文件吗?

javascript - YouTube Flash/HTML5播放器

flash - ActionScript 的 WordWrap 打破单词

flash - Flash上​​传图片调整大小客户端

apache-flex - Flex : Get self SWF file name?

apache-flex - 在 Actionscript 3 (Flex) 中扩展数组

actionscript-3 - 导入 flash.net.SecureSocket 抛出错误 "Definition XXX could not be found"