2014-12-11 67 views
0

我一直在研究這個問題幾個小時,雖然我發現有點類似的情況下,我還沒有找到一個簡單的修復。基本上我有一個時間表,一些動畫播放。最終我進入我的主遊戲畫面(256幀),在那裏停止();被調用,然後用戶點擊3個門中的一個。點擊任何一個門,用戶都會前往一堆框架,然後他們可以玩遊戲。一旦遊戲完成或用戶點擊回來,它將用戶帶回到原始框架(第256幀),並且每次它執行此操作時,它都會說我的「upDoor」是空引用,然後是upDoor按鈕(實例upStairsDoor按鈕)不再在舞臺上。Flash CS3 null參考按鈕/ mc後返回到幀

無論用戶首先選擇哪個門,這似乎都會發生。如果用戶選擇upDoor並在那裏播放minigame或選擇outsideDoor並播放該特定的minigame,那麼當用戶返回到此幀(第256幀)時,它會在門上拋出此錯誤,當然因爲它會拋出錯誤,在這一點上沒有其他工作,我必須退出遊戲。

這不是一個錯字!請不要建議我檢查我的實例名稱。正如我所提到的,第一次到達框架時,門會很好地工作,這只是當你回到它的時候。我讀過它可能與垃圾收集器有關,但當我們返回到框架時,它不應該重新創建我已經放置到舞臺上的所有實例嗎?它不會在我拖到舞臺上的任何其他按鈕或動畫剪輯上出錯,只有這一個特定的門。

我忘了提及它在引用upDoor按鈕的一行代碼上出錯。我這裏有幾行代碼...(幀256)

if (downDoor.enabled) { 
    downDoor.enabled = false; 
} 
if (upDoor.enabled) { 
    upDoor.enabled = false; 
} 
if (outDoor.enabled) { 
    outDoor.enabled = false; 
} 

什麼這些都爲禁用門,直到用戶點擊,然後運行該將所有的門開啓功能在屏幕上的另一個對象。有問題的錯誤是說我無法訪問空引用的屬性。

+1

恕我直言,最好的修正是螺絲時間線AS IS,因爲當你做一個'gotoAndStop()'或其他的框架改變時,舊的框架是**被破壞**並且所有的鏈接都是無效的,所以當你回到那個框架,沒有'downDoor'了,也沒有其他的對象可以訪問你之前的那個框架。 – Vesper 2014-12-11 09:23:19

+1

如果您無法刪除時間線,請使用父級MC的屬性,例如'if(downDoorEnabled){downDoorEnabled = false; if(downDoor)downDoor.enabled = false; }'。請確保您事先計劃它們,因爲這些屬性不包含在一個框架中,並且覆蓋這些屬性可能會損壞您的SWF邏輯。但要注意的是,它們的語法在編譯時沒有被檢查,所以如果你在讀取屬性時在某個地方犯了一個錯誤,結果將是「未定義的」(或者如果該屬性尚未設置),並且寫入到錯誤的財產將導致正確的財產價值不變。 – Vesper 2014-12-11 09:27:42

+0

@ Richard-Chase這些代碼行在哪裏?他們內部有什麼事件處理程序? – 2014-12-11 14:29:45

回答

0

感謝您輸入的人。最終成爲我的解決方案是在框架加載時以編程方式實現所有的動畫片段和按鈕,然後在切換幀時刪除它們。這樣,每次從gotoAndPlay重新加載框架時,都會重新創建。