2011-04-03 85 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”),并且将被删除。现在循环会停止,即使你仍然留下一个对象。

如果要在循环中通过删除对象来修改数组,则始终向后循环

相关问题