ГлавнаяActionScript 3 — «100 советов» › Освобождение слушателей событий при удалении с экрана

Освобождение слушателей событий при удалении с экрана

June 19th, 2006
Когда имеете дело с отображаемыми объектами (display objects) в ActionScript 3 важно помнить, что они могут существовать даже если не добавлены на экран (display list) и при этом продолжают получать и обрабатывать события на которые подписаны (очевидно, кроме событий от мышки). К примеру, событие enterFrame будет продолжать вызываться, и после удаления объекта с экрана. Это существенное отличие от ActionScript 1 и 2, т.к. там удаление мувиклипа с экрана означало и удаление всех событий.
Если вы хотите, чтобы событие типа enterFrame не вызывалось, когда объект удален с экрана, вы должны самостоятельно удалять подобные события. Сделать это просто, достаточно прописать обработчики событий Event.ADDED (вызывается когда объект добавлен к другому отображаемому объекту) и Event.REMOVED (вызывается когда объект удаляется от родителя).

Код:
var sprite:Sprite = new Sprite(); sprite.addEventListener(Event.ADDED, addEnterFrame); sprite.addEventListener(Event.REMOVED, removeEnterFrame); // Добавляем/удаляем обработчик события enter frame function addEnterFrame(evt:Event):void { trace("added"); sprite.addEventListener(Event.ENTER_FRAME, enterFrame); } function removeEnterFrame(evt:Event):void { trace("removed"); sprite.removeEventListener(Event.ENTER_FRAME, enterFrame); } function enterFrame(evt:Event):void { trace("Time: " + getTimer()); } // Добавляем/удаляем объект по клику мышки stage.addEventListener(MouseEvent.CLICK, addRemove); function addRemove(evt:Event):void { if (this.contains(sprite)) { this.removeChild(sprite); }else{ this.addChild(sprite); } }

Код:
// output added Time: 813 Time: 927 removed added Time: 2509 Time: 2597 removed

Категория: ActionScript 3 — «100 советов» Ярлыки: ,

Смотрите также

DisplayObjectContainer contains() Определение добавления или удаления со Stage
  1. Пока без комментариев.
  1. Пока нету.