【问题标题】:Problems trying to get an id from an eventLlistener尝试从 eventLlistener 获取 id 的问题
【发布时间】:2011-01-24 17:37:45
【问题描述】:

我正在尝试通过事件侦听器将 id 发送到它的侦听功能。现在,这在我仅使用代码创建按钮之前有效,但是当我决定使用现有的电影剪辑时,它停止了,我不知道为什么。

这是我的按钮代码。

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

}

trace 发现 button1.id 没有问题。到目前为止还可以。 当我运行它时,侦听器函数报告为“未定义”。这是我的侦听器功能代码。 (不是全部……只是相关部分)。

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

}

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

谁能发现我的白痴并请告诉我?非常感谢您一如既往的帮助。

【问题讨论】:

  • 尝试将 evt.target 转换为 ButtonMC:trace("clicked" + ButtonMC(evt.target).id);或尝试使用 evt.currentTarget.id
  • 您的意思是报告返回为未定义。它给出错误吗?我使用 flex 运行此代码,并带有一个常规的 Button 对象,这很好。

标签: flash actionscript-3 event-handling movieclip


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    来自鼠标事件的target 属性指的是实际单击的 DisplayAsset - 在本例中,是您的按钮 的其他一些 DisplayAsset。您可能会注意到targetparent 是按钮(或parentparent 等)。

    无论如何,请改用currentTarget 来获取添加了事件的目标,或者将mouseChildren 设置为按钮的false(这样,它的子级不会自己捕获鼠标事件)。

    【讨论】:

    • 太棒了.. 感谢所有回答的人。使用 currentTarget 效果很好。 Zeh,关于 eventListener 在按钮中定位其他内容是正确的。我在图形下方添加了一个空白movieClip 作为命中形状。我不知道它不会将整个按钮算作一个剪辑。看起来你每天都能通过 AS3 学到新东西。
    猜你喜欢
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多