我正在尝试通过使用tweenmax和lineTo进行绘制来制作线条,但是flash似乎对事物的坐标有点困惑。线条也有点不稳定。这是我的代码:
var childArray:Array = new Array(sC0,sC1,sC2,sC3);
var curChild = 0;
function drawLines(){
for (var i=0;i<childArray.length;i++){
if (i == curChild){
var line:Shape = new Shape();
line.graphics.lineStyle(5, 0xFF1C30, 1, false, LineScaleMode.VERTICAL, CapsStyle.ROUND, JointStyle.ROUND, 10);
addChild(line);
line.x = sP.x;
line.y = sP.y;
var drawer:Sprite = new Sprite();
addChild(drawer);
TweenMax.to (drawer,1,{x:childArray[i].x,y:childArray[i].y,onUpdate:drawLine,ease:Expo.easeOut,onComplete:incChild});
function drawLine():void {
line.graphics.lineTo(int(drawer.x), int(drawer.y));
}
}
}
}
function incChild(){
curChild++;
drawLines();
}
drawLines();
但是当我使用它时,它会从正确的点绘制线条,但是它不会将它们绘制到sC0,sC1等的实际X和Y坐标上。所有东西看起来都是偏移的,并且线条稍微过长了Y方向。任何人都有这样做的好方法,或者看看我的代码中可能出现的问题?
谢谢!
答案 0 :(得分:2)
对于“抖动线”问题,您将“抽屉”点从数字转换为整数,因此它基本上将您的线移动到最近的像素。不改变类型将有助于“解决”该问题:
line.graphics.lineTo(drawer.x, drawer.y));
对于点偏移,如果“childArray”中的对象位于另一个容器中,则可能需要使用localToGlobal()
来准确转换点。
var mc:MovieClip = childArray[i]; var pt:Point = localToGlobal(new Point(mc.x, mc.y)); TweenMax.to (drawer,1,{x:pt.x,y:pt.y,onUpdate:drawLine,ease:Expo.easeOut,onComplete:incChild});
这也假设您的示例中的addChild()
正在添加到舞台或其他位置为(0,0)的容器中。如果没有,您可能需要使用globalToLocal()
或两者的组合。
答案 1 :(得分:0)
line.x = sP.x
”和“line.y=sP.y
” - 我应该说:
line.graphics.moveTo(sP.x, sP.y);