Отображение с 1 по 1 из 1 публичных сообщений
-
Привет. Вчера не залазил больше на форум, так что сегодня увидел вариант свитчера. Хороший, кстати. Вот мой пример:
package MyPackage
{
import flash.display.Sprite;
import flash.events.Event;
public class MySprite extends Sprite
{
private var listenerPool:Array; // в этом массиве хранятся все события, на которые подписывается данный спрайт
public function MySprite()
{
listenerPool=new Array();
super();
// добавляем слушатель на удаление спрайта - уничтожить при этом слушателей
super.addEventListener(Event.REMOVED, removeAllEvents);
}
private function removeAllEvents(event:Event):void
{
if (event.target == this) //только если это событие удаления именно этого спрайта
{ super.removeEventListener(Event.REMOVED, removeAllEvents);
while(listenerPool.length > 0)
{
var pool:Array=listenerPool.pop();
removeEventListener(pool[0], pool[1], pool[2]);
}
}
}
public override function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void
{ super.addEventListener(type, listener, useCapture, priority, useWeakReference);
var pool:Array=new Array();
pool[0]=type;
pool[1]=listener;
pool[2]=useCapture;
listenerPool.push(pool);
}
public override function removeEventListener(type:String, listener:Function, useCapture:Boolean=false):void
{ // эта функция удаляет слушатель спрайта и убирает его из массива слушателей
super.removeEventListener(type, listener, useCapture);
function removeListener(a:Object, index:int, source:Array):Boolean
{
if ((a[0] == source[index][0]) && (a[1] == source[index][1]) && (a[2] == source[index][2]))
return (true);
return (false);
}
listenerPool.filter(removeListener);
}
}