在下面的函数中,我尝试在舞台上抛出随机项(由函数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);
}
}
}
答案 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);
}
希望这有帮助!