Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как заставить срабатывать событие MOUSE_OVER у всех MC под курсором мышки? (http://www.flasher.ru/forum/showthread.php?t=135475)

mikhailk 24.01.2010 12:46

Как заставить срабатывать событие MOUSE_OVER у всех MC под курсором мышки?
 
Есть необходимость сделать следующий пирог:

- внизу лежит большой и плоский мувиклип, на котором набросаны эффекты, связанные с отслеживанием событий MOUSE_OVER/MOUSE_OUT курсора мыши, например, зажигаются/гаснут некоторые сектора сцены.
- вверху над этим клипом висят динамически порожденные объекты, у которых свои листенеры событий MOUSE_OVER/MOUSE_OUT

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

Сейчас когда мышка двигается по сцене, отрабатывают события клипа на бэкграунде, но при заходе на объект, тот перехватывает ее события MOUSE_OVER/MOUSE_OUT и они вниз уже не проходят.

Как победить?

alatar 24.01.2010 15:37

Сделать свое всплывающее событие (bubbles = true) и отсылать его при MOUSE_OVER

mikhailk 24.01.2010 16:18

на вскидку не получилось.

сделал так:

объектам, которые висят спереди, в обработку события MOUSE_OVER добавил генерацию события "mouseOverObject", а всем объектам, которые сидят внутри мувика на бэкграунде повесил листенер на событие "mouseOverObject". Но событие туда не прошло.

Может это из-за того, что мувик на бэкграунде подкачивается и запускается во время исполнения приложения?

etc 24.01.2010 17:43

Цитата:

Сообщение от mikhailk (Сообщение 881610)
объектам, которые висят спереди, в обработку события MOUSE_OVER добавил генерацию события "mouseOverObject", а всем объектам, которые сидят внутри мувика на бэкграунде повесил листенер на событие "mouseOverObject". Но событие туда не прошло.

Вы событие всплывающим отправляете?

mikhailk 24.01.2010 19:09

Код AS3:

dispatchEvent(new Event("mouseOverObject",true));


etc 24.01.2010 19:17

А, ну, нижележащие объекты событий мыши не получат. Вам нужно написать контроллер мыши, который, используя getObjectsUnderPoint будет выделять нужные объекты.

mikhailk 24.01.2010 19:53

Через getObjectsUnderPoint - довольно занятно.
а есть у нас способ проверить, существует ли у объекта такой-то метод?
Я бы применил этот метод ко всем объектам под курсором мыша, у которых метод существует и все.

можно, конечно, через try, но не люблю плодить ошибки запланированно.

etc 24.01.2010 19:56

Повесить на них интерфейс какой-нибудь. Нужно учесть, что getObjectsUnderPoint будет выдавать вам ссылки на шейпы внутри ваших объектов, а не на сами объекты. Поэтому нужно проходить по parent-ам и выяснять, на что наведена мышь.

mikhailk 24.01.2010 20:48

да уж...
что-то мне кажется, должен быть какой-нибудь простой способ реализации всего этого. А нет ли у нас возможности запускать событие не вообще воздух, а в конкретный контейнер?

Или не так.
У нас есть контейнер, его имя мы знаем.
Нулевым чилдом кладем алармер, когда нужно разослать события объектам внутри контейнера, дергаем этого алармера, он диспатчит событие... Остальные объекты внутри контейнера это событие услышат?

alatar 25.01.2010 02:24

сделайте общий контейнер для клипа с эффектами и для объектов, в нем ловите MOUSE_OVER объектов и дергайте клип с эффектами. В принципе клип с эффектами может и не быть ребенком контейнера, достаточно иметь на него ссылку.


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

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