2011-02-15 50 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; 
    } 
}