【问题标题】:Making a Movieclip which is set as mask clickable and respond to MouseEvents制作一个设置为可点击掩码并响应鼠标事件的影片剪辑
【发布时间】:2011-07-26 15:00:25
【问题描述】:

我正在尝试平移影片剪辑

我在舞台上有两个短片。 canvasPanel_mc 和 mask_mc。前者是掩码的掩码对象(mask_mc)。在 mask_mc 中​​有一个动画剪辑 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。或者我应该用其他方式解决问题。

【问题讨论】:

    标签: flash actionscript-3 mouseevent


    【解决方案1】:

    层的结构应该是这样的:

    • holder_mc
      • dragCanvas_mc
      • mask_mc
      • canvasPanel_mc

    然后:

    canvasPanel_mc.mask = mask_mc;
    

    当你将 mask_mc 设置为 canvasPanel_mc 的掩码时,mask_mc 就变成了一个显示对象,这样它就可以绕过 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 内没有用户迭代时

    【讨论】:

    • 两种解决方案都有效。就我而言,我在 canvasPanel_mc 中​​有很多用户交互。非常感谢 pkyeck 和 Jevgenij Dmitrijev。
    【解决方案2】:

    您想要遮罩的内容不必在遮罩影片剪辑内。通常,蒙版只是一个矩形精灵/形状,除了图形画布上的绘图外,什么都没有。

    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();
    }
    

    您还可以将额外的 MC 放入容器 sprite ...

    wonderfl 示例:http://wonderfl.net/c/nqpN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-13
      • 2011-01-10
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      相关资源
      最近更新 更多