我需要从阶段中移除数组中的每个对象。我现在所拥有的只是移除其中一个对象。
this.removeChild(enemyList.splice(0([0](;
我已经尝试了几种不同的方法,要么结果相同,要么出现错误。还有别的方法吗?还是我做错了?
此外,硬括号中的零是什么意思?我在很多教程/解释中都没有看到这一点,但当我把它拿出来时,我会遇到各种各样的错误。
您所做的只是移除数组中的第一个对象。线路
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 );
}
最快:只需遍历数组并移除每个子项。在循环结束时,通过将数组的长度设置为0来清除数组(这将删除引用并对其进行垃圾收集(
var len:int = enemyList.length;
for( var i:int = 0; i < len; i++ )
this.removeChild( enemyList[i] );
// clear the array
enemyList.length = 0;
有些要点:拼接比使用pop()
慢,在拼接对象后,运行时需要将所有后面的对象向下移动一个空间(例如,如果拼接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"one_answers"obj3"现在分别移动到位置0和1。在下一个循环中,i
将是1(在本例中指向"obj3"(,并且它将被删除。循环现在会停止,即使你还有一个物体留在里面
如果要通过在循环过程中删除对象来修改数组,则始终向后循环
您正在做的是通过拼接来删除数组中的索引。而且您也错误地使用了Array.splice
。
你想要的是穿过enemyList
中的每一个敌人,并移除每一个。
for (var i:int = 0; i < enemyList.length; i++)
{
this.removeChild(enemyList[i]);
}