我有点问题。 我有以下功能:
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.如何在不覆盖以前版本的情况下多次从数组中获取项目?
答案 0 :(得分:0)
您不需要为此使用补间精简版。你需要在moveItems函数中做的就是稍微移动每个项目(例如elemtsArr [i] .x + = 5),如果elementsArr [i] .x&gt; _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;
}
}