使用lineTo和tweenmax flash as3动画线条图

时间:2011-04-19 22:04:09

标签: flash actionscript-3

我正在尝试通过使用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方向。任何人都有这样做的好方法,或者看看我的代码中可能出现的问题?

谢谢!

2 个答案:

答案 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);