проблема с твинлитом - PullRequest
       18

проблема с твинлитом

0 голосов
/ 15 февраля 2011

У меня есть небольшая проблема.у меня есть следующая функция:

private function elementsLoadedHandler(e:Event):void
        {
            elementContainer=new Sprite();
            var currentItem:uint;
            for (var i:uint=0; i < numberItems; i++)
            {
                var element:Element=new Element(elementModel.elements[currentItem]);
                element.x=xPos;
                element.alpha=.5;
                addChild(element);
                xPos+=130;
                currentItem++;
                elementsArr.push(element);
                if (currentItem >= elementModel.elements.length)
                {
                    currentItem == 0;
                }
            }
            movementTimer=new Timer(_movementSpeed, 0);
            movementTimer.addEventListener(TimerEvent.TIMER, moveItems);
            movementTimer.start();
            layout();
        }

Что это делает в основном, это помещает элементы из массива на сцену рядом с друг другом.Теперь я хочу, чтобы они вместе переместились вправо.я делаю это следующим образом:

private function moveItems(e:TimerEvent):void
        {
            var alphaVal:Number=.5;
            movementTimer.delay+=25;
            for (var i:uint=0; i < elementsArr.length; i++)
            {
                xPos=elementsArr[i].x + 130;
                TweenLite.to(elementsArr[i], .5, {x: "130"});
                if (elementsArr[i].x > _width)
                {
                    elementsArr[i].x=0;
                }
            }
        }

Итак, я перемещаю элементы вправо, а затем проверяю, находится ли последний элемент за пределами сцены, если да, я сбрасываю его позицию на 0, чтобы он шелназад налево, и таким образом у меня есть непрерывный цикл предметов, перемещающихся вправо.Проблема в том, что, как я это делаю, у меня выполняется 11 анимаций в секунду, что делает его медленным.Я думал о том, чтобы положить вещи в контейнер и твиновать контейнер, но у меня тогда не получилось получить хороший непрерывный поток.Кто-нибудь знает, как решить эту проблему?

Кроме того, в первой функции вы видите, что я делаю цикл for.переменная numberItems представляет 11, но количество элементов в elementModel.elements составляет всего 6, поэтому для остальных 5 элементов я просто снова выбираю первые 5 элементов из массива.Проблема в том, что когда я отслеживаю эти элементы, это дает мне 0. Как я могу взять элементы из массива несколько раз, не перезаписывая предыдущую версию?

1 Ответ

0 голосов
/ 16 февраля 2011

Вам не нужно использовать анимацию движения для этого.Все, что вам нужно сделать в функции moveItems, это немного переместить каждый элемент (например, elemtsArr [i] .x + = 5), а если elementsArr [i] .x> _width, заменить его на 0.

Примерно так должно работать:

function moveItems( e:TimerEvent ):void
{
    for (var i:int = 0; i < elemntsArr.length; i++)
    {
        elementsArr[i].x += 5;
        if (elementsArr[i].x > _width)
            elementsArr[i].x = 0;
    }
}
...