#011 ActionScript [Q] Tips: controla tus eventos

Todos los que tenemos más fresco AS2 (en mi caso por Flash Lite) tenemos que esforzarnos para mantener los eventos controlados en AS3. En AS2 cuando eliminabas un elemento del escenario, o de un clip, dejaba de responder a los eventos a los que estaba suscrito, y en AS3 esto no es así. Una buena manera de poder llevar un control del estilo de AS2 (que cuando borremos un elemento de la DisplayList deje de escuchar eventos, y de que los recupere cuando deseamos es encerrar estas llamadas, las de addEventListener y removeEventListener en dos métodos y suscribir éstos a los eventos ADDED y REMOVED).

Algo así:

package  
{
	import flash.events.Event;
	import flash.display.Sprite;

	public class QTip11 extends Sprite 
	{
		public function QTip11 ()
		{
			addEventListener(Event.ADDED, crearListeners);
			removeEventListener(Event.REMOVED, eliminarListeners);
		}
		
		private function crearListeners(ev:Event):void
		{
			// Aqui creamos nuestros listeners
			addEventListener(Event.ENTER_FRAME, saludar);
		}

		private function eliminarListeners(ev:Event):void
		{
			// Aqui eliminamos nuestros listeners
			removeEventListener(Event.ENTER_FRAME, saludar);
		}
		
		private function saludar(ev:Event):void
		{
			trace('hola!');	
		}
	}
}

De esta manera cuando hacemos un addChild del elemento se crea el listener, y simplemente con hacer un removeChild, se limpiaría.

Personalmente no lo uso porque no le veo que sea aplicable en unos cuantos casos, y además tengo muy grabado un método dispose que es donde voy poniendo mis removeEventListener según los creo en todos los sitios que me de la gana, y en cualquier tipo de clase, no solo en las que pueden formar parte de la DisplayList (es cuestión de hacer el hábito), pero es una manera curiosa de recordar el pasado en AS2.