我在Flash和as3中构建动画,我有一个函数可以添加舞台 eventListener,stage.addEventListener(Event.ENTER_FRAME,setScrollPercent,false,0,真正);flash AS3我如何删除舞台事件监听器
由于这个事件是在一个函数的函数里面设置的,所以“两个函数很深”,我怎样才能从函数外部重置所有的舞台事件监听器而不会出错?
我在Flash和as3中构建动画,我有一个函数可以添加舞台 eventListener,stage.addEventListener(Event.ENTER_FRAME,setScrollPercent,false,0,真正);flash AS3我如何删除舞台事件监听器
由于这个事件是在一个函数的函数里面设置的,所以“两个函数很深”,我怎样才能从函数外部重置所有的舞台事件监听器而不会出错?
最佳实践与AS事件监听器有:
Flex不会给你析构函数。它拥有自己的垃圾收集器,在后台管理内存。一旦没有对它的引用,它会清理一段内存。那么,强烈的参考。所有对象默认都有很强的参考。事件处理程序,因为它们往往是一个性能瓶颈,具有这种宣称自己很弱的特殊能力 - 一个弱点的参考。这当然只有当您使用addEventHandler()
函数附加事件处理程序时才有可能。 GC没有考虑到弱引用,因此,当所有强引用都消失时,它们将自动收集垃圾,从而使您免于手动执行=null
的紧张局势。当你不指定参数时,你会做什么。默认情况下,即使处理程序被创建为强引用。
但是,标记它们弱有副作用。没有你知道它们,它们会消失在稀薄的空气中。最终,你会知道,但是就一个讨厌的bug而言。那是什么导致你的问题?也许,可能不是。你必须尝试。此外,如果您可以向我们提供更多详细信息(如确切的错误代码,某些来源),它将有所帮助。
希望这会有所帮助。快乐的弯曲:)
你看到了什么错误?嵌套级别不应该与它有任何关系,因为监听器只是通过参数进行注册,所以只要您使用与用于添加的相同的三个关键参数调用remove,您应该没问题。
你真正的问题是如何获得对外部范围的侦听器对象的引用?如果是这样,有几种可能的解决方案,最好的方法取决于你的代码结构。
- MarkusQ
你的问题的答案,我意识到你有一个范围的问题,因为我刚刚回答了一个问题,你的范围,是你正在与舞台。考虑全局舞台,因为它是绘制所有显示对象的画布。
以下将在任何地方工作!
stage.addEventListener(Event.ENTER_FRAME, setScrollPercent, false, 0, true);
现在,你在说什么,即时猜测错误,就是你只设置上面removeEventListener当你已准备好,将无法正常工作。
removeEventListener函数不接受像它的同级addEventListener这样的五个参数,它只允许三个忽略优先级和弱引用,如下所示。
//The following removes YOUR stage Event.ENTER_FRAME listener from any scope.
stage.removeEventListener(Event.ENTER_FRAME, setScrollPercent, false);
希望这会有所帮助,请记住这个阶段是在一定意义上的全球根,小心根,它的实际工作就应该是怎样,现在的事实,呼吁根现在是相对于SWF你从阶段开始,而不是阶段,除非阶段是当前范围的根。
你应该能够使用你的旧功能,并使用removeEventListeners而不是添加。其实很简单。
你可以添加一个例子吗?我是AS3的新手,我真的不知道弱点是什么。 – 2009-02-25 14:34:24