我需要一个在整个长度的不同位置具有不同宽度的笔画。例如,我有一条手动绘制的路径(不使用 AS3),我想为它分配一个在路径长度开始和结束时宽度为 0,中间宽度为 10 的笔划路径的长度,以便笔画的宽度可以在整个路径的长度上逐渐变化。提前致谢
问问题
439 次
1 回答
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);
}
但您提到您需要在 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 文件并运行上述代码:
Stroke 的厚度属性就是您所追求的。您还可以使用 JSFL 创建自定义绘图工具。查看 [Extending Macromedia Flash MX 2004: Complete Guide and Reference to JavaScript Flash](现在卖的很便宜),这是你能在这个主题上得到的最好的东西。还有一个关于创建工具的免费章节,这正是您所需要的。
另一种选择可能是编写 Radomír Měch 的Deco Tool程序引擎的脚本。不幸的是,它没有很好的记录。
如果您要进入 JSFL,请查看 Dave Stewart 的精彩xJSFL
尽管您提到了 Flash,但您可能还想查看 Illustrator 的Scriptographer免费插件,该插件也可以通过 JavaScript 编写脚本,并且 Illustrator 可以生成矢量图形,您可以轻松地将其导入 Flash。
于 2013-03-11T08:56:19.607 回答