Делаем мувиклип под маской кликабельным и отвечаем на MouseEvents - PullRequest
1 голос
/ 27 июля 2011

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

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

  • holder_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 в окне вывода.Любая идея, где я не прав.Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Если «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

1 голос
/ 28 июля 2011

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

holder_mc.addEventListener(MouseEvent.CLICK,whoFiredTheEvent);

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

Если это маска_mc или какой-либо другой фрагмент ролика, вы можете установить для mouseEnabled значение false для этого фрагмента ролика и * 1006.* проигнорирует это.

...