这是我的代码(浓缩为有问题的函数):
public function redrawNewShape() {
var tempAX:Number;
var tempAY:Number;
var tempBX:Number;
var tempBY:Number;
var tempLineThickness:Number;
var tempLineColour:uint;
var tempLineJoints:String;
var tempLineMiter:Number;
var tempSprite:Sprite;
tempSprite = new Sprite;
tempSprite = shapeArray[1];
tempSprite.graphics.clear()
if (fillTransparency == 0) {
tempSprite.graphics.beginFill(shapeArray[3],1);
}
tempSprite.graphics.moveTo(linesArray[(linesArray.length - 2)],linesArray[(linesArray.length - 1)]);
for (var d = 0; d < (linesArray.length/4); d++) {
tempAX = linesArray[(d*4)];
tempAY = linesArray[((d*4)+1)];
tempBX = linesArray[((d*4)+2)];
tempBY = linesArray[((d*4)+3)];
tempLineThickness = lineStyleArray[(d*4)];
tempLineColour = lineStyleArray[((d*4)+1)];
tempLineMiter = lineStyleArray[((d*4)+3)];
if (lineStyleArray[((d*4)+2)] == 0) {
tempLineJoints = JointStyle.MITER;
} else if (lineStyleArray[((d*4)+2)] == 1) {
tempLineJoints = JointStyle.ROUND;
} else if (lineStyleArray[((d*4)+2)] == 2) {
tempLineJoints = JointStyle.BEVEL;
}
tempSprite.graphics.lineStyle(tempLineThickness,tempLineColour,1,false,"normal","none",tempLineJoints,tempLineMiter)
tempSprite.graphics.curveTo(tempAX,tempAY,tempBX,BY)
}
if (fillTransparency == 0) {
tempSprite.graphics.endFill();
}
}
此函数在我的程序中重绘由数组 shapeArray、linesArray 和 lineStyleArray 中的属性定义的形状。问题是我的程序中形状的角度没有连接,无论我将它设置为什么 JointStyle。
(我无法上传示例图片,因为我没有至少 10 名声望。想象两条粗线,没有 Caps 以 90 度角连接。而不是圆角,斜角或斜接,形状上有间隙为两条线宽度一半的正方形。)
我不明白为什么,如果我将 tempSprite.graphics.lineStyle 放在 for 循环之外,角度是连接的。它在 lineStyle 下的 Actionscript 3.0 参考中指出,
“你可以在绘制路径的中间调用lineStyle()方法,为路径中的不同线段指定不同的样式。”
那么为什么它在循环内不起作用呢?
将 lineStyle 放在 for 循环之外的示例(手动添加临时值):
public function redrawNewShape() {
var tempAX:Number;
var tempAY:Number;
var tempBX:Number;
var tempBY:Number;
var tempLineThickness:Number;
var tempLineColour:uint;
var tempLineJoints:String;
var tempLineMiter:Number;
var tempSprite:Sprite;
tempSprite = new Sprite;
tempSprite = shapeArray[1];
tempSprite.graphics.clear()
if (fillTransparency == 0) {
tempSprite.graphics.beginFill(shapeArray[3],1);
}
tempSprite.graphics.moveTo(linesArray[(linesArray.length - 2)],linesArray[(linesArray.length - 1)]);
tempSprite.graphics.lineStyle(10,0x000000,1,false,"normal","none","miter",3)
for (var d = 0; d < (linesArray.length/4); d++) {
tempAX = linesArray[(d*4)];
tempAY = linesArray[((d*4)+1)];
tempBX = linesArray[((d*4)+2)];
tempBY = linesArray[((d*4)+3)];
tempLineThickness = lineStyleArray[(d*4)];
tempLineColour = lineStyleArray[((d*4)+1)];
tempLineMiter = lineStyleArray[((d*4)+3)];
if (lineStyleArray[((d*4)+2)] == 0) {
tempLineJoints = JointStyle.MITER;
} else if (lineStyleArray[((d*4)+2)] == 1) {
tempLineJoints = JointStyle.ROUND;
} else if (lineStyleArray[((d*4)+2)] == 2) {
tempLineJoints = JointStyle.BEVEL;
}
tempSprite.graphics.curveTo(tempAX,tempAY,tempBX,tempBY)
}
if (fillTransparency == 0) {
tempSprite.graphics.endFill();
}
}