![]() |
Как заставить срабатывать событие MOUSE_OVER у всех MC под курсором мышки?
Есть необходимость сделать следующий пирог:
- внизу лежит большой и плоский мувиклип, на котором набросаны эффекты, связанные с отслеживанием событий MOUSE_OVER/MOUSE_OUT курсора мыши, например, зажигаются/гаснут некоторые сектора сцены. - вверху над этим клипом висят динамически порожденные объекты, у которых свои листенеры событий MOUSE_OVER/MOUSE_OUT Никаких родственных отношений ни у кого нет (и мне нужно обойтись без них по разным причинам). Сейчас когда мышка двигается по сцене, отрабатывают события клипа на бэкграунде, но при заходе на объект, тот перехватывает ее события MOUSE_OVER/MOUSE_OUT и они вниз уже не проходят. Как победить? |
Сделать свое всплывающее событие (bubbles = true) и отсылать его при MOUSE_OVER
|
на вскидку не получилось.
сделал так: объектам, которые висят спереди, в обработку события MOUSE_OVER добавил генерацию события "mouseOverObject", а всем объектам, которые сидят внутри мувика на бэкграунде повесил листенер на событие "mouseOverObject". Но событие туда не прошло. Может это из-за того, что мувик на бэкграунде подкачивается и запускается во время исполнения приложения? |
Цитата:
|
Код AS3:
|
А, ну, нижележащие объекты событий мыши не получат. Вам нужно написать контроллер мыши, который, используя getObjectsUnderPoint будет выделять нужные объекты.
|
Через getObjectsUnderPoint - довольно занятно.
а есть у нас способ проверить, существует ли у объекта такой-то метод? Я бы применил этот метод ко всем объектам под курсором мыша, у которых метод существует и все. можно, конечно, через try, но не люблю плодить ошибки запланированно. |
Повесить на них интерфейс какой-нибудь. Нужно учесть, что getObjectsUnderPoint будет выдавать вам ссылки на шейпы внутри ваших объектов, а не на сами объекты. Поэтому нужно проходить по parent-ам и выяснять, на что наведена мышь.
|
да уж...
что-то мне кажется, должен быть какой-нибудь простой способ реализации всего этого. А нет ли у нас возможности запускать событие не вообще воздух, а в конкретный контейнер? Или не так. У нас есть контейнер, его имя мы знаем. Нулевым чилдом кладем алармер, когда нужно разослать события объектам внутри контейнера, дергаем этого алармера, он диспатчит событие... Остальные объекты внутри контейнера это событие услышат? |
сделайте общий контейнер для клипа с эффектами и для объектов, в нем ловите MOUSE_OVER объектов и дергайте клип с эффектами. В принципе клип с эффектами может и не быть ребенком контейнера, достаточно иметь на него ссылку.
|
Ну может не корректно, но может пригодиться. А почему бы на время взаимодействия с верхними слоями, не удалять отслеживания событий для нижнего слоя.
|
На самом деле я хотел найти способ не лазить в бэкграунд.
Формирую страницу по структуре, прописанной в xml. Мувики грузятся последовательно с привязкой к координатам. В основном это зацикленные по кругу изображения или программные анимации типа огня или дыма. В самый низ кладется мувик-бэкграунд, внутри которого есть свои листенеры на мышь и который сам по себе на нее реагирует. Более того, в общем виде хотелось бы даже не знать, что там за бэкграунд и как он на эту мышь реагирует. В ряде случаев там вообще может быть статичный жипег. Поэтому и была мысль - нельзя ли как-нибудь прокинуть события мыши вниз, чтобы объекты, висящие вверху, их не перехватывали. Но, судя по всему, так не получается. |
вниз это значит в родительский контейнер или дальше по иерархии родителей - так можно. Объясните что вы имеете ввиду под низом?
|
внизу с точки зрения глубины))
Код AS3:
|
Цитата:
|
| Часовой пояс GMT +4, время: 19:32. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.