从舞台上移除阵列的电影片段



我需要从阶段中移除数组中的每个对象。我现在所拥有的只是移除其中一个对象。

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]);
}

最新更新