Fundamentos de la gestión de eventos

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Los eventos se pueden considerar como sucesos de cualquier tipo en el archivo SWF que resultan de interés para el programador. Por ejemplo, la mayor parte de los archivos SWF permiten algún tipo de interacción con el usuario, ya sea algo tan sencillo como responder a un clic del ratón o algo mucho más complejo, como aceptar y procesar datos escritos en un formulario. Toda interacción de este tipo entre el usuario y el archivo SWF se considera un evento. Los eventos también pueden producirse sin interacción directa con el usuario, como cuando se terminan de cargar datos desde un servidor o se activa una cámara conectada.

En ActionScript 3.0, cada evento se representa mediante un objeto de evento, que es una instancia de la clase Event o de alguna de sus subclases. Un objeto de evento no solo guarda información sobre un evento concreto, sino que además contiene métodos que facilitan la manipulación del objeto de evento. Por ejemplo, cuando Flash Player o AIR detectan un clic de ratón, crean un objeto de evento (una instancia de la clase MouseEvent) para representar ese evento de clic de ratón en concreto.

Tras crear un objeto de evento, Flash Player o AIR lo distribuyen , lo que significa que el objeto de evento se transmite al objeto que es el destino del evento. El objeto que actúa como destino del objeto de evento distribuido se denomina destino del evento . Por ejemplo, cuando se activa una cámara conectada, Flash Player distribuye un objeto de evento directamente al destino del evento que, en este caso, es el objeto que representa la cámara. No obstante, si el destino del evento está en la lista de visualización, el objeto de evento se hace pasar por la jerarquía de la lista de visualización hasta alcanzar el destino del evento. En algunos casos, el objeto de evento se "propaga" de vuelta por la jerarquía de la lista de visualización usando la misma ruta. Este recorrido por la jerarquía de la lista de visualización se denomina flujo del evento .

Se pueden usar detectores de eventos en el código para detectar los objetos de evento. Los detectores de eventos son las funciones o métodos que se escriben para responder a los distintos eventos. Para garantizar que el programa responde a los eventos, es necesario añadir detectores de eventos al destino del evento o a cualquier objeto de la lista de visualización que forme parte del flujo del evento de un objeto de evento.

Cuando se escribe código para un detector de eventos, se suele seguir esta estructura básica (los elementos en negrita son marcadores de posición que se sustituyen en cada caso específico):

function eventResponse(eventObject:EventType):void 
{ 
    // Actions performed in response to the event go here. 
} 
 
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);

Este código hace dos cosas. En primer lugar, define una función, que es la forma de especificar las operaciones que se llevarán a cabo como respuesta al evento. A continuación, llama al método addEventListener() del objeto de origen, básicamente "suscribiendo" la función al evento especificado de modo que se lleven a cabo las acciones de la función cuando ocurra el evento. Cuando el evento se produce finalmente, el destino de evento comprueba la lista de todas las funciones y métodos registrados como detectores de eventos. A continuación llama a cada uno a su vez, pasando el objeto de evento como parámetro.

Es necesario modificar cuatro elementos del código para crear un detector de eventos personalizado. En primer lugar se debe cambiar el nombre de la función por el nombre que se desee usar (es necesario realizar este cambio en dos lugares, donde en el código aparece eventResponse ). Seguidamente, hay que especificar el nombre de clase adecuado para el objeto de evento distribuido por el evento que se desea detectar ( EventType en el código) y hay que indicar la constante apropiada para el evento específico ( EVENT_NAME en el listado). En tercer lugar, es necesario llamar al método addEventListener() en el objeto que distribuirá el evento ( eventTarget en este código). Opcionalmente, se puede cambiar el nombre de la variable utilizada como parámetro de la función ( eventObject en el código).

Conceptos y términos importantes

La siguiente lista de referencia contiene términos importantes que aparecerán al escribir rutinas de gestión de eventos:

Propagación
Sucede para algunos eventos, de forma que un objeto de visualización principal puede responder a eventos distribuidos por sus elementos secundarios.

Fase de propagación
Parte del flujo de eventos en la que un evento se propaga hasta los objetos de visualización principales. Esta fase se produce tras las fases de captura y destino.

Fase de captura
Parte del flujo de eventos en la que un evento se propaga desde el destino más general hasta el objeto de destino más específico. Esta fase se produce antes de las fases de propagación y destino.

Comportamiento predeterminado
Algunos eventos incluyen un comportamiento que ocurre normalmente junto con el evento, denominado comportamiento predeterminado. Por ejemplo, cuando un usuario escribe texto en un campo de texto, se activa un evento de introducción de texto. El comportamiento predeterminado de ese evento es mostrar el carácter que se ha escrito en el campo de texto, si bien se puede sustituir ese comportamiento predeterminado (si, por alguna razón, no se desea que se muestre el carácter escrito).

Distribuir
Notificar a los detectores de eventos que se ha producido un evento.

Evento
Algo que le sucede a un objeto y que dicho objeto puede comunicar a otros.

Flujo de eventos
Cuando los eventos se producen en un objeto de la lista de visualización (un objeto que se muestra en pantalla), todos los objetos que contienen ese objeto reciben la notificación del evento y, a su vez, notifican a sus detectores de eventos. El proceso comienza en el escenario y avanza a través de la lista de visualización hasta el objeto en el que se ha producido el evento para después volver de nuevo hasta el escenario. Este proceso se conoce como el flujo del evento.

Objeto Event
Objeto que contiene información acerca de un evento en concreto y que se envía a todos los detectores cuando se distribuye un evento.

Destino del evento
Objeto que realmente distribuye el evento. Por ejemplo, si el usuario hace clic en un botón que se encuentra dentro de un objeto Sprite que, a su vez, está en el escenario, todos esos objetos distribuirán eventos, pero el destino del evento es el objeto en el que se produjo el evento; en este caso, el botón sobre el que se ha hecho clic.

Detector
Función u objeto que se ha registrado a sí mismo con un objeto para indicar que debe recibir una notificación cuando se produzca un evento específico.

Fase de destino
Punto del flujo de eventos en el que un evento ha alcanzado el destino posible más específico. Esta fase tiene lugar entre las fases de captura y propagación.