被遺忘的事件監聽器
addEventListener(Event.ENTER_FRAME,moveChild);
function moveChild(e:Event):void {
childMC.x++;
if (childMC.x>1000) {
gotoAndStop(2);
}
}
這個例子將移動 childMC
(在設計時新增到 Main
),但是如果在第 2 幀上不存在 childMC
,則會在呼叫 gotoAndStop()
時立即丟擲 1009。主要原因是每當播放頭傳遞一個鍵時 frame(一個不繼承前一幀物件集的幀),使用 gotoAndStop()
,gotoAndPlay()
,目標幀與當前幀通過關鍵幀分開,或者通過正常播放,如果 SWF 是動畫,當前幀的內容被破壞,並使用來自 GUI 儲存的資料建立新內容。因此,如果新幀沒有名為 childMC
的子項,則屬性請求將返回 null 並將丟擲 1009。
如果新增兩個事件偵聽器,但只刪除一個,或者將偵聽器新增到一個物件,但嘗試從另一個物件中刪除,則同樣的原則適用。如果物件沒有附加相應的事件偵聽器,removeEventListener
呼叫將不會警告你,因此請仔細閱讀新增和刪除事件偵聽器的程式碼。
另請注意:使用 Timer
物件,呼叫 setInterval()
和 setTimeout()
也會建立事件偵聽器,這些也應該正確清除。