TweenLite AS3:easy:Linear.easeNone不起作用

时间:2012-11-10 21:55:28

标签: actionscript-3 random timer easing tweenlite

在下面的函数中,我尝试在舞台上抛出随机项(由函数generateItem()生成),让它们从舞台右侧外侧移动到左侧外侧。这工作正常,但唯一的问题是轻松:TweenLite.to函数中的Linear.easeNone不起作用。项目在开始时保持快速,在动画结束时减慢。这是代码:

private function timerHandler(event:TimerEvent):void{
    //item handling
    if(gameTimer.currentCount % 4 === 0){
    var item:MovieClip = generateItem();
    arrItems.push(item);

    for each(item in arrItems){
        TweenLite.to(item,5,{x:-(item.width - 1), ease:Linear.easeNone});
        trace(item + " ----- " + item.x);
        if(item.x < -(item.width)){
            arrItems.splice(arrItems.indexOf(item),1);
            stage.removeChild(item);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这里发生的是你在for each循环中一次又一次地覆盖你的补间。为TweenLite.to对象设置补间动画后,除非要使用新补间覆盖它,否则无需再为该对象设置补间动画。 / p>

你看到动画结束变慢的原因是因为距离对象必须移动,直到补间动画的最后一点为止(因为它已经覆盖了一些) ,但动画的总持续时间仍为5秒。 速度=距离/时间,所以同一时间但距离越短=补间越慢。

您可以通过在TweenLite.to之外移动loop来解决此问题,因此只会为每个项目设置一个补间。我为你的代码推荐的另一个改进是使用TweenLite的onComplete回调函数来避免你的timeHandler函数中的那个昂贵的for each循环,并且只有在补间完成后才删除该项,除非你需要迭代所有项目的其他原因,而不仅仅是检查补间是否已经结束。

例如:

private function timerHandler(event:TimerEvent):void
{
  //item handling
  if(gameTimer.currentCount % 4 === 0)
  {
    var item:MovieClip = generateItem();

    arrItems.push(item);

    //only call once for each item
    TweenLite.to(item,5,{ x:-(item.width - 1), 
                          ease:Linear.easeNone,
                          onComplete: removeItem,
                          onCompleteParams:[item]
                         });

  }

}

private function removeItem(item:MovieClip):void
{
  arrItems.splice(arrItems.indexOf(item),1);
  stage.removeChild(item);
}

希望这有帮助!