Форум 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=160022)

gflirt 07.07.2011 22:50

Все объекты на сцене
 
Как можно получить список всех объектов?

Юзал функцию
Код AS3:

function getAllChildren(obj:DisplayObjectContainer, getSubChildren:Boolean=false):Array {
        var children:Array = [];
        var i:uint=0;
        while (i < obj.numChildren) {
                var ch:DisplayObject = obj.getChildAt(i);
                children.push(ch);
                if ((getSubChildren) && (ch is DisplayObjectContainer))
                        children = children.concat(getAllChildren(ch, true));
                }
        i++;
        }

но она работает неправильно и зацикливается

i.o. 07.07.2011 22:57

return отсутствует

gflirt 07.07.2011 23:01

Код AS1/AS2:

function getAllChildren(obj:DisplayObjectContainer, getSubChildren:Boolean=false):Array {
        var children:Array = [];
        var i:uint=0;
        while (i < obj.numChildren) {
                var ch:DisplayObject = obj.getChildAt(i);
                trace("name " + ch.name);
                trace("hahaha " + i+"num "+obj.numChildren);
                trace ("Array " + children );
                children.push(ch);
                if ((getSubChildren) && (ch is DisplayObjectContainer))
                        children = children.concat(getAllChildren(ch, true));
                }
        i++;
        }               
        return children;
                }


i.o. 07.07.2011 23:15

Вот рабочая копипаста:
Код AS3:

trace( getAllChildren( this, true ).join("\n") );
 
 
function getAllChildren( container:DisplayObjectContainer, getSubChildren:Boolean=false ) : Array
{
        if (!container)
                return [];
 
        var children:Array = [];
        var i:int = -1;
        while (++i < container.numChildren)
        {
                var child:DisplayObject = container.getChildAt(i);
                children.push( child );
 
                if (getSubChildren)
                        children = children.concat( arguments.callee( child as DisplayObjectContainer, true ) );
        }
 
        return children;
}


gflirt 07.07.2011 23:41

спасибо, работает


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

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