6. Eventos

6.1. Que son los eventos

Una notificación de que ha sucedido un “acontecimiento” en una aplicación, o en alguno de sus componentes, que nos permite reaccionar y generar uan respuesta activa a la notificación.

Los puede generar:

Periferico. Teclado, ratón, cámara o micrófono
Aplicación. Subida de un fichero
Se ha instanciado un objeto
Un texto se ha cambiado
Ha finalizado un intervalo de tiempo de un Timer.

Una ves se inicializa una aplicación o película, son los eventos los que rigen los cambios de esta.

Un objeto permanece inmóvil, sino se le aplica una fuerza…

Intervienen como mímino tres partes:

dos interlocutores / mensaje

(emisor/receptor)

emisor: event target u objeto

receptor: listener

mensaje: respuesta al evento

El emisor propaga el evento através de un event dispatcher o dispatcher. Por ejemplo lo que os mostré el otro día: TimerEvent.TIMER sería event dispatcher, y “Timer” sería un dispatcher.

La acción del dispatcher, se le llama “lanzar un evento”, trigger o dispatch.

Un emisor (objeto) puede lanzar varios eventos.

//Creamos el evento para controlar cuando ha acabado de reproducir el video
this.cuadro_interior.mi_video.addEventListener(VideoEvent.COMPLETE, findelvideo);
this.cuadro_interior.mi_video.addEventListener(VideoEvent.PLAYING_STATE_ENTERED, compruebaplay);
this.cuadro_interior.mi_video.addEventListener(VideoEvent.STOPPED_STATE_ENTERED, lanzabotonplay);
this.cuadro_interior.mi_video.addEventListener(VideoEvent.PAUSED_STATE_ENTERED, lanzabotonplay);
this.cuadro_interior.mi_video.addEventListener(MouseEvent.MOUSE_DOWN,dalealplay);

Un dispatcher puede lanzar eventos en cualquier momento de forma asincrona. Flash reproduce la película de forma asíncrona, así que usaremos los dispatcher para cambiar su reproducción a nuestro gusto.

El sistema de eventos es una comunicación unidireccional asíncrona. Los mensajes van del dispacher->listeners, y es el dispatcher el que decide “Que” y “Cuando” lo hace.

6.2. Registrando un listener

1. Determinar “Cual” es el objeto emisor: event target (objeto).

2 Elegir el tipo de evento que quiere subscribirse el listener.

3. Crear un listener para el evento elegido.

4. Esperar que el emisor lance algún evento.

6.2.1. Temporizadores

emisor ——————————— receptor———————– mensaje

dispatcher/event target————– Evento

Timer———————————- TimerEvent.Timer……………….función que ejecuta cuando se activa el listener

Ejemplo 6.2.1.

6.2.2 Carga de datos externa

emisor ——————————————- receptor ———————————mensaje

dispatcher=event target EVENTO FUNCIÓN

urlLoader Event.COMPLETE

Carga de datos realizada

Nota: La carga de datos es ásincrona. De forma que cuando hacemos el load, no carga al momento los datos, sino que controlamos el proceso con un evento sobre el objeto que realiza la precarga.

Ejercicio 6.2.2.

6.2.3 Eventos de ratón

Ejemplo de la vida cotidiana: Interruptor de la luz.

Ejercicio 6.2.3. (I, II, 1er Ejemplo gráfico)

Resumen ejemplos libro: Se puede usar el mismo mensaje para dos eventos diferentes.

Cualquier evento en AS hereda la superclase Event, y esta le asigna el atributo target, que dice cual es el objeto que ha lanzado el evento.

6.3. Eliminar el registro de un listener para un Evento

Cuando ya hemos realizado una acción o movimiento con un objeto, y ya no nos interesa mas usar el mismo, es recomendable borrar la instancia del evento, para descargar memoria.

addEventListener – Añadir ———— ejemplo.AddEventListener(MouseEvent.CLICK,esclic);

removeEventListener – Borrar——–ejemplo.RemoveEventListener(MouseEvent.CLICK,esclic);

6.4. Lanzando eventos

Para que un objeto puede actuar como emisor o dispatcher, la clase del mismo debe cumplir un requisito:

1 Implementar la interfaz IEventDispatcher

Asi de primeras igual nos suena a “chino”, pero si os digo que prácticamente todos los objetos con representación visual (botones, clips, …), asi como todas las instancias de carga de información como URLLoader , ya lo implementan…, pues desde nuestra parte, simplemente es interesante saber esto, para el día que queramos diseñarnos un objeto propio, pero por lo demas, con crear un objeto y asignarle cualquiera de los objetos por defecto:

var micoche:MovieClip=new MovieClip();

nuestro objeto ya habría heredado esa clase, y nos olvidaremos…

Clase EventDispatcher

  • dispatchEvent para lanzar eventos
  • removeEventListener para un tipo de evento dado
  • hasEventListener, discriminar si el dispatcher u objeto tiene algún listener suscrito
  • addEventListener, para añadir listeners al dispatcher u objeto

De estos, el que todavía no habíamos visto es el “hasEventListener”, os pongo un sencillo ejemplo para entenderlo:

boton.addEventListener(MouseEvent.CLICK, doSomething);

function doSomething(evt:MouseEvent):void{

   if(boton.hasEventListener(MouseEvent.CLICK)){

      boton.removeEventListener(MouseEvent.CLICK, doSomething);
      trace("se elimino el event listener");
   }
}
NOTA: Estos métodos están implementados en la clase EventDispathcer. Asi que cuando usemos una objeto/dispatcher que la herede, podemos usar cualquiera de sus métodos, sin necesidad de instanciar dicha super clase.

Ejercicio 6.4.Galeria.

Ejercicio 6.4. Componente FotoFlash.


el de mapas de bits