#1009: 無法存取 Null 物件參考的屬性或方法。
2012.4.13
一些遊戲時常會用到 大廳去外載遊戲進來 , 或是不論何種情況一個載體去外載swf
時常會出現一些 , 莫名的錯誤 導致載體無法正常運作 , 程式碼中斷的情況
因為載體去外載外部swf 時 , 會先載入 外部swf 的 宣告 , 接著才去載 內容(MovieClip )
仔細發現 順序似乎錯了 , 應該是 先載內容 -> 宣告 (程式) , 否則就會發生 1009 null物件 情況
解決辦法 , 如果你有以上情況 , 在製作結構時要注意 , 把程式碼往後推一個影格
讓場上實體物件 先載入內容 , 才去做宣告
2010.5.12
最近在替幾位網友製作一些範例時發現, 當不斷監聽下去判斷超過一個以上 IF 條件 ,此時判斷結果又跳影格
就會產生 #1009: 無法存取 Null 物件參考的屬性或方法。
如下:
if (判斷式內容1) {
假設成立 gotoAndStop();
}
if (判斷式內容2) {
假設成立 gotoAndStop();
}
#1009: 無法存取 Null 物件,本身的意義是 因為你在原影格內寫了 listener ,當你(跳)換影格時, listener不到物件內容,
導致產生錯誤. 如果listener 只是一次 那倒沒有問題 因為它只listener一次,
如果是持續不斷像是 addEventListener(Event.ENTER_FRAME 這種東西 , 那麼你的錯誤訊息就會一直跑出來煩你
因為 當你寫這段監聽時,記憶體已載入占用, 只要你一天不移除 它就會一直keep work.
所以有解決方法有兩種:
1. 在條件式 IF下 remove 掉listener ,當判斷跳影格時 ,記憶體釋放 不再listener.
請注意當你code,有很多個listener時 記得都要 移除掉.
if (判斷式內容1) {
假設成立 gotoAndStop();
removeEventListener(Event.ENTER_FRAME, ); //記得在判斷式完後remove
}
if (判斷式內容2) {
假設成立 gotoAndStop();
removeEventListener(Event.ENTER_FRAME, );
}
2. 第二種方法, 非常簡單,既然你跳影格會出問題,那就不要跳了 ,乾脆直接把 code 寫在 要操作內容的上一層去遙控
if (判斷式內容1) {
_mc. gotoAndStop(); //對_mc內容做操作 語法影格並不會受影響 此時就算不remove也不會產生錯誤
}
但是請保持良好習慣, 當你有一天EventListener 越來越多時 , 效能就會降低 , ,
所以不用的listener 就將它從記憶體中移除.
沒有留言:
張貼留言