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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

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

Регистрация: Apr 2004
Сообщений: 5
По умолчанию как управлять системой событий?

Господа, внемлите душераздирающему воплю!

Что есть:
Есть два слоя, на каждом из которых лежит мувик.
Чередой производственных мероприятий определённый скрипт синхронно создаёт в каждом из вышеописанных мувиков по, собственно, мувику и назначает каждому новорожденному фукцию обработки события onmousedown в которой всего-навсего вызывается trace(this).

Что ожидал:
Я, как душа весьма доверчивая, ожидал, что сначала mousedown обработается для всех дочерних объектов того мувика, что лежит сверху в палитре слоёв. Т.е. я думал что флеш будет проходиться по иерархии строго последовательно.

Что получилось:
Собственно, оказалось, что при динамическом создании мувиков флеш размещает объекты иерархично только в системе, отвечающей за отображение. Т.е. дочерние объекты мувика, что лежит в верхнем слое будут всегда перекрывать дочерние объекты нижнего мувика. Это хорошо. Но вот события обрабатываются в порядке, обратном созданию этих мувиков.

Что надо:
Надо, чтобы сначала флеш обработал события mousedown сначала всех дочерних объектов верхнего мувиков, а потом всех нижнего, т.е. также как получилось бы при статическом содании объектов.

Что не надо:
Советы, аля "в mousedown'е рута пройтись циклом по всем дочерним объектам одного мувика потом другого" мне не нужны ибо сам не дурак . Меня интересуют возможности управления событийной системой во флеше и советы тех, кто решал подобные задачи.

Заранее огромное спасибо.


Последний раз редактировалось alex_h_gerto; 06.04.2004 в 18:12.
Старый 06.04.2004, 18:16
Dindin вне форума Посмотреть профиль Отправить личное сообщение для Dindin Посетить домашнюю страницу Dindin Найти все сообщения от Dindin
  № 2  
Dindin
 
Аватар для Dindin

Регистрация: Feb 2004
Адрес: на колокольне Любит: плеваться
Сообщений: 1,769
Отправить сообщение для Dindin с помощью ICQ
Длинно, мутно и много нопределенных терминов. Если приложишь ма-а-ленький исходник будет проще. А так я даже не понял о чем ты - то ли о динамической загрузке объектов то ли об их инициализации
__________________
судью - на мыло, из игроков - вить веревки.

Старый 06.04.2004, 18:38
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 3  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
Цитата:
Оригинал написал(а) Dindin
я даже не понял о чем ты - то ли о динамической загрузке объектов то ли об их инициализации ;)
не о том и не о другом :))

2alex_h_gerto
вам, товарисч, на стихи.ру, пожалуй :))

приоритет выполнения обработчиков событий зависит от порядка создания клипов. это верно. порядок создания клипов в главной линейке указан в паблиш сеттингсах в графе Load Order. если там поменять с дефолтового Bottom Up на Top Down, то порядок выполнения обработчиков, навешенных на клипы созданные вручную в линейке изменится. (для клипов лежащих в одном слое первым выполняется тот обработчик, который прикреплен к клипу с большим z-индексом (глубиной)).

для динамических клипов важен только порядок создания, не глубина. клип созданный последним выполняет свои обработчики первым (стек LIFO).


Последний раз редактировалось Nox Noctis; 06.04.2004 в 18:41.
Старый 06.04.2004, 19:46
alex_h_gerto вне форума Посмотреть профиль Отправить личное сообщение для alex_h_gerto Найти все сообщения от alex_h_gerto
  № 4  
alex_h_gerto

Регистрация: Apr 2004
Сообщений: 5
Цитата:
Оригинал написал(а) Nox Noctis
вам, товарисч, на стихи.ру, пожалуй )
Благодарю покорно, но боюсь с такими вопросами меня там не ждут.
Цитата:
приоритет выполнения обработчиков событий зависит от порядка создания клипов. это верно. порядок создания клипов в главной линейке указан в паблиш сеттингсах в графе Load Order. если там поменять с дефолтового Bottom Up на Top Down, то порядок выполнения обработчиков, навешенных на клипы созданные вручную в линейке изменится. (для клипов лежащих в одном слое первым выполняется тот обработчик, который прикреплен к клипу с большим z-индексом (глубиной)).

для динамических клипов важен только порядок создания, не глубина. клип созданный последним выполняет свои обработчики первым (стек LIFO).
Вот я и нахожусь в той ситуации, когда важна именно глубина (г-н Лукьяненко аплодирует).

Тогда, выходит, остаётся только реализовывать систему событий собственными руками.

От лица всех огорошенных ожидаемыми, но безрадостными знаниями выражаю глубокую признательность
Спасибо!

Старый 06.04.2004, 20:02
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 5  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
так почему бы не позаботиться о правильном порядке создания клипов ?

нужно только централизовать код, который создаёт клипы.

Старый 06.04.2004, 20:14
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 6  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
а вот я еще велосипед придумал :)
очередной...
Код:
ASBroadcaster.initialize(_root);
_root.onMouseDown = function() {
	this.broadcastMessage("onClick");
};
//
_root.createEmptyMovieClip("a", 1);
_root.createEmptyMovieClip("b", 2);
_root.createEmptyMovieClip("c", 3);
_root.createEmptyMovieClip("d", 4);
_root.createEmptyMovieClip("e", 5);
//
test = function () {
	trace(this);
};
//
a.onClick = b.onClick=test;
c.onClick = d.onClick=test;
e.onClick = test;
//
_root.addListener(a);
_root.addListener(b);
_root.addListener(c);
_root.addListener(d);
_root.addListener(e);
//
trace(_root._listeners);
_root._listeners.reverse();
trace(_root._listeners);
создаём новое событие с тем же смыслом. это нам нужно чтобы управлять порядком исполнения его обработчиков...

если ничего не менять. то обработчики выполняются в порядке вызова addListener для всех объектов подписанных на это событие.

ссылки на слушающие объекты помещаются в массив _listeners внутри объекта-передатчика событий. этот массив можно переколбасиь как угодно, и обработчики будут выполняться именно в том порядке, в каком объекты расположены в этом массиве.

аминь :)

Старый 06.04.2004, 20:19
alex_h_gerto вне форума Посмотреть профиль Отправить личное сообщение для alex_h_gerto Найти все сообщения от alex_h_gerto
  № 7  
alex_h_gerto

Регистрация: Apr 2004
Сообщений: 5
Цитата:
Оригинал написал(а) Nox Noctis
так почему бы не позаботиться о правильном порядке создания клипов ?

нужно только централизовать код, который создаёт клипы.
Проблема в том, что этот самый централизированный код создаёт клипы по двум параллелям (слоям). В зависимости от действий пользователя на первом слое, на втором что-то происходит. Основная причины моих душевных мучений состоит в том, что и объекты первого слоя, и объекты второго обрабатывают события, а поскольку верхний слой в идеологически имеет больший приоритет, то нельзя допустить чтобы второй выхватывал сообщения "вперёд батьки".

Самое смешное, что да, событийная система определяется LIFO, а визуализируются те же самые динамические клипы в строгом соответствии с иерархией. Т.е., дочерний объект верхнего мувика всегда перекроет дочерний нижнего, даже если дочерние нижнего создавались последними.. Именно такое несоответствие меня и огорчает


Последний раз редактировалось alex_h_gerto; 06.04.2004 в 20:21.
Создать новую тему   Часовой пояс GMT +4, время: 14:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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