Emitir eventos personalizados en AS3 (I)

Publicado por Iván Gajate el 9 de noviembre de 2008 en AS3, Flash, Tutoriales

Ahora en AS3 es mucho mas fácil emitir un evento personalizado desde un objeto y recogerlo con un listener. Se hace mediante dispatchEvent.

Al igual que cuando queremos recoger el evento de ratón mouseDown lo hacemos así:

import flash.events.MouseEvent;

boton_btn.addEventListener("mouseDown", botonPulsado);

function botonPulsado(evento:MouseEvent):void{
	trace("Boton pulsado!!");
}

también podemos hacer que nuestros objetos emitan eventos para que otros objetos puedan recogerlos con un listener.

En AS3 todos los objetos que hereden de alguna subclase de DisplayObject (todos los de la lista de visualización) pueden emitir eventos, con lo que si nuestra clase extiende de Sprite, que será lo mas normal, pues ya podemos hacerlo.

Para emitir un evento haremos esto:

dispatchEvent(new Event("accionTerminada"));

donde accionTerminada es nuestro evento personalizado. Para recoger este evento usamos un listener:

import flash.events.Event;

emisor.addEventListener("accionTerminada", onAccionTerminada)

function onAccionTerminada(evento:Event):void{
	trace("Accion Terminada");
}

Lo mejor de todo esto, es que el evento de tipo Event, mantiene la misma estructura que el resto de eventos, por lo que podemos acceder de forma sencilla al emisor del evento mediante el target, y acceder así a sus métodos y propiedades públicas:

function onAccionTerminada(evento:Event):void{
	trace("accionTerminada");
	trace(evento.target);  // Devuelve una referencia al objeto emisor
}

Al igual que con el mouseDown, no es aconsejable escribir el evento entrecomillado, lo hemos hecho así para entender mejor el ejemplo, pero realmente se accedería a través de MouseEvent.MOUSE_DOWN.

Podemos guardar una constante con el string de nuestro evento dentro de nuestra clase:

public static const ACCION_TERMINADA:String = "accionTerminada";

Y para recoger el evento ahora escribiremos

import flash.events.Event;
import miClase;

emisor.addEventListener(miClase.ACCION_TERMINADA, onAccionTerminada)

aprovechándonos así de la comprobación de tipos y manteniendo la encapsulación.

También podemos aprovechar que es nuestro evento personalizado para pasarle variables y luego poder recogerlas.

 

23 comentarios para “Emitir eventos personalizados en AS3 (I)”

  1. exelente, me ayudo mucho en algo que estoy haciendo gracias.

  2. Hola Richard,
    lo que comentas es muy correcto, sin embargo es más cómodo si haces que tu clase extienda eventDispatcher y ya lo tienes hecho 😀

  3. Me ha venido perfecto, gracias.

  4. […] También podemos aprovechar que es nuestro evento personalizado para pasarle variables y luego poder recogerlas. […]

  5. […] crearnos un evento genérico donde incluiremos todos los parámetros extra que queramos […]