Actionscript 3 Flash AS3按钮事件侦听器阵列错误

Actionscript 3 Flash AS3按钮事件侦听器阵列错误,actionscript-3,arrays,button,for-loop,event-listener,Actionscript 3,Arrays,Button,For Loop,Event Listener,这是我第一次在这里发帖 我在一个时间线上有一个12个按钮的数组,当第一次访问时间线的这一部分时,可以使用for循环将CLICK eventlistener添加到其中。在这一点上,它们都能完美地工作 当您单击其中一个按钮时,它会在特定的movieClip内播放一个帧标签,并通过关闭按钮在相应的人身上显示一个bio,并删除每个按钮的click eventlisteners,再次使用for循环。“关闭”按钮播放关闭动画,然后时间线返回到第一帧(上面有12个按钮的帧),并重新添加CLICK eventl

这是我第一次在这里发帖

我在一个时间线上有一个12个按钮的数组,当第一次访问时间线的这一部分时,可以使用for循环将CLICK eventlistener添加到其中。在这一点上,它们都能完美地工作

当您单击其中一个按钮时,它会在特定的movieClip内播放一个帧标签,并通过关闭按钮在相应的人身上显示一个bio,并删除每个按钮的click eventlisteners,再次使用for循环。“关闭”按钮播放关闭动画,然后时间线返回到第一帧(上面有12个按钮的帧),并重新添加CLICK eventlisteners,但现在只有数组的前9个按钮可以工作。没有输出错误,重新添加eventlisteners的代码与第一次完全相同。我完全不知所措,不知道是否还有其他人遇到过这个问题

我所有的按钮都命名正确,绝对没有输出错误(我使用了调试模块),并且我确保在单击关闭按钮以重新添加eventlisteners时,包含按钮的数组正在输出所有12个按钮

    for (var q = 0; q < ackBoDBtnArray.length; q++){
        contentArea_mc.acknowledgements_mc.BoD_mc[ackBoDBtnArray[q]].addEventListener(MouseEvent.CLICK, showBio);
    }

    private function showBio(eo:MouseEvent):void {
        trace("show the bio");
        bodVar = ackBoDBtnArray.getIndex(eo.target.name);
        contentArea_mc.acknowledgements_mc.BoD_mc.gotoAndPlay(ackBoDPgArray[bodVar]);
        contentArea_mc.acknowledgements_mc.BoD_mc.closeBio_btn.addEventListener(MouseEvent.CLICK, hideBio);
        for (var r = 0; r < ackBoDBtnArray.length; r++){
            contentArea_mc.acknowledgements_mc.BoD_mc[ackBoDBtnArray[r]].mouseEnabled = false;
            contentArea_mc.acknowledgements_mc.BoD_mc[ackBoDBtnArray[r]].removeEventListener(MouseEvent.CLICK, showBio);
        }
    }
    private function hideBio(eo:MouseEvent):void {
        trace("hide it!");
        contentArea_mc.acknowledgements_mc.BoD_mc.closeBio_btn.removeEventListener(MouseEvent.CLICK, hideBio);
        contentArea_mc.acknowledgements_mc.BoD_mc.gotoAndPlay(ackBoDClosePgArray[bodVar]);
        for (var s = 0; s < ackBoDBtnArray.length; s++){
            trace(ackBoDBtnArray[s]);
            contentArea_mc.acknowledgements_mc.BoD_mc[ackBoDBtnArray[s]].mouseEnabled = true;
            contentArea_mc.acknowledgements_mc.BoD_mc[ackBoDBtnArray[s]].addEventListener(MouseEvent.CLICK, showBio);
        }
for(var q=0;q

提前感谢您提供的任何帮助和见解…我有一种轻微的感觉,这对另一组眼睛来说可能是显而易见的…哈哈。

我觉得可疑的是,您正在从hideBio()开头的closeBio_btn中删除事件侦听器。请尝试将该行放在for循环之后

我很难为这个预感辩护,但我脑海中闪过的几个疯狂的理论是:

  • 这是一个争用条件。您正在从处理程序本身内部删除处理程序的侦听器,并且由于该处理程序是动态添加的,运行时会将该处理程序标记为进行垃圾收集。在下一次扫描时,该处理程序会被删除-但由于gotoAndPlay可能会花费不多的时间,因此该处理程序仍在fo中r循环在终止时添加单击处理程序,此时只添加了前9个。
  • 这是一个数据损坏问题。由于隐藏按钮和12个按钮的数组通过BoD_mc至少是相切的,运行时在幕后进行了一些奇怪的优化,使得在触摸closeBio_btn后通过BoD_mc[带索引]访问项不可靠。

  • 这是一个有趣的问题,我希望您能找到解决方案:)

    我觉得可疑的是,您正在从hideBio()开头的closeBio_btn中删除事件侦听器。请尝试将该行放在for循环之后

    我很难为这个预感辩护,但我脑海中闪过的几个疯狂的理论是:

  • 这是一个争用条件。您正在从处理程序本身内部删除处理程序的侦听器,并且由于该处理程序是动态添加的,运行时会将该处理程序标记为进行垃圾收集。在下一次扫描时,该处理程序会被删除-但由于gotoAndPlay可能会花费不多的时间,因此该处理程序仍在fo中r循环在终止时添加单击处理程序,此时只添加了前9个。
  • 这是一个数据损坏问题。由于隐藏按钮和12个按钮的数组通过BoD_mc至少是相切的,运行时在幕后进行了一些奇怪的优化,使得在触摸closeBio_btn后通过BoD_mc[带索引]访问项不可靠。

  • 这是一个有趣的问题,我希望你能找到一个解决方案:)

    似乎可以解决它,我不得不动态添加每个btn,而不是将它们放在时间线上。尽管如此,还是很奇怪,谢谢大家。

    似乎可以解决它,我不得不动态添加每个btn,而不是将它们放在时间线上。尽管如此,还是很奇怪,比ks everyone

    在最后三个方面,调试跟踪中看到了什么?您导出的闪存版本是什么?如果您正在访问刚启动并停止的帧上的某个对象。该对象可能无法访问。但应在运行时发生异常。如果您仅在数组中存储字符串。请尝试跟踪对象。如果其中一些对象不为null(再一次..如果它们是..它应该给出运行时异常..但我没有想到其他任何东西)对于最后三个,在调试跟踪中看到了什么?您导出的闪存版本是什么?如果您访问的是刚启动并停止的帧上的内容..它可能无法访问..但是应该生成运行时异常..如果