Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Получить все вложенные мувики (http://www.flasher.ru/forum/showthread.php?t=212830)

KiL33 10.05.2016 22:15

Получить все вложенные мувики
 
Допустим есть мувик вложенный в мувик вложенный еще в 4 мувика. В каждом мувике какая-то анимация. Нужно каждый мувик остановить на первом кадре.
Вот такая бесконечная матрешка получается:
Код AS3:

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

Рекурсия поможет.
Код AS3:

/**
 * Останавливает все найденные внутри 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

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


Часовой пояс GMT +4, время: 02:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.