Как анимировать несколько объектов в 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
}