![]() |
|
||||||||||
|
|||||
|
Есть клип MC с большим вложением...
Сам клип MC находится в клипе MCP... Как мне получить имя клипа MC из самого последнего вложенного его клипа? Т.е. каким образом я могу перебирая детей и их родителей добраться до MC снизу? |
|
|||||
|
если величина вложенности известна можно использовать конструкцию mc.parent.parent....parent, да простят меня поборники ООП, а если неизвестно - то только рекурсия вам в помощь, что то вроде этого, например:
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); } } } } |
|
|||||
|
В общем случае вам нужно использовать свойство parent и двигаться по родителям вверх, пока не достигнете нужно клипа. Раз нам не известно имя клипа, на котором нужно остановиться (иначе мы просто проверяли бы свойство name), то нужно что-то еще информирующее нас о достижении нужного клипа. Например если нам известно имя родителя нужного нам клипа, то можно в цикле перебора родителей хранить две ссылки: на текущий клип и на его родителя. Как только имя родителя совпадает с искомым, значит текущий клип ссылается на требуемый нам клип.
Или каким-либо еще образом помечать искомый клип. Далее приведен псевдокод отражающий идею, понятно, что у класса DisplayObject нет свойства mark. 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; } Последний раз редактировалось bav; 28.11.2012 в 12:35. |
|
|||||
|
Супер, то, что надо! Спасибо!
|
![]() |
![]() |
Часовой пояс GMT +4, время: 00:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|