2011-05-04 91 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

相關問題