Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   "Прозрачность" для событий (http://www.flasher.ru/forum/showthread.php?t=192406)

semenyakinVS 13.01.2013 16:59

"Прозрачность" для событий
 
У меня есть movieClip, который изображает собой курсор мышки. Под ним могут быть другие movieClip-ы, которые слушают события мыши, но к ним события не доходят из-за того, что курсор всегда вверху.

Как заставить клип курсора пропускать дальше события мышки? Пробовал выключать mouseEnabled для курсора - не помогает.

TWETTI 13.01.2013 17:18

Если внутри курсора находятся другие объекты, то попробуйте курсору задать mouseChildren = false. Если нет, то при mouseEnabled = false курсор не должен ловить события мыши. Если он ловит, то покажите код или исходник.

semenyakinVS 13.01.2013 18:03

Странно. Вот на таком примере работает:

Код AS3:

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:

Код AS3:

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);
                }
        }
}


TWETTI 13.01.2013 18:48

Дайте .fla файл. По коду непонятно в чем проблема.

semenyakinVS 13.01.2013 19:07

Вложений: 1
Проект во вложении. Там есть такие круглые штуки. Их можно соединять (украдено из InterfaceBuilder-а XCode-а). В классе ConnectionController, метод beginConnectionWithSlot(aSlot:MovieClip) создаётся movieClip, в котором линия соединения рисуется. Если сделать зум, можно заметить, что этот клип перехватывает события, из-за чего не детектиться наведение мышки на кнопку-слот.

В плане архитектуры там хреновато всё, но это не суть важного.

TWETTI 13.01.2013 19:17

У меня все работает. "Круглые штуки" соединяются.

semenyakinVS 13.01.2013 19:34

Там дело в том, что если увеличить изображение в плеере, можно заметить как "круглая штука" (я её слотом буду дальше называть) не реагирует на наведение мышкой когда поверх неё (слота) находится соединение (зелёная линия). Я подозреваю, что это из-за того, что соединение забирает себе событие наведения мышки и не пускает его дальше.

TWETTI 13.01.2013 20:18

Может надо для _connections сделать mouseChildren = false и mouseEnabled = false?

expl 13.01.2013 20:43

mouseEnabled и mouseChildren такие подлые штуки, что отключают мышь только в рамках конейнера.
Т.е. если A и B лежат в C и B перекрывает A - то выставление B.mouseEnabled = false и B.mouseChildren = false сделает прозрачным B для A, но никак перекрыть те спрайты, что лежать вне C!

Как быть с курсором? Надо сделать такую структуру всего проекта:
Код:

--Документ-класс
----Главный контейнер
------всякие нужные для игры вещи
------другие вещи
--------другие спрайты, лежащие в других вещах
----Контейнер для курсора с mouseEnabled = false(если на контейнере что-то нарисовано) и mouseChildren = false(для самого курсора)
-------Курсор(если здесь выставлять mouseEnabled = false - не будет перекрывать только лежащее внутри контейнера для курсора)
-------Другие вещи, которые не должны перекрывать то что лежит в главном контейнере


semenyakinVS 13.01.2013 21:52

Ясно, expl, спасибо за совет и за инфморацию. Попробую переделать так, как вы сказали.

Цитата:

Может надо для _connections сделать mouseChildren = false и mouseEnabled = false?
Да. В архиве, который залил сюда этого нет. Но я пробовал так всё настроить, ничего не работало.


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

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