PDA

Просмотр полной версии : Получить все вложенные мувики


KiL33
10.05.2016, 22:15
Допустим есть мувик вложенный в мувик вложенный еще в 4 мувика. В каждом мувике какая-то анимация. Нужно каждый мувик остановить на первом кадре.
Вот такая бесконечная матрешка получается:
for (var i:uint = 0; i < target_mc.numChildren; i++) {
if (target_mc.getChildAt(i).hasOwnProperty("numChildren")) {
target_mc.getChildAt(i).gotoAndStop(0);
for (var j:uint = 0; j < target_mc.getChildAt(i).numChildren; j++) {
target_mc.getChildAt(i).getChildAt(j).gotoAndStop(0);
if (target_mc.getChildAt(i).getChildAt(j).hasOwnProperty("numChildren")) {
for (var k:uint = 0; k < target_mc.getChildAt(i).getChildAt(j).numChildren; k++) {
target_mc.getChildAt(i).getChildAt(j).getChildAt(k).gotoAndStop(0);
}
}
}
}
}

Ерунда полная. Есть способ сделать это не то что бы гибко, скорее правильно в моем случае?

Zebestov
11.05.2016, 01:59
Рекурсия поможет.

/**
* Останавливает все найденные внутри obj экземпляры MovieClip (включая сам obj)
* независимо от степени вложенности.
*/
function stopIt(obj:DisplayObject):void {
var doc:DisplayObjectContainer = obj as DisplayObjectContainer;

// Если это не контейнер, ничего не делаем.
if (doc == null) {
return;
}

// Если этот объект является экземпляром MovieClip, останавлиаем его.
if (doc is MovieClip) {
(doc as MovieClip).gotoAndStop(0);
}

// Вызываем stopIt() для каждого из детей объекта.
var i:int = doc.numChildren;
while (i--) {
stopIt(doc.getChildAt(i));
}
}

// Тотально останавливаем target_mc.
stopIt(target_mc);

KiL33
11.05.2016, 15:18
Спасибо, который раз уже выручаете!)