Руководство по actionscript. часть 2, стр. 050
Package { import flash. display.*; import flash. events.*;
public class AnonymousListener extends Sprite { public function AnonymousListener ( ) { // Добавляем анонимную функцию в список приемников экземпляра Stage stage. addEventLi stener(MouseEvent. M0USE_M0VE.
function (e:MouseEvent):void {
trace(«mouse move»); }):
}
}
}
В предыдущем коде созданная анонимная функция окажется навсегда «заброшенной» в списке приемников экземпляра Stage. Программа не сможет отменить регистрацию анонимной функции, поскольку она не имеет ссылки на нее.
«Заброшенные» приемники представляют собой потенциальный источник существенного расходования памяти и могут привести к другим побочным эффектам в программах на языке ActionScript.
Рассмотрим пример, демонстрирующий потенциальные проблемы, которые могут возникнуть из-за «заброшенных» приемников, и способы их решения.
Предположим, мы разрабатываем игру, которая заключается в ловле бабочек: чтобы поймать бабочку, игрок должен коснуться ее указателем мыши. Бабочки
не хотят быть пойманными и всячески стараются улететь от указателя мыши. Основным классом приложения является ButterflyGame. Каждая бабочка представляется экземпляром класса Butterfly. Для управления перемещением бабочек в игре используется основной объект Timer, который генерирует событие TimerEvent. TIMER каждые 25 мс. Каждый объект класса Butterfly регистрирует приемник в основном объекте Timer и вычисляет свое новое местоположение всякий раз, когда возникает событие TimerEvent. TIMER.
Рассмотрим код класса Butterfly:
package { import flash. display.*; import flash. events.*; import flash. utils.*;
public class Butterfly extends Sprite { // Каждый объект Butterfly получает ссылку на основной таймер // через параметр конструктора gameTimer public function Butterfly (gameTimer:Timer) { gameTimer. addEventListener(TimerEvent. TIMER. timerListener);
}
private function timerListener (e:TimerEvent):void { traceC’Calculating new butterfly position…»); // Вычисление нового местоположения бабочки (код не приводится)
}
}
}
Рассмотрим код класса ButterflyGame, который значительно упрощен, чтобы акцентировать ваше внимание на коде, отвечающем за создание и удаление бабочки. В этой версии кода игра содержит только одну бабочку.