制作一个设置为可点击掩码的Movieclip并响应鼠标事件

时间:2011-07-26 15:00:25

标签: flash actionscript-3 mouseevent

我正在尝试平移电影剪辑

我在舞台上有两个动画片段。 canvasPanel_mc和mask_mc。前者是面具的掩饰(mask_mc)。在mask_mc里面有一个movieclip dragCanvas_mc。 dragCanvas_mc的alpha设置为零。这是我正在使用的代码:

mask_mc.dragCanvas_mc.addEventListener(MouseEvent.MOUSE_DOWN,onStartDrag);
mask_mc.dragCanvas_mc.addEventListener(MouseEvent.MOUSE_OUT,onStopDrag);
mask_mc.dragCanvas_mc.addEventListener(MouseEvent.MOUSE_UP,onStopDrag);

function onStartDrag(evt:MouseEvent)
{
 canvasPanel_mc.startDrag();
}
function onStopDrag(evt:MouseEvent)
{
 canvasPanel_mc.stopDrag();
}

我认为,由于mask_mc被设置为掩码,因此未注册MouseEvents。有没有办法让它响应MouseEvents。或者我应该以其他方式解决。

2 个答案:

答案 0 :(得分:1)

您要屏蔽的内容不必位于mask-movieclip中。通常,面具只是一个矩形的精灵/形状,除了图形画布上的绘图外没有任何内容。

var mask:Shape = new Shape();
mask.graphics.beginFill(0xff0000, 1);
mask.graphics.drawRect(0, 0, 20, 20);
addChild(mask);

然后你会创建容器:

var container:Sprite = new Sprite();
addChild(container);
container.mask = mask;

然后只需将eventlistener添加到容器中:

container.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
private function onMouseDown(evt:MouseEvent):void
{
  container.startDrag();
}

您还可以将其他MC添加到容器精灵中......

关于wonderfl的例子:http://wonderfl.net/c/nqpN

答案 1 :(得分:1)

图层的结构应如下所示:

  • holder_mc
    • dragCanvas_mc
    • mask_mc
    • canvasPanel_mc

然后:

canvasPanel_mc.mask = mask_mc;

当你将mask_mc设置为canvasPanel_mc的掩码时,mask_mc只会变成一个diplayobject,因此它会绕过mouseEvents等...

然后你的代码看起来像这样,它会拖动所有holder_mc:

dragCanvas_mc.addEventListener(MouseEvent.MOUSE_DOWN,onStartDrag);

function onStartDrag(evt:MouseEvent)
{
    stage.addEventListener ( MouseEvent.MOUSE_UP,onStopDrag)
    startDrag();
}
function onStopDrag(evt:MouseEvent)
{
    stage.removeEventListener( MouseEvent.MOUSE_UP,onStopDrag)
    stopDrag();
}

@pkyeck解决方案也是有效的,但只有当你在canvasPanel_mc中没有用户迭代时