使掩码下的Movieclip可单击并响应鼠标事件

时间:2011-07-27 07:13:28

标签: actionscript-3 flash mouseevent masking

这个问题是对链接问题的跟进: Making a Movieclip which is set as mask clickable and respond to MouseEvents

我在舞台上的图层结构如下所示:

  • holder_mc

    • dragCanvas_mc
    • mask_mc
    • canvas_mc

dragCanvas_mc - 用于平移目的。

mask_mc - canvas_mc的掩码

我现在面临一个问题。我无法在canvas_mc

上注册MouseEvents

这是必需的,因为我必须在画布上绘图

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

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

我在输出窗口中看不到Hello。知道我哪里错了。提前谢谢。

2 个答案:

答案 0 :(得分:1)

可能是你的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将忽略它。

答案 1 :(得分:1)

如果'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