这个问题是对链接问题的跟进: Making a Movieclip which is set as mask clickable and respond to MouseEvents
我在舞台上的图层结构如下所示:
holder_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。知道我哪里错了。提前谢谢。
答案 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