1

这个问题是对链接问题的跟进: 制作一个设置为可点击蒙版并响应 MouseEvents 的影片剪辑

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

  • 持有人_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");
}

我在输出窗口中看不到你好。任何想法我错了。提前致谢。

4

2 回答 2

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将忽略它。

于 2011-07-27T22:43:32.690 回答
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#命中测试点%28%29

于 2011-07-28T02:47:30.657 回答