Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.11.2012, 10:11
Error202 вне форума Посмотреть профиль Отправить личное сообщение для Error202 Найти все сообщения от Error202
  № 1  
Ответить с цитированием
Error202
 
Аватар для Error202

Регистрация: Sep 2001
Адрес: Russia, Moscow
Сообщений: 79
Отправить сообщение для Error202 с помощью ICQ Отправить сообщение для Error202 с помощью Skype™
Question По детям до родителя

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

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

Старый 28.11.2012, 12:18
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 2  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
если величина вложенности известна можно использовать конструкцию 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);
 
 
				}
			}
		}
	}
но если уровень вложенности неизвестен на каком этапе остановиться все равно не понятно эта функция переберет все

Старый 28.11.2012, 12:20
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 3  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
В общем случае вам нужно использовать свойство 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;
}


Последний раз редактировалось bav; 28.11.2012 в 12:35.
Старый 28.11.2012, 16:38
Error202 вне форума Посмотреть профиль Отправить личное сообщение для Error202 Найти все сообщения от Error202
  № 4  
Ответить с цитированием
Error202
 
Аватар для Error202

Регистрация: Sep 2001
Адрес: Russia, Moscow
Сообщений: 79
Отправить сообщение для Error202 с помощью ICQ Отправить сообщение для Error202 с помощью Skype™
Супер, то, что надо! Спасибо!

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:27.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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