Emitir eventos personalizados en AS3 (III)
Publicado por Iván Gajate el 27 de noviembre de 2008 en AS3, Flash, Tutoriales
Ya hemos visto cómo construir un evento personalizado en AS3 en el que podamos pasarle parámetros, lo cual nos permite crearnos un evento genérico donde incluiremos todos los parámetros extra que queramos, y así reutilizar nuestra clase en distintos proyectos.
Además, funciona como un array asociativo, donde podemos preguntar por cada valor a partir de su nombre de variable, o incluso recorrerlo con un bucle for-in. Muy cómodo.
El evento que queremos emitir con sus parámetros extra:
import EventExtra; // Emito el evento con todos los parametros que quiera dispatchEvent(new EventExtra("accionTerminada", {nombre:"Iván", puntuacion:59, registrado:true, telefono:"620 32 54 28", posiciones:[1,2,3,4,5]} ));
La clase EventExtra:
package { import flash.events.*; // Extiendo la clase Event para que funcione como un evento mas al enviarse y recibirse. public class EventExtra extends Event{ // Variable privada donde almaceno los parametros extra en un objeto private var _extra:Object; // Recibo los parametros extra en un objeto public function EventExtra(nombre:String, extra:Object=null, bubbles:Boolean=false, cancelable:Boolean=false){ // Inicializo el constructor de Event super(nombre, bubbles, cancelable); // Si llega el parametro extra, lo almaceno. // Y si no, creo un objeto vacio para que no genere un error al intentar acceder a el. if(extra){ _extra = extra; }else{ _extra = new Object(); } } // Devuelve un objeto con los parametros extra en formato de objeto public function get extra():Object{ return _extra; } } }
Y nuestro detector de eventos:
import EventExtra; // Escucho si objetoEmisor emite el evento "accionTerminada" y le indico su detector de eventos. objetoEmisor.addEventListener("accionTerminada", detectorAccionTerminada); // El detector del evento, recibe un objeto evento de tipo EventExtra function detectorAccionTerminada(evento:EventExtra):void{ // Puedo recoger los parametros a traves del objeto evento.extra for (var e:String in evento.extra){ trace(e + " --> " + evento.extra[e]); } } /* Devuelve el valor de cada elemento del objeto extra: nombre --> Iván telefono --> 620 32 54 28 puntuacion --> 59 posiciones --> 1,2,3,4,5 registrado --> true */
1 de noviembre de 2010 a las 23:37
Excelente amigo, te felicito, sin dudas el más claro tutorial que encontré en español en la web sobre eventos personalizados para AS3.
Mis felicitaciones y agradecimientos.
28 de noviembre de 2008 a las 0:16
[…] También podemos aprovechar que es nuestro evento personalizado para pasarle variables y luego poder recogerlas. […]
28 de noviembre de 2008 a las 0:05
[…] Podemos evitar el tener que modificar la clase para cada parámetro nuevo, usando un objeto. […]