Цитата:
|
1. Таймер у Вас создается локально и будет удален после выполнения метода.
|
Никуда он не удалится. Во-первых к нему добавлен слушатель, который нигде не удаляется, соответственно существует ссылка, а во-вторых когда объект (на который нет ссылок) удалится, решает сборщик мусора. Это может произойти гораздо позднее, чем выполнится метод.
По теме:
Лучше вообще не добавлять слушатель ENTER_FRAME в каждом мяче, но раз уж здесь так, то надо и об удалении побеспокоиться.
Добавь в класс Ball метод dispose()

Код AS3:
public function dispose():void {
this.removeEventListener(Event.ENTER_FRAME, cap);
if (parent) parent.removeChild(this); // можно и сразу с дисплей листа снести.
}

Код AS3:
function removeBall(e:TimerEvent):void
{
e.target.removeEventListener(TimerEvent.TIMER_COMPLETE, removeBall); // не забываем удалить слушатель с таймера
if (ball) ball.dispose(); // не понятно зачем у тебя этот шарик создан отдельно от тех, что в массиве, но тем не менее, сносим его
for (var i:String in arr) arr[i].dispose(); // убиваем так же шарики в массиве
arr.length = 0; // сносим все из массива
}
Моше Дауге, почитайте про метод contains в справке. Где и как он ищет объекты.