Как анимировать несколько объектов в as3 с помощью greensock?

Мне нужно сделать анимацию с множеством объектов (около 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
}

Но я думаю, что это очень громоздко и хуже для процессора.

Итак, мой вопрос: как я могу рассматривать все объекты как одну анимацию и просто добавить onComplete решить проблему?

что-то вроде:

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

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
  }
Другие вопросы по тегам