我正在尝试通过事件监听器向其发送侦听功能。现在这在我使用代码创建按钮之前有效,但是当我决定使用现有的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所以我看到没有区别。也许它是一个范围的东西,但是所有这些代码都在同一个类中,我不明白为什么会出现这个问题。
有人可以发现我的愚蠢并让我知道吗?我们非常感谢您的帮助。
答案 0 :(得分:3)
我的第一个猜测是,在 ButtonMC实例中点击的实际形状或精灵被注册为event.target。您可以测试此理论并在侦听器中跟踪getQualifiedClassName(event.target)。或者您可以立即尝试修复并添加button1.mouseChildren = false;
以查看它是否有效。
答案 1 :(得分:1)
来自鼠标事件的target
属性是指实际点击的DisplayAsset - 在这种情况下,其他一些DisplayAsset 在按钮内。您可能会注意到target
的{{1}}是按钮(或parent
的{{1}}等)。
无论如何,使用parent
代替获取添加了事件的目标,或者将parent
设置为currentTarget
按钮(这样,其子代将不会捕获鼠标事件本身)。