Сделать мувиклип под маской кликабельным и реагировать на MouseEvents

Этот вопрос является ответом на вопросы по ссылке: Создание мувиклипа, заданного как маска, кликабельным и реагирующим на MouseEvents

Структура ваших слоев, которые у меня есть на сцене, выглядит так:

  • держатель_mc

    • dragCanvas_mc
    • mask_mc
    • canvas_mc

dragCanvas_mc — используется для панорамирования.

mask_mc - Маска для canvas_mc

Я столкнулся с проблемой сейчас. Я не могу зарегистрировать MouseEvents на canvas_mc

Это необходимо, потому что я должен рисовать на холсте.

holder_mc.canvas_mc.addEventListener(MouseEvent.MOUSE_DOWN,onStartDrawing);

function onStartDrawing(evt:MouseEvent)
{
    trace("Hello");
}

Я не вижу Hello в окне вывода. Любая идея, где я ошибаюсь. Заранее спасибо.


person Bobby Francis Joseph    schedule 27.07.2011    source источник
comment
как точно выглядит структура? какие слои вложены, которые находятся на одном уровне? Может быть, вы можете показать код, как вы создаете все MC?   -  person Philipp Kyeck    schedule 27.07.2011
comment
1st - ваш canvas_mc - это пустой муви-клип? если да, то вам нужно добавить фон, на котором вы сможете щелкнуть. 2nd - ваш dragCanvas_mc перекрывает canvas_mc? если да, то нет, потому что он сам примет все события мыши.   -  person Jevgenij Dmitrijev    schedule 27.07.2011
comment
Удаленный ответ, слишком рано для меня!   -  person shanethehat    schedule 27.07.2011


Ответы (2)


Если «MovieClip A» находится выше «MovieClip B» в списке отображения, а «MovieClip A» имеет «mouseEnabled», то «MovieClip B» никогда не будет получать события «через» верхний MovieClip.

В вашем случае холст перетаскивания находится выше и, скорее всего, привязан к некоторым событиям мыши. Если это так, вам нужно обрабатывать события с помощью верхнего клипа (перетаскивая холст) и передавать их дочерним или родительским элементам,holder_mc.

holder_mc.addEventListener(MouseEvent.CLICK, onClick);

function onClick(e:MouseEvent):void {
    // do normal clicky stuff for this object
    // then..
    //

    if(canvas_mc.hitTestPoint(mouseX, mouseY, false)) {
        // do clicky stuff for canvas mc
    }    

}

Некоторые люди могут сказать, что используйте getObjectsUnderPoint, но с ним есть задокументированная ошибка, поэтому используйте hitTestPoint() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#hitTestPoint%28%29

person Chris    schedule 28.07.2011

Возможно, ваш mask_mc перехватывает события мыши. Вы можете попробовать этот тест, чтобы узнать, кто запускает MouseEvent.CLICK.

holder_mc.addEventListener(MouseEvent.CLICK,whoFiredTheEvent);

function whoFiredTheEvent(e:MouseEvent){
  trace(e.target.name + " fired the event");
}

Если это mask_mc или какой-то другой мувиклип, вы можете установить mouseEnabled в false для этого мувиклипа, и MouseEvent проигнорирует его.

person Paul Parker    schedule 27.07.2011