尝试从事件侦听器获取id时出现问题

时间:2011-01-24 17:37:45

标签: flash actionscript-3 event-handling movieclip

我正在尝试通过事件监听器向其发送侦听功能。现在这在我使用代码创建按钮之前有效,但是当我决定使用现有的movieClip时,它停止了,我无法解决原因。

这是我的按钮代码。

private function addButtons(){
        button1 = new ButtonMC();
        //add the buttons
        button1.id = 1;
        button1.addEventListener(MouseEvent.CLICK, gameClick, false, 0, true);
        button1.buttonMode = true;
        addChild(button1);
        trace("button1 = "+button1.id);

}

跟踪发现button1.id没问题。到目前为止还好。 当我运行它时,监听器功能报告为“未定义”。这是我的监听器功能代码。 (不是全部......只是相关部分)。

private function gameClick(evt:MouseEvent):void{
        trace("clicked "+evt.target.id);
        var gameTypeID = evt.target.id;

}

此代码位于其自己的单独类中,该类生成开始屏幕。 movieClip按钮是库中MC的副本,它作为ButtonMC导出。我完全不知道为什么现在不行。当它确实工作“生成”按钮仍然正常movieClips所以我看到没有区别。也许它是一个范围的东西,但是所有这些代码都在同一个类中,我不明白为什么会出现这个问题。

有人可以发现我的愚蠢并让我知道吗?我们非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

我的第一个猜测是,在 ButtonMC实例中点击的实际形状或精灵被注册为event.target。您可以测试此理论并在侦听器中跟踪getQualifiedClassName(event.target)。或者您可以立即尝试修复并添加button1.mouseChildren = false;以查看它是否有效。

答案 1 :(得分:1)

来自鼠标事件的target属性是指实际点击的DisplayAsset - 在这种情况下,其他一些DisplayAsset 按钮内。您可能会注意到target的{​​{1}}是按钮(或parent的{​​{1}}等)。

无论如何,使用parent代替获取添加了事件的目标,或者将parent设置为currentTarget按钮(这样,其子代将不会捕获鼠标事件本身)。