2012-11-22 60 views
1

我正在開發一款Flash遊戲並且完成了它,但我遇到了一個問題。遊戲結束時,或者用戶按下「結束遊戲」按鈕時,我想將它們返回到主菜單。遊戲設置爲主菜單在第3幀,遊戲在第4幀中運行。所有的遊戲代碼都在那裏。Flash遊戲 - 返回主菜單

我嘗試過的幾件事: 我只是簡單地試圖回到第3幀。這將導致錯誤:

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at Hundred_fla::MainTimeline/GotoEndGame()[Hundred_fla.MainTimeline::frame5:66] 

我試圖返回所有遊戲瓦爾爲默認值,清除所有的孩子......等......我也得到了完全相同的錯誤...不知道是什麼問題是。我認爲一種解決方案是重新加載電影,但這將在Android/IOS上運行,我無法刷新網頁。 ... 任何幫助將不勝感激。由於

編輯:上線66的代碼是:

while(stage.numChildren > 0){ 
    stage.removeChildAt(stage.numChildren-1); 
} 

回答

2

在嘗試清除對象之前,應鎖定舞臺連接。你似乎刪除了運行代碼的實例,因此它失去了階段引用。

var theStage:Stage=stage; 
while(theStage.numChildren > 0){ 
    theStage.removeChildAt(0); 
    //you can always be sure that element at [0] exists, rather than going for [numChildren-1] 
} 
+0

優秀的捕獲。 – BoppreH

+0

這似乎解決了它!謝謝! –

+0

非常感謝你這讓我瘋狂!!!!!! –

1

根據什麼線第5幀的66,也可能幾件事情:

  • 你的目標的Flash Player 9 ,其中顯示對象異步加載到gotoAndStop調用,所以你最終得到空引用。解決方案是針對Flash Player 10或11(在發佈設置[Ctrl + Shift + F12]中更改它)。如果你真的需要爲目標的Flash Player 9,有convoluted methods to ensure the attributes are accessible

  • gotoAndStop你再引用從第5幀,這是不可用的對象,從而拋出一個空對象引用錯誤

  • 它在你的邏輯錯誤,我們需要看到一些代碼找到它

有疑問時,它總是最好離開gotoAndStop調用的最後一個方法。

編輯:

看到代碼後,似乎stage本身爲空,從而引發錯誤。如果它沒有明顯的區別,你可以用一個try/catch環繞你的代碼:

try { 
    while(stage.numChildren){ 
     stage.removeChildAt(0); 
    } 
} catch (error:Error) { 
} 

也儘量聽ADDED_TO_STAGE事件,以確保您訪問之前必須stage一個有效的參考。

+0

感謝您的回覆。 66中的代碼已添加到該帖子中。我看到,當我構建Flash 10+時,我沒有得到任何錯誤,但我需要爲IOS和Android構建AIR。這會導致錯誤:-(目前endgame方法中唯一的代碼是我在上面添加的第66行開始的代碼。再次感謝,我真的需要這個幫助!! –

+0

我認爲這是第二種情況問題。你有沒有嘗試過把這個代碼*放在* gotoAndStop這個框架頭之前呢? – BoppreH

+0

問題是,即使gotoAndStop調用被註釋掉了,我也會得到錯誤。但無論哪種方式,我已經用gotoAndStop作爲方法的最後一行來嘗試它。 –