【问题标题】:If I call a function from a MouseEvent activated function will it not work properly?如果我从 MouseEvent 激活的函数中调用一个函数,它会不会正常工作?
【发布时间】:2012-01-03 19:15:25
【问题描述】:

我正在使用 AS3 在我的网站上构建一个非常简单的 mp3 播放器。到目前为止,播放和暂停按钮工作正常,但是当我尝试移动滑块然后单击暂停按钮时,它不会暂停,然后再次单击播放按钮会导致它播放新文件。

我假设由于某种原因,当我从 MouseEvent 调用 playMp3 函数时,它在一个对象或其他东西中而不是在根目录中,所以它就像加载一个新的声音文件,但我不知道如何解决这个问题。

这是我的代码,欢迎对我的代码提出任何其他建议,我是这方面的菜鸟,一直在寻找更好的做事方式:

http://pastebin.com/uN8QFanX

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:


    看起来您的问题是由 MOUSE_UP 事件引起的。

    在pickupSlider 函数中添加:
    parent.addEventListener(MouseEvent.MOUSE_UP, dropSlider);

    但在 dropSlider 函数上,您只删除 MOUSE_MOVE 的侦听器,因此 MOUSE_UP 将继续调用 dropSlider 函数。如果您要添加:
    parent.removeEventListener(MouseEvent.MOUSE_UP, dropSlider);
    在您的 dropSlider 函数中,它应该可以正常工作。

    //提示
    如果您从不删除它们,则不必每次在 playMp3 和 pauseMp3 函数中添加 CLICK 侦听器。您可以在开始时添加它们,并在需要时继续添加/删除按钮(或使用 .visible true/false 代替)。即使将侦听器从舞台上移除,侦听器仍会依附于对象。这很重要,因为如果有一天你想删除对象并让监听器留给它,垃圾收集器不会接受它,你会有内存泄漏。

    【讨论】:

    • 哇,太棒了,它奏效了。你说的对!谢谢!成功了
    【解决方案2】:

    您似乎没有删除 dropSlider() 函数中的 MOUSE_UP 侦听器。 因此,当您单击暂停按钮(大概在滑块轨道的左侧)时,它会调用 x 值小于 40 的 dropSlider,将您的轨道重置到开头。

    将此行添加到dropSlider() 函数中,您应该可以开始了:

    parent.removeEventListener(MouseEvent.MOUSE_UP, dropSlider);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2013-08-26
      • 2015-01-04
      • 1970-01-01
      • 2014-03-07
      相关资源
      最近更新 更多