Цикл по childs в actionscript-3 - PullRequest
       30

Цикл по childs в actionscript-3

3 голосов
/ 06 августа 2009

Как вы перебираете все дочерние элементы в DisplayObjectContainer в as3? Я хотел бы синтаксис, как это:

for each(var displayObject:DisplayObject in displayObjectContainer )
{
    displayObject.x += 10;
    displayObject.y += 10;
}

Ответы [ 4 ]

13 голосов
/ 06 августа 2009

Не уверен, что для каждого работает, но это работает.

for (var i:int = 0; i<myObj.numChildren; i++)
{
    trace(myObj.getChildAt(i));
}
2 голосов
/ 09 августа 2009

Вы можете использовать следующую рекурсивную функцию для перебора всех дочерних элементов любого класса DisplayObjectContainer.

function getChildren(dsObject:DisplayObjectContainer, iDepth:int = 0):void
{
     var i:int = 0;
     var sDummyTabs:String = "";
     var dsoChild:DisplayObject;

     for (i ; i < iDepth ; i++)
         sDummyTabs += "\t";

     trace(sDummyTabs + dsObject);

     for (i = 0; i < dsObject.numChildren ; ++i)
     {
         dsoChild = dsObject.getChildAt(i);
         if (dsoChild is DisplayObjectContainer && 0 < DisplayObjectContainer(dsoChild).numChildren)
             getChildren(dsoChild as DisplayObjectContainer,++iDepth);
         else
             trace(sDummyTabs + "\t" + dsoChild);
     }
}

В нем будут отображаться все дочерние элементы в иерархическом порядке точно в виде дерева DisplayList.

2 голосов
/ 06 августа 2009

как то так может быть?

function getChildren(target:DisplayObjectContainer):Array {
    var count:uint = target.numChildren;
    var ret:Array = [];
    for (var i:int = 0; i < count; i++) 
        ret.push(target.getChildAt(0));
    return ret;
}   

, а затем

for each (var child:Array in getChildren(displayObjectContainer)) {
    //....
}

Greetz

back2dos

0 голосов
/ 22 мая 2012

Мои два цента.

    public static function traceDisplayList(displayObject:DisplayObject, maxDepth:int = 100, skipClass:Class = null, levelSpace:String = " ", currentDepth:int = 0):void 
    {
        if (skipClass != null) if (displayObject is skipClass) return;
        trace(levelSpace + displayObject.name);  // or any function that clean instance name
        if (displayObject is DisplayObjectContainer && currentDepth < maxDepth)
        {       
            for (var i:int = 0; i < DisplayObjectContainer(displayObject).numChildren; i++)
            {
                traceDisplayList(DisplayObjectContainer(displayObject).getChildAt(i), maxDepth, skipClass, levelSpace + "    ", currentDepth + 1);
            }
        }
    }   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...