1

我有一些嵌套的电影剪辑。我在父级上有一个事件监听器,监听鼠标点击。问题是,侦听器从不接听点击。

代码:

    var movieClipStack:MovieClip = new MovieClip();

    for each (var ol:OwnedLayerable in owned_layerables)
    {
        var mc:MovieClip = ol.layerable.mc;
        movieClipStack.buttonMode = true;
        movieClipStack.addChild(mc);
    }

    movieClipStack.addEventListener(MouseEvent.CLICK, onStackClicked);

    private function onStackClicked(evt:MouseEvent):void
    {
        // Do some stuff
    }

在movieClipStack 上,我可以看到mouseEnabled = true。此外, buttonMode = true 的工作方式与预期的完全一样。但是 onStackClicked 永远不会发生 - movieClipStack 只是没有检测到任何类型的鼠标事件。

谢谢!

4

2 回答 2

0

有一个鲜为人知的属性称为“mouseChildren”,您必须为您的鼠标收听影片剪辑的内容元素设置它。

如果您不从事件流中删除那些其他元素,它们往往会以一种不可预测的方式使事件黯然失色。

所以,你会这样分配它:

 parentMovieClip.mouseChildren = false;// turns off all internal mouse-listening clips

如果您将它放在 MovieClip 或类定义中,我通常会这样做:

 mouseChildren = false;

此外,这里有一篇 Adob​​e 文章解释了整个事情: http: //www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObjectContainer.html

希望这可以帮助!我花了好长时间才终于发现了这个。

于 2010-07-18T21:13:29.877 回答
0

几个想法...

首先检查以确保movieClipStack.mouseEnabled == true,只是为了确保您不会无意中禁用从鼠标到对象的消息。

然后我会看看hitAreamovieClipStacktrace( movieClipStack.hitArea );. 检查它的widthheight值,看看它是否与您期望的宽度和高度大致相同movieClipStack

然后我会尝试创建一个简单的矩形精灵并将其设置为hitAreafor movieClipStack

我希望这行得通。祝你好运!

于 2010-03-31T03:13:37.013 回答