我需要从舞台上删除每个属于数组一部分的对象。我现在所拥有的只是删除了其中一个对象。从舞台上删除数组的影片剪辑
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”),并且将被删除。现在循环会停止,即使你仍然留下一个对象。
如果要在循环中通过删除对象来修改数组,则始终向后循环