gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:58:23 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com