我需要從舞臺上刪除每個屬於數組一部分的對象。我現在所擁有的只是刪除了其中一個對象。從舞臺上刪除數組的影片剪輯
this.removeChild(enemyList.splice(0)[0]);
我已經嘗試過幾種不同的結果或錯誤。有沒有另一種方法來做到這一點,或者我只是做錯了?
另外,硬括號中的零是什麼?我在很多教程/解釋中都沒有看到,但是當我把它拿出來的時候,我會遇到各種各樣的錯誤。
我需要從舞臺上刪除每個屬於數組一部分的對象。我現在所擁有的只是刪除了其中一個對象。從舞臺上刪除數組的影片剪輯
this.removeChild(enemyList.splice(0)[0]);
我已經嘗試過幾種不同的結果或錯誤。有沒有另一種方法來做到這一點,或者我只是做錯了?
另外,硬括號中的零是什麼?我在很多教程/解釋中都沒有看到,但是當我把它拿出來的時候,我會遇到各種各樣的錯誤。
你正在做的是通過拼接刪除數組中的一個索引。而且你也錯誤地使用了Array.splice
。
你想要的是穿過enemyList
中的每一個敵人,並刪除每一個敵人。
for (var i:int = 0; i < enemyList.length; i++)
{
this.removeChild(enemyList[i]);
}
你在做什麼只是刪除數組中的第一個對象。行
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」),並且將被刪除。現在循環會停止,即使你仍然留下一個對象。
如果要在循環中通過刪除對象來修改數組,則始終向後循環