Показать сообщение отдельно
Старый 12.08.2014, 07:32
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
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 в справке. Где и как он ищет объекты.
__________________
Ко мне можно и нужно обращаться на ты)