Flash as3 анимированный рисунок линий с lineTo и tweenmax - PullRequest
1 голос
/ 20 апреля 2011

Я пытаюсь анимировать линию, используя tweenmax и lineTo, но вспышка кажется немного запутанной в отношении координат вещей. Линии также нарисованы немного шатко. Вот мой код:

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();

Но когда я использую это, он рисует линии ОТ правильной точки, но не рисует их по фактическим координатам X и Y sC0, sC1 и т. Д. Все кажется смещенным, а линии слишком длинные направление Y. У кого-нибудь есть хороший способ сделать это, или посмотрите, что может быть не так в моем коде?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Для проблемы с «шаткой линией» вы конвертируете точки «ящика» из чисел в целые числа, поэтому в основном это смещение вашей линии до ближайшего пикселя.Отсутствие изменения типа поможет «решить» эту проблему: 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() или их комбинацию.

0 голосов
/ 21 апреля 2011

Ах - я вижу, что я сделал.Вместо того чтобы говорить "line.x = sP.x" и "line.y=sP.y" - я должен был сказать:

line.graphics.moveTo(sP.x, sP.y);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...