0

我有一点问题。我有以下功能:

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。如何从数组中多次获取项目而不覆盖它的先前版本?

4

1 回答 1

0

您不需要为此使用 tween lite。在 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;
    }
}
于 2011-02-15T22:26:55.173 回答