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

Error202 28.11.2012 10:11

По детям до родителя
 
Есть клип MC с большим вложением...
Сам клип MC находится в клипе MCP...

Как мне получить имя клипа MC из самого последнего вложенного его клипа?
Т.е. каким образом я могу перебирая детей и их родителей добраться до MC снизу?

PainKiller 28.11.2012 12:18

если величина вложенности известна можно использовать конструкцию mc.parent.parent....parent, да простят меня поборники ООП, а если неизвестно - то только рекурсия вам в помощь, что то вроде этого, например:
Код AS3:

public function traceDisplayStackOf(obj:DisplayObjectContainer):void
        {
                var len:int;
                if (obj.numChildren != undefined)
                {
                        len = obj.numChildren;
                        trace("--------------!!!traceDisplayStackOf!!!-----------------");
                        for (var i:int = 0; i < len; ++i)
                        {
                                if (obj.getChildAt(i) is DisplayObjectContainer)
                                {
                                        var c:DisplayObjectContainer = DisplayObjectContainer(obj.getChildAt(i));
                                        var r:Rectangle = new Rectangle(c.x, c.y, c.width, c.height);
                                        trace(c + " :: " + r);
                                        traceDisplayStackOf(c);
                                }
                                else
                                {
                                        var c2:DisplayObject = obj.getChildAt(i);
                                        var r2:Rectangle = new Rectangle(c2.x, c2.y, c2.width, c2.height);
                                        trace(c2 + " :: " + r2);
 
 
                                }
                        }
                }
        }

но если уровень вложенности неизвестен на каком этапе остановиться все равно не понятно эта функция переберет все

bav 28.11.2012 12:20

В общем случае вам нужно использовать свойство parent и двигаться по родителям вверх, пока не достигнете нужно клипа. Раз нам не известно имя клипа, на котором нужно остановиться (иначе мы просто проверяли бы свойство name), то нужно что-то еще информирующее нас о достижении нужного клипа. Например если нам известно имя родителя нужного нам клипа, то можно в цикле перебора родителей хранить две ссылки: на текущий клип и на его родителя. Как только имя родителя совпадает с искомым, значит текущий клип ссылается на требуемый нам клип.
Или каким-либо еще образом помечать искомый клип. Далее приведен псевдокод отражающий идею, понятно, что у класса DisplayObject нет свойства mark.
Код AS3:

function getMarkedClip(fromClip:DisplayObject, mark:/*SomeClass*/):DisplayObject
{
    var result:DisplayObject = (fromClip.mark == mark ? fromClip : null);
    if (result)
        return result;
    var clip:DisplayObject = fromClip;
    while (clip.parent)
    {
        clip = clip.parent;
        if (clip.mark == mark)
        {
            result = clip;
            break;
        }
    }
    return result;
}


Error202 28.11.2012 16:38

Супер, то, что надо! Спасибо!


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

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