![]() |
"Война" событий :)
Друзья, подскажите, пожалуйста, как победить конфликт между событиями?
Вот есть clip1. Внутри него есть clip2. ==================================== clip1.clip2.onPress = function() { trace("Зеленый"); }; ==================================== При клике на втнутренний клип событие срабатывает. Но стоит добавить обработчик для "внешнего" клипа - ==================================== clip1.onRollOver = function() { trace("Над черным"); }; ==================================== событие внутреннего клипа не происходит. Весьма неудобно, приходится изголяться, сильно усложняя код. Наверяка есть грамотное решение, а? |
Можно например юзать hitTest.
Или если я правильно помню, можно вместо клипов использовать Button-ы и в основных пропертях сменить "Track as Button" на "Track as menu item". Хотя могу и ошибаться... |
Цитата:
|
Код:
movie1.onRelease = function() { |
Спасибо за ответы! Не попадалось мне обсуждение этого вопроса раньше, простите.
|
Вложений: 1
>>Наверяка есть грамотное решение, а?
решений может быть много, но в каждом конкретном случае свое.. если любопытно вот решение,претендующее на некую универсальность: на прототип мувиклипа вешаем просмотр хиттестов всех мувиков, опредляем на какие пришелся клик, если их несколько, вычисляем кто верхний, вещаем событие с таргетом=этому мувику: Код:
import mx.events.EventDispatcher; |
silin, спасибо, интересно! Попробую разобраться.
Есть один момнет, который я не понимаю. Когда речь идет о, скажем, событии onPress - то проблема со вложенным клипом понятна. Возникает некая двойственность. Но если для "внешнего" клипа определено событие onRollOver, то что мешает событию onPress для внутреннего? Ведь ролловер уже произошло и, скажем так, можно о нем и забыть? Почему оно блокирует клик по внутреннему? Ну, я готов принять это как факт, но мне непонятен смысл :)) |
придется принять это как факт
(или смотреть в сторону AS3: там этого гемора уже нет..) |
Всё достаточно просто, если подписываешь клип на одно из кнопочных событий (onRollOver к ним тоже относится), клип начинает вести себя как кнопка, глуша при этом все события внутренних клипов.
На мой взгляд, наиболее эффективное решение - внешний клип использовать только как контейнер, не вешая на него событий, а для всей реакции на действия пользователей выделять смысловуе зоны. Метод с использованием hitTest мне не особо нравится из-за замедления производительности и из-за корявости самого hitTest. Ради интереса можно попробовать потестить им клип в форме полумесяца :) |
>>из-за корявости самого hitTest.
про какую корявость речь ? >>Ради интереса можно попробовать потестить им клип в форме полумесяца да хоть в форме звезды Давида: mc.hitTest(x,y,true) |
| Часовой пояс GMT +4, время: 14:41. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.