2011-04-03 87 views
1

我需要從舞臺上刪除每個屬於數組一部分的對象。我現在所擁有的只是刪除了其中一個對象。從舞臺上刪除數組的影片剪輯

this.removeChild(enemyList.splice(0)[0]);

我已經嘗試過幾種不同的結果或錯誤。有沒有另一種方法來做到這一點,或者我只是做錯了?

另外,硬括號中的零是什麼?我在很多教程/解釋中都沒有看到,但是當我把它拿出來的時候,我會遇到各種各樣的錯誤。

回答

0

你正在做的是通過拼接刪除數組中的一個索引。而且你也錯誤地使用了Array.splice

你想要的是穿過enemyList中的每一個敵人,並刪除每一個敵人。

for (var i:int = 0; i < enemyList.length; i++) 
{ 
    this.removeChild(enemyList[i]); 
} 
2

你在做什麼只是刪除數組中的第一個對象。行

this.removeChild(enemyList.splice(0)[0]); 

基本上從陣列([0])和剪接出來陣列的同時(enemyList.splice(0))移除所述第一子。要刪除所有你需要一個循環

有可以做幾個選項:

慢:使用while循環,只要經過名單,因爲在有任何對象。除去每一個和拼接列表以及從列表中刪除它(0是位置和1意味着我們只想從它拼接一個對象)

while(enemyList.length > 0) 
{ 
    this.removeChild(enemyList[0]); 
    enemyList.splice(0, 1); 
} 

位更快:通過列表而轉到還有對象,並刪除最後一個。 Pop()它從數組,而你有

while(enemyList.length > 0) 
{ 
    this.removeChild(enemyList[enemyList.length - 1]); 
    enemyList.pop(); 
} 

可能略高於第二個(未測試)快,但快於第一:通過以相反的順序排列你去刪除每個孩子,拼接當你沿着

var len:int = enemyList.length 
for(var i:int = len - 1; i >= 0; i--) 
{ 
    this.removeChild(enemyList[i]); 
    enemyList.splice(i, 1); 
} 

最快去:只需經過陣列並刪除每一個孩子。拼接比使用pop()慢,你拼接後:在循環結束時,通過設置它的長度爲0(這將刪除引用,並允許它被垃圾收集)

var len:int = enemyList.length; 
for(var i:int = 0; i < len; i++) 
    this.removeChild(enemyList[i]); 

// clear the array 
enemyList.length = 0; 

幾點清除陣列運行時需要將所有後面的對象向下移動一個空格(例如,如果拼接enemyList [1],那麼enemyList [2]需要移動到位置1以彌補空隙)。如果你要拼接,總是從後面拼接(因爲速度更快:沒有物體可以向上移動)。出於相同的原因,pop()快於slice()(從而消除了第一對象的陣列中)

永遠不要修改陣列(例如splice())如果你正在通過它循環向前,因爲你正在修改的長度它在循環中。例如,如果你的陣列是var a:Array = ["obj1", "obj2", "obj3"],你做這個拼接它:

for(var i:int = 0; i < a.length; i++) 
    a.splice(i, 1); 

然後在第一遍,你會在位置0(在這種情況下,「OBJ1」)中移除對象。 「obj2」和「obj3」現在分別移動到位置0和1。在下一個循環中,i將爲1(在這種情況下,指向「obj3」),並且將被刪除。現在循環會停止,即使你仍然留下一個對象。

如果要在循環中通過刪除對象來修改數組,則始終向後循環

相關問題