Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 制作一个设置为可点击掩码并响应鼠标事件的Movieclip_Flash_Actionscript 3_Mouseevent - Fatal编程技术网

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

Flash 制作一个设置为可点击掩码并响应鼠标事件的Movieclip,flash,actionscript-3,mouseevent,Flash,Actionscript 3,Mouseevent,我正试着拍一部电影 我在舞台上有两部电影。拉票小组和面具小组。前者是面具的面具(mask_mc)。在面具里面有一个电影剪辑。dragCanvas_mc的alpha设置为零。这是我正在使用的代码: mask_mc.dragCanvas_mc.addEventListener(MouseEvent.MOUSE_DOWN,onStartDrag); mask_mc.dragCanvas_mc.addEventListener(MouseEvent.MOUSE_OUT,onStopDrag); mask

我正试着拍一部电影

我在舞台上有两部电影。拉票小组和面具小组。前者是面具的面具(mask_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被设置为mask,所以MouseEvents没有被注册。有没有办法让它对鼠标事件做出反应。或者我应该换个方式

要屏蔽的内容不一定要在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;
container.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
private function onMouseDown(evt:MouseEvent):void
{
  container.startDrag();
}
然后只需将eventlistener添加到容器:

var container:Sprite = new Sprite();
addChild(container);
container.mask = mask;
container.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
private function onMouseDown(evt:MouseEvent):void
{
  container.startDrag();
}
您还可以将其他MC放入容器sprite


wonderfl上的示例:

层的结构应如下所示:

  • 持票人
    • dragCanvas_mc
    • 面具
    • 游说小组委员会
然后:

当您将mask_mc设置为canvasPanel_mc的mask时,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\u mc中没有用户操作时,这两种解决方案才有效。在我的例子中,canvasPanel_mc中有很多用户交互。非常感谢pkyeck和Jevgenij Dmitrijev。