Flash 制作一个设置为可点击掩码并响应鼠标事件的Movieclip
我正试着拍一部电影 我在舞台上有两部电影。拉票小组和面具小组。前者是面具的面具(mask_mc)。在面具里面有一个电影剪辑。dragCanvas_mc的alpha设置为零。这是我正在使用的代码: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.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
- 面具
- 游说小组委员会
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。