2011-02-15 30 views
0

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

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

什么这basicly确实是从阵列到旁边的海誓山盟阶段处的元件。现在我想让他们一起向右移动。我这样做如下:

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

您不需要为此使用补间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; 
    } 
}