在AS3中,在整个长度上具有不同宽度的笔划

时间:2013-03-10 12:25:57

标签: actionscript-3

我需要一个在整个长度上不同位置具有不同宽度的笔划。例如,我有一个手动绘制的路径(不使用AS3),我想为它指定一个在路径长度的开头和末尾有0宽度的笔划,在中间有10个宽度。路径的长度使得笔划的宽度可以在整个路径长度上逐渐变化。 提前致谢

1 个答案:

答案 0 :(得分:2)

在as3中,您使用lineStyle()

var segs:int = 32;//number of segments/'circle resolution'
var ai:Number = (Math.PI * 2) / segs;//angle increment
var offx:int = stage.stageWidth/2;//circle centre x
var offy:int = stage.stageHeight/2;//circle centre y
var rad:Number = 100;//circle radius
var maxWidth:Number = 18;

for(var i:int = 0 ; i < segs; i++){
    var a:Number = ai * i;
    var cx:Number = offx + Math.cos(a) * rad;
    var cy:Number = offy + Math.sin(a) * rad;
    graphics.lineStyle(i/segs * maxWidth);
    if(i == 0) graphics.moveTo(cx,cy);
    graphics.lineTo(cx,cy);
}

AS3 line style

但是你提到你需要在Flash编辑器中绘制,因此你需要编写脚本。 您可以使用JSFL编写Flash编辑器脚本。

这是上面的JSFL端口:

var doc = fl.getDocumentDOM();
var segs = 32;//number of segments/'circle resolution'
var ai = (Math.PI * 2) / segs;//angle increment
var offx = doc.width/2;//circle centre x
var offy = doc.height/2;//circle centre y
var rad = 100;//circle radius
var maxWidth = 10;

for(var i = 0 ; i < segs; i++){
    var a = ai * i;
    var an = ai * (i+1);//next angle
    var cx = offx + Math.cos(a) * rad;//current pt
    var cy = offy + Math.sin(a) * rad;
    var nx = offx + Math.cos(an) * rad;//next pt
    var ny = offy + Math.sin(an) * rad;
    //this is mainly what you're after
    var s = doc.getCustomStroke("toolbar");
    s.thickness= (i/segs)*maxWidth;
    doc.setCustomStroke(s);

    doc.addNewLine({x:cx,y:cy},{x:nx,y:ny});
}

创建一个新的Flash文档,然后创建一个新的Flash JavaScript文件并运行上面的代码:

circle jsfl

Stroke的thickness属性就是你所追求的。 您还可以使用JSFL创建自定义绘图工具。 查看[扩展Macromedia Flash MX 2004:JavaScript Flash的完整指南和参考](现在销售非常便宜),这是您可以获得的最佳主题。 还有一个关于创建Tools的免费章节,这正是你需要的。

另一种选择可能是编写RadomírMěch的Deco Tool程序引擎脚本。不幸的是,它不是很好documented

如果你要进入JSFL,请结账Dave Stewart真棒xJSFL

虽然您提到了Flash,但您可能还想查看Illustrator的Scriptographer免费插件,该插件也可通过JavaScript编写脚本,而Illustrator会生成可以轻松导入Flash的矢量图形。