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

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

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

Регистрация: Mar 2013
Сообщений: 290
Post Доступ к экземплярам составного экземпляра

Всем привет.

В библиотеке есть составной мувиклип Clipdriver, который состоит из:

- рамки Frame
- области проигрывания мувиклипа Container,
- контейнера кнопок Buttonholder,
- кнопок управления: Button1, Button2, размещенных в этом Buttonholder'е.

Есть также три мувиклипа, которые должны проигрываться этим Clipdriver'ом.

Все вышеперечисленные объекты пролинкованы галочкой к одноименным классам.
Однако, каждый класс присутствует в виде .as файла, поэтому они не dynamic.

Опираясь на Третью Заповедь Wolsh'a, согласно которой, детям нельзя дергать родителей, я решил избежать употребления слушателей в кнопках Button1, Button2 (например, посредством хитрого обращения вверх типа this.parent.parent или там this.root, и т.п.) и решить эту проблему иначе.

Заморочка1: Я не знаю как толком "иначе".
Поэтому решил сделать вот как: создать внутри класса Clipdriver универсальный слушатель, который работает так:

Код AS3:
this.addEventListener(MouseEvent.CLICK, clipdriverHandler);
private function clipdriverHandler(e:Event)
		{
			//здесь отлавливаем нажатие на кнопки, например с помощью
			//e.target.parent, для того чтобы передать экземпляру Container 
 
		}
Заморочка2: И вот тут я понял, что не понимаю как отловить имя экземпляра класса Container!
То есть, когда мы создаем его посредством кода, тут всё легко. Но вот когда он формируется сам, потому что является частью более сложного экземпляра, то возникает непонимание. Нет, я конешно могу его узнать посредством trace, там будет что-то типа instance6, но это на уровне самого класса Container. А как его передать вверх? Ведь это ересь и анафема.

Сначала я подумал, что можно провернуть вот такой финт: в классе Container ввести строку:
Код AS3:
this.name = "container1";
и уже по имени отловить его в методе выше. Однако - неприятный сюприз, этот способ выдает ошибку:
Цитата:
Error #2078: The name property of a Timeline-placed object cannot be modified.
Потом я начал прикидывать: может быть создать в классе Container некое свойство, например, current_c, и присвоив ему this, как-то передать его выше. Однако это парадокс: нельзя передать свойство класса, содержащее имя экземпляра класса, не зная имени экземпляра класса.
(Вот щас подумал, может быть тут как-то статические свойства/методы использовать).

И наконец, третья идея: попробовать отловить событие ДОБАВЛЕНИЯ ЭКЗЕМПЛЯРА В ЭКЗЕМПЛЯР, и уже из него выцепить нужные имена.
Однако, я не знаю есть ли вообще такое? Генерирует ли оператор:
Код AS3:
this.addChild(mc);
некое событие?
Но тут опять проблема в том, что экземпляр Clipdriver является собранным в библиотеке, и даже если такие события происходят, то неявно.

Короче, что-то я запутался в этом разнообразии, прошу подсказок в любых направлениях.

А то начинаешь невольно приходить к выводам, что вот такие многовложенные формации нужно делать исключительно кодом.
То есть вбивая координаты каждого объекта по отношению к другому, юзать каскады addChild'ов и т.п. А это более муторно.

Всё-таки собрать в редакторе нужный объект посредством визуальных инструментов как-то проще и приятнее.


Последний раз редактировалось Fogflasher; 03.11.2013 в 00:44.
Старый 03.11.2013, 00:45
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 2  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Clipdriver.getChildAt() или Clipdriver.getChildByName() - так можно к детям обратится.
А про события внутри элемента из адобафлеш.. Если бы меня препёрло когда нибудь, что то в нём нарисовать, то слушателей я бы там не делал.
Мне кажется, лучше при помощи тех же методов, что я написал выше, присвоить ссылки переменным в классе и уже в самом классе и слушателей создавать.

Старый 04.11.2013, 13:14
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 3  
Ответить с цитированием
Frost47rus
[+4 08.09.13]

Регистрация: May 2012
Сообщений: 131
Перечитал трижды. А что сделать-то хотите?
И да, приложите fla-шку, чтобы понимать как вы всё устроили в редакторе.

Старый 06.11.2013, 09:18
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 4  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Всем спасибо, все оказалось очень просто, да так, что мне даже стыдно признаться в этом.
Если интересно, то могу рассказать, конешно.

Frost47rus, пока показывать что-то нет особого смысла. Вобщем, это некий простейший аналог ТВ-пульта, который переключая каналы, меняет отображаемый мувиклип. Кстати, если где-то кому-то встречались исходники реализация такого рода, было бы интересно заценить.

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

Теги
вложенность , вложенный клип , доступ
Опции темы
Опции просмотра

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

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


 


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


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