![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
ветеран форума
|
На сцене есть основной клип mcMain - внутри него 3 кнопки. Клик по кнопкам обрабатываются одним обработчиком.
Также на клик по stage подписан обработчик. Как в случае нажатия на кнопки внутри mcMain не обрабатывать событие от stage. Т.к сейчас выполняются и обработчик кнопок и обработчик клика по stage при клике на любую из кнопок. Пока вижу решение в одном общем обработчике для кнопок и для stage, и по типу кликнутого объекта выполнять нужные действия. Но может есть решение по правильнее и красивее? Для наглядности приведу кусочек кода private function init(event:Event = null):void { ........... mainBG.mcMain_navigateBotton_first.addEventListener(MouseEvent.CLICK, btNavigateClick); mainBG.mcMain_navigateBotton_second.addEventListener(MouseEvent.CLICK, btNavigateClick); mainBG.mcMain_navigateBotton_third.addEventListener(MouseEvent.CLICK, btNavigateClick); stage.addEventListener(MouseEvent.CLICK, stageClickHandler); } private function btNavigateClick(event:MouseEvent):void { //trace(event.target.name); var sLabel:String = '_' + String(event.target.name).split('_')[2]; mainBG.gotoAndStop(sLabel); } private function stageClickHandler(event:MouseEvent):void { mainBG.play(); }
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 31.01.2009 в 23:42. |
|
|||||
|
советую просмотреть тут первую презентацию, там вы найдете ответы на свои вопросы.
или/и почитать тут http://wiki.flash-ripper.com/?title=...82%D0%BE%D0%B2 Последний раз редактировалось Dima_DPE; 01.02.2009 в 00:13. |
|
|||||
|
ветеран форума
|
а к чему это применить?
т.е запретить распространение событию от stage? но при каком условии? вообщем я ушел читать материаллы по ссылкам ![]() Просмотрев презентацию по ссылке выше много чего там пока не понял, но понял что можно решить вопрос так: private function init(event:Event = null):void { ........... mainBG.mcMain_navigateBotton_first.addEventListener(MouseEvent.CLICK, btNavigateClick); mainBG.mcMain_navigateBotton_second.addEventListener(MouseEvent.CLICK, btNavigateClick); mainBG.mcMain_navigateBotton_third.addEventListener(MouseEvent.CLICK, btNavigateClick); stage.addEventListener(MouseEvent.CLICK, stageClickHandler); } private function btNavigateClick(event:MouseEvent):void { //trace(event.target.name); var sLabel:String = '_' + String(event.target.name).split('_')[2]; mainBG.gotoAndStop(sLabel); event.stopPropagation(); } private function stageClickHandler(event:MouseEvent):void { mainBG.play(); }
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 01.02.2009 в 00:57. |
|
|||||
|
Вариант, но не супер, вам придется останавливать событие на всех обработчиках, на 25 слайде презентации есть другой вариант решения вашей задачи.
|
|
|||||
|
ветеран форума
|
Растолкуйте, пожалуйста, что в данном случае происходит.
Я до конца всю логику данного примера понять не могу. Попытался сделать так: private function init(event:Event = null):void { ........... mainBG.mcMain_navigateBotton_first.addEventListener(MouseEvent.CLICK, btNavigateClick); mainBG.mcMain_navigateBotton_second.addEventListener(MouseEvent.CLICK, btNavigateClick); mainBG.mcMain_navigateBotton_third.addEventListener(MouseEvent.CLICK, btNavigateClick); stage.addEventListener(MouseEvent.CLICK, stageClickHandler); } private function btNavigateClick(event:MouseEvent):void { if (event.eventPhase != EventPhase.AT_TARGET) return; var sLabel:String = '_' + String(event.target.name).split('_')[2]; mainBG.gotoAndStop(sLabel); } private function stageClickHandler(event:MouseEvent):void { mainBG.play(); } Объясните плиз что происходит в данном случае, хотелось бы понять саму суть.
__________________
trace("Остановите Землю, я сойду!!!"); |
|
|||||
|
Вы снова все напутали или не снова, но да ладно. Попробуй сделать так и проследить за трейсом.
В случае клика по самой сцене фаза будет второй, при клике по чему то другому, фаза будет третей, об этом и говорилось на 25 слайде той демонстрации. А в обработчике события для кнопки это проверку уберите. |
|
|||||
|
ветеран форума
|
спасибо, я уже на эксперементировался
на самом деле все наоборот, при клике на сцене фаза будет третьей, т.к событие поднимается (пузырьковая), у меня основной клип-контейнер на весь размер сцены, а при клике на что либо еще можно проверять если currentTarget равен target то не обрабатывать событие от сцены, но такое решение не есть универсальным, т.к если мувик будет не на всю сцену то и событие от сцены не пройдет. Вообщем пока единственны правильным вижу event.stopPropagation(); Спасибо всем.
__________________
trace("Остановите Землю, я сойду!!!"); |
|
|||||
|
ветеран форума
|
У меня есть основной мувик, в нем есть три кнопки.
Размер мувика покрывает всю область сцены, поэтому при клике на сцене фаза никак второй не получается, т.к события идут ко всем детям если я правильно все понял (в моем случае к фону), и уже на третьей фазе сцена получает свое событие. Это по умолчанию, если нет фазы захвата. Но если в области клика не будет никаких элементов то фаза будет второй, но для моего случая такое условие не подходит. Или я не правильно все понимаю? ![]()
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 01.02.2009 в 22:37. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|