【问题标题】:how to tween a number of objects in as3 using greensock?如何使用greensock对as3中的多个对象进行补间?
【发布时间】:2015-02-10 02:44:36
【问题描述】:

我需要制作一个动画,其中有许多物体(大约 500 个)从左到右飞行,具有不同的延迟、持续时间和目的地。 但是,一旦所有对象都已经到达目的地,我需要运行另一个函数。

我尝试在每次对象完成飞行时进行循环检查。那就是:

...
for(var i:int = 0; i < objs.length; i++)
    Tweenlite.to(obj[i], duration, {delay:delay, x:destination.x, y:destination.y, onComplete:CheckAllComplete});
...

private function CheckAllComplete():void
{
    for(var i:int =0 ;i < objs.length; i++)
    {
        if(Tweenlite.getTweensOf(obj[i]).length > 0)
            return;
    }
    ... // if all the flights complete
}

但我认为它非常笨重,对 CPU 来说更糟。

所以,我的问题是,如何将所有对象视为一个补间并添加 onComplete 来解决问题?

类似:

var tween:*;
for(...)
    tween.add(obj[i], duration, {...});
tween.onComplete = CompleteCallback;

【问题讨论】:

  • 我相信您可以创建一个索引并在每次补间完成时增加它,并检查该索引是否等于您的对象数。如果是这样,您可以停止该过程。

标签: actionscript-3 gsap


【解决方案1】:

基于您自己的代码(我没有检查是否有效或有任何错误)

 private var tweenObjectsIndex:uint = 0;
 private var numObjects:uint = objs.length;

 for(var i:int = 0; i < numObjects:uint; i++)
 Tweenlite.to(obj[i], duration, {delay:delay, x:destination.x, y:destination.y, onComplete:CheckAllComplete});

  private function CheckAllComplete():void
  {
       tweenObjectsIndex++;
       // if all the flights complete
       if(tweenObjectsIndex == numObjects) // do something
  }

【讨论】:

  • 你的意思是没有退出任何方法来处理补间以及一个 onComplete 回调?
  • 有办法处理,我只举了一个例子。
  • 好的,但是,实际上,我想寻找一种可以避免检查每个补间的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多