2011-05-04 100 views
0

我目前在加载其他三个swf文件的父级动画片段内使用三个uiloader。这些影片剪辑中的每一个都有键盘事件,当敲击时会调用不同的声音。即使卸载uiloader,EventListener仍然处于活动状态

我遇到了一个问题,当我去一个影片剪辑并返回到父,事件监听器仍然活动。我一直在尝试不同的方式,例如从uiloader中卸载swf文件,但事件仍然是活动的,即使在我焦点之后也可以直接访问它。

我敢肯定,问题是我有舞台上的事件监听器,但一旦我不在swf文件中,就不知道如何卸载它。

任何帮助将不胜感激。

回答

1

你是对的。键盘事件通常在舞台上注册(即stage.addEventListener(KeyboardEvent.KEY_UP,someFunction);),这意味着该舞台持有对您的影片剪辑的引用,防止它收集垃圾,即使您试图卸载它。

有两种方法可以解决这个问题。您必须注销keyboardListener stage.removeEventListener(KeyboardEvent.KEY_UP,someFunction);或者您可以将侦听器注册为弱引用:

stage.addEventListener(KeyboardEvent.KEY_UP,someFunction,false,0,true);

其中最后一个参数(true)表示事件被注册为弱引用。默认为false。

+0

弱引用是如何工作的,我是否必须卸载swf文件才能真正收集它,或者我可能会失去它的焦点?看起来这正是我需要的,但并不真正了解如何管理它。 – triangulito 2011-05-05 16:20:40

+0

如果您使用弱引用,那么在删除swf后,您应该无法再获取任何其他关键事件。但最正确的做法是在卸载swf之前调用removeEventListener!也许把一个destroy() - 方法放入你自己加载的swf中,清理它自己。我会建议这样做。 – Tommislav 2011-05-06 09:46:31

+0

非常感谢,你一直非常乐于助人。 :d – triangulito 2011-05-06 15:58:47

相关问题