Что вы делаете, это просто удаляете первый объект в массиве. Линия
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()
, и после того, как вы склеиваете объект, среде выполнения необходимо переместить все более поздние объекты на один пробел вниз (например, если вы склеиваете врагаЛист [1]) , затем врагаЛист [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»), и это будет удалено. Цикл теперь остановится, даже если в нем все еще остается объект.
Если вы собираетесь изменить массив, удалив объект во время цикла, то всегда повторяйте цикл в обратном направлении