被遺忘的事件監聽器

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() 也會建立事件偵聽器,這些也應該正確清除。