![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2010
Сообщений: 137
|
У меня есть movieClip, который изображает собой курсор мышки. Под ним могут быть другие movieClip-ы, которые слушают события мыши, но к ним события не доходят из-за того, что курсор всегда вверху.
Как заставить клип курсора пропускать дальше события мышки? Пробовал выключать mouseEnabled для курсора - не помогает. |
|
|||||
|
Если внутри курсора находятся другие объекты, то попробуйте курсору задать mouseChildren = false. Если нет, то при mouseEnabled = false курсор не должен ловить события мыши. Если он ловит, то покажите код или исходник.
|
|
|||||
|
Регистрация: Mar 2010
Сообщений: 137
|
Странно. Вот на таком примере работает:
var theButton:ButtonWrapper = new ButtonWrapper(new IncreaseButtonMovie()); theButton.x = 100.0; theButton.y = 100.0; this.addChild(theButton); var theCursor:MovieClip = new MovieClip(); theCursor.graphics.lineStyle(1.0, 0x00FF00, 1.0); theCursor.graphics.beginFill(0x0000FF, 0.5); theCursor.graphics.drawCircle(0.0, 0.0, 50.0); theCursor.graphics.endFill(); theCursor.mouseChildren = false; theCursor.mouseEnabled = false; this.addChild(theCursor); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener); function mouseMoveListener(ev:MouseEvent) { theCursor.x = ev.stageX; theCursor.y = ev.stageY; } Добавлено через 42 секунды Да, тут buttonWrapper: package view.buttons { import flash.display.MovieClip; import flash.events.MouseEvent; import flash.events.Event; public class ButtonWrapper extends MovieClip { public static const ACTIOIN_EVENT:String = "ActionEvent"; private var _graphic:MovieClip; public function ButtonWrapper(aGraphic:MovieClip) { _graphic = aGraphic; this.addChild(aGraphic); // Animation initialization _graphic.gotoAndStop(1); initEvents(); } private function pressed() { var theEvent:Event = new Event(ACTIOIN_EVENT); this.dispatchEvent(theEvent); } // *************** // Initializations // *************** private function initEvents() { _graphic.addEventListener(MouseEvent.ROLL_OUT, rollOutHandle); _graphic.addEventListener(MouseEvent.ROLL_OVER, rollOverHandle); _graphic.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandle); _graphic.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandle); } // ******** // Handlers // ******** private function rollOutHandle(anEvent:MouseEvent) { _graphic.gotoAndStop(1); } private function rollOverHandle(anEvent:MouseEvent) { _graphic.gotoAndStop(2); } private function mouseDownHandle(anEvent:MouseEvent) { this.pressed(); _graphic.gotoAndStop(3); } private function mouseUpHandle(anEvent:MouseEvent) { _graphic.gotoAndStop(2); } } } |
|
|||||
|
Дайте .fla файл. По коду непонятно в чем проблема.
|
|
|||||
|
Регистрация: Mar 2010
Сообщений: 137
|
Проект во вложении. Там есть такие круглые штуки. Их можно соединять (украдено из InterfaceBuilder-а XCode-а). В классе ConnectionController, метод beginConnectionWithSlot(aSlot:MovieClip) создаётся movieClip, в котором линия соединения рисуется. Если сделать зум, можно заметить, что этот клип перехватывает события, из-за чего не детектиться наведение мышки на кнопку-слот.
В плане архитектуры там хреновато всё, но это не суть важного. |
|
|||||
|
У меня все работает. "Круглые штуки" соединяются.
|
|
|||||
|
Регистрация: Mar 2010
Сообщений: 137
|
Там дело в том, что если увеличить изображение в плеере, можно заметить как "круглая штука" (я её слотом буду дальше называть) не реагирует на наведение мышкой когда поверх неё (слота) находится соединение (зелёная линия). Я подозреваю, что это из-за того, что соединение забирает себе событие наведения мышки и не пускает его дальше.
|
|
|||||
|
Может надо для _connections сделать mouseChildren = false и mouseEnabled = false?
|
|
|||||
|
mouseEnabled и mouseChildren такие подлые штуки, что отключают мышь только в рамках конейнера.
Т.е. если A и B лежат в C и B перекрывает A - то выставление B.mouseEnabled = false и B.mouseChildren = false сделает прозрачным B для A, но никак перекрыть те спрайты, что лежать вне C! Как быть с курсором? Надо сделать такую структуру всего проекта: --Документ-класс ----Главный контейнер ------всякие нужные для игры вещи ------другие вещи --------другие спрайты, лежащие в других вещах ----Контейнер для курсора с mouseEnabled = false(если на контейнере что-то нарисовано) и mouseChildren = false(для самого курсора) -------Курсор(если здесь выставлять mouseEnabled = false - не будет перекрывать только лежащее внутри контейнера для курсора) -------Другие вещи, которые не должны перекрывать то что лежит в главном контейнере |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 137
|
Ясно, expl, спасибо за совет и за инфморацию. Попробую переделать так, как вы сказали.
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|