2012-08-04 43 views
0

我在removeChild上看到了很多問題。as3 removeChild方法在遊戲中給出問題

我有一個入侵者類型的遊戲,磚塊從頂部落下,你必須用一個彈起的球來摧毀它們。

當我想刪除磚塊(在for循環中引用它的數組)時,我隨機得到異常錯誤(與許多其他錯誤一樣),以致該對象必須是調用者的子項。

這是一個解決方案:

if (this.parent != null) 
{ 
this.parent.removeChild(this); 
} 

- 這是在我的情況下,從類的目標對象(磚)的內調用。

但事情是..如果this.parent真的是空的 磚只是呆在那裏! (當它應該被刪除)

+1

一般來說,如果你能看到它有一個父屏幕上的對象。你確定屏幕上留下的對象是你試圖刪除的對象嗎?您可以調試很多方法,例如:在對象上放置一個點擊處理程序。當一個人離開舞臺時,點擊該物體。在單擊處理程序中,查看該對象是否具有父級。檢查對象的「stage」屬性是否爲空。確定該對象是否在您正在迭代的陣列中,等等。 – 2012-08-04 20:19:31

+0

Again @SunilD。好的起點,使用fxspy(如果使用flex,谷歌它)或怪物調試器(單獨使用AS3,不那麼直觀)可以有助於在運行時檢查事情,直接與UI交互以查看有關元素的屬性你在屏幕上看到。我能想到的一種可能性是通過某種方法將磚塊從其父項中移除,然後將其重新添加到該父項或其他顯示對象中,並且在父項爲空時執行代碼。 – shaunhusain 2012-08-04 20:40:44

+0

非常感謝你們。我已經解決了這個問題,但我仍然無法理解... 所以我得到的是,無論什麼時候球擊中磚塊,我以前的代碼都會從其父項中移除磚塊,然後將它與數組拼接起來。 但是,當我註釋了數組上的拼接,它的工作原理應該是! ......甚至更多,我在Monster Debugger(謝謝@shaunhusain)中看到,數組長度減少了(我沒有想到) 所以我的問題是:從舞臺上移除Sprites是否也將它們從數組中移除他們在? (假設沒有變量指向精靈) – 2012-08-04 23:12:30

回答

0

試試這個刪除孩子。它從父母中刪除所有的孩子。此外,如果你想刪除所有,但拯救第一位的,只要切換到yourMovieClip.removeChildAt(1);

while(yourMovieClip.numChildren){ 
    yourMovieClip.removeChildAt(0); 
} 
+0

這是一個很好的建議,(我會利用這段時間),但在我的遊戲中還有一些其他代碼給我帶來了問題。感謝大家的幫助! – 2012-08-10 17:27:38