Mirando de cerca el Marco de Eventos de ActionScript 3.0

En este tutorial explicaré sobre el Marco de eventos de ActionScript 3.0. Después de este tutorial, debe tener una comprensión clara de cómo funcionan los eventos, los despachadores de eventos y los oyentes de eventos..

Que vas a aprender?

Debido a que el marco de eventos de AS3 es enorme, veremos todas las diferentes cosas que componen el marco de eventos. Aprenderemos sobre lo siguiente:

  • Eventos
  • Despachadores de eventos
  • Oyentes de eventos
  • Flujo de eventos
  • Eventos de uso frecuente.
  • Y algunos consejos y trucos.

Paso 1: El Marco de Eventos Simplificado

Realmente creo que le sería difícil entender el marco del evento si nos lanzamos directamente a la jerga técnica, por lo que primero describiré una situación de la vida real. Toda la situación es una metáfora del marco del evento. Está bien, así que aquí vamos:

Soy un ávido lector de Artes informaticas Y espero cada día por el nuevo número. Cuando recibo el ejemplar, empiezo a leerlo..

Paso 2: Analizar la Metáfora del Marco de Evento

Está bien, tenemos varias cosas sucediendo:

  • Recibo el nuevo número. Esta recepción de un problema es un Evento.
  • Este evento está ocurriendo en algún lugar, me sucede a mí, yo soy el EventDispatcher.
  • Estoy esperando a que llegue el nuevo número. Soy un objeto y estoy esperando que este evento suceda. Soy un objeto que es escuchando para que el evento suceda. Soy un objeto con un oyente del evento añadido a mi Este oyente del evento está escuchando un evento específico (es decir, está recibiendo un nuevo problema).
  • Cuando recibo el problema, empiezo a leerlo. Cuando el evento ha ocurrido, hago algo, ejecuto una función. Estoy manejando el evento. La función que estoy haciendo se llama entrenador de animales y / o el función de escucha.

Paso 3: jerga técnica - evento

He mencionado varias cosas:

  • Evento
  • EventDispatcher
  • Oyente del evento
  • función de manejador / oyente

Un Evento es un objeto que describe una ocurrencia, en Paso 1 El evento es la llegada de un nuevo número..

La mayoría de las veces verás un evento que está escrito en una estructura similar a esta:

 MouseEvent.CLICK

Este fragmento de código consta de dos cosas:

  • MouseEvent esta es la clase que contiene uno o más eventos. Esto siempre está escrito en CamelCase..
  • HACER CLIC Este es el tipo de evento. Esto siempre está escrito en MAYÚSCULAS..

El tipo de evento es en realidad una cadena constante estática. Puede sonar extraño, pero un Evento no es más que una cadena. Intenta ejecutar este fragmento.

 trace (MouseEvent.MOUSE_MOVE);

Obtendrás como salida movimiento del ratón. Acabamos de rastrear la constante MOUSE_MOVE, que está dentro de la clase MouseEvent. Un evento es una cadena! Pero esta cadena representa la ocurrencia de (en este ejemplo) el movimiento del mouse.

Paso 4: jerga técnica - EventDispatcher

Un evento siempre sucede en alguna parte. Donde sucede el evento es donde se dispara (despacha). Las raíces de los eventos de distribución se encuentran en la clase EventDispatcher. Tenga en cuenta que donde se envía el evento es donde está sucediendo. Así que si clip de película A envía un evento, luego se agrega un detector de eventos (los escuchas de eventos se explicarán en el paso 5) a clip de película B no recibiría este evento.

Para facilitar las cosas, todos los objetos de visualización tienen la función incorporada dispatchEvent (evento: evento), al igual que muchas otras clases.

 var myMC: MovieClip = new MovieClip (); myMC.dispatchEvent (nuevo evento (MouseEvent.CLICK));

Pero la mayoría de las veces no enviará eventos manualmente, la mayoría de los eventos se enviarán automáticamente. Por ejemplo, si hago clic en el clip de película A, enviará automáticamente el evento MouseEvent.CLICK.

Paso 5: jerga técnica - escucha de eventos

Cuando ocurre un evento determinado, nosotros, como desarrolladores de Flash, nos gustaría hacer algo para responder a este evento. Los oyentes del evento son lo que necesitas. Los oyentes del evento no tienen su propia clase, no, son un poco diferentes. Los oyentes de eventos se agregan a un objeto. Los oyentes de eventos son objetos que "escuchan" un determinado evento. Cuando este evento ocurre, entonces se llamará una función, una manejador (función).

Mira la imagen de abajo, mostrando la sintaxis detrás de la función addEventListener (), que se utiliza para agregar un detector de eventos:

En realidad, esos no son todos los parámetros que acepta el método addEventListener, todavía hay tres que no he mencionado. Casi nunca los usará, especialmente cuando acaba de comenzar a usar escuchas de eventos. Veamos nuevamente la estructura del método addEventListener.

 addEventListener (escriba: String, listener: Function, useCapture: Boolean = falso, prioridad: int = 0, useWeakReference: Boolean = falso): void

Así que vamos a discutir los últimos 3 parámetros:

  • utilizarCapturar: Cuando este parámetro se establece en verdadero, escucharemos el evento en la fase de captura. Por defecto, este parámetro se establece en falso, por lo tanto escuchamos el evento en la fase objetivo y burbuja. Vamos a discutir el flujo de eventos en Paso 10.
  • prioridad: Aunque parezca que todos los oyentes de eventos funcionan simultáneamente, en realidad no lo hacen. A veces pueden entrar en conflicto entre sí. Esto es para asegurarse de que un determinado oyente de eventos tenga una prioridad más alta que un oyente de eventos diferente.
  • useWeakReference: Cuando este parámetro se establece en verdadero, creará un vínculo débil entre el objeto y el detector de eventos. Bueno, ¿qué significa esto? Normalmente, los objetos se recolectan si no hay referencias a ellos. Cuando se elimina el objeto donde se agrega un detector de eventos, seguirá existiendo si se hace referencia a él en otro lugar. Esto sucede con fuertes referencias de memoria. Con referencias de memoria débil el detector de eventos se elimina cuando el objeto al que se agrega se elimina. Personalmente, establezco este parámetro en verdadero (así que uso referencias de memoria débil).

Eliminar un detector de eventos es tan fácil como agregar uno.

 // esto agrega un detector de eventos al stage stage.addEventListener (MouseEvent.CLICK, clickHandler); // esto elimina el detector de eventos agregado al escenario stage.removeEventListener (MouseEvent.CLICK, clickHandler);

Paso 6: Función Handler / Listener

Cuando se produce el evento que un detector de eventos está escuchando, llama a una función. Esta función se llama entrenador de animales o la función de escucha. Mire la imagen a continuación, que muestra la sintaxis del controlador:

Observe el argumento en el controlador, este argumento es obligatorio. La función de escucha solo tiene un argumento y no se le permite tener más. Este evento contiene información sobre el evento, hablaremos sobre esto en paso 9.

Paso 7: Agregar un detector de eventos y un controlador

Ahora queremos que myMC responda al evento distribuido, así que agregaremos un evento y luego la función del controlador. Nuestro código se verá así:

 // crea nuestro clip de película myMC var myMC: MovieClip = new MovieClip (); // deja que myMC distribuya el evento MouseEvent.CLICK myMC.dispatchEvent (new Event (MouseEvent.CLICK)); // agrega un detector de eventos a myMC, que escucha el evento MouseEvent.CLICK, y llamará clickHandler myMC.addEventListener (MouseEvent.CLICK, clickHandler); // define la función de la función del controlador clickHandler (event: Event) trace ("Escuché el evento MouseEvent.CLICK"); 

Después prueba tu película. (Windows: Ctrl + Enter, Mac: Cmd + Enter).

¿Obtuviste alguna salida? ¿No? Bueno, yo tampoco. Miraremos qué está mal en el próximo paso..

Paso 8: Orden del código

Entonces, ¿qué está mal? Bueno, no puede ser un error de sintaxis, al menos soy no consiguiendo nada No, esto no es técnicamente un error. Mire el código nuevamente, pero esta vez recuerde que el código se ejecutará línea por línea:

 // crea nuestro clip de película myMC var myMC: MovieClip = new MovieClip (); // deja que myMC distribuya el evento MouseEvent.CLICK myMC.dispatchEvent (new Event (MouseEvent.CLICK)); // agrega un detector de eventos a myMC, que escucha el evento MouseEvent.CLICK, y llamará clickHandler myMC.addEventListener (MouseEvent.CLICK, clickHandler); // define la función de la función del controlador clickHandler (event: Event) trace ("Escuché el evento MouseEvent.CLICK"); 

Espero que se haya dado cuenta de lo que salió mal: el evento se está distribuyendo antes de que se haya agregado un detector de eventos a myMC. Entonces, cuando se ha agregado el detector de eventos, es demasiado tarde, el evento ha ocurrido. Afortunadamente, es fácil de resolver, solo cambia el orden y primero agrega el detector de eventos, luego despacha el evento:

 // crea nuestro clip de película myMC var myMC: MovieClip = new MovieClip (); // agrega un detector de eventos a myMC, que escucha el evento MouseEvent.CLICK, y llamará clickHandler myMC.addEventListener (MouseEvent.CLICK, clickHandler); // deja que myMC distribuya el evento MouseEvent.CLICK myMC.dispatchEvent (new Event (MouseEvent.CLICK)); // define la función de la función del controlador clickHandler (event: Event) trace ("Escuché el evento MouseEvent.CLICK"); 

Entonces, ¿por qué hicimos todo eso? Bueno, es probable que encuentres este problema y puede llevarte un tiempo darte cuenta de lo que está pasando. Es mejor mostrarte el problema y enseñarte cómo resolverlo..

Paso 9: El argumento del evento

Cada función manejadora tiene un argumento; El argumento del evento. Este argumento contiene datos sobre el evento y el despachador de eventos. El parámetro contiene propiedades que nos gustaría leer. Aquí hay una lista de algunos de los más utilizados:

  • objetivo: Esto devuelve el objeto objetivo y por lo tanto el despachador de eventos del evento.
  • objetivo actual: Esto devuelve el objeto apuntado actualmente dentro del flujo de eventos, hablaremos sobre el flujo de eventos en Paso 10.
  • tipo: Esto devolverá la cadena de evento. El valor siempre se escribe en camelCase. Entonces MOUSE_DOWN tiene el valor mouseDown.

Con esto podemos usar el mismo controlador para diferentes tipos de eventos. ¿Cómo? Bueno, vamos a discutir esto en el siguiente paso.

Paso 10: Múltiples eventos, una función de escucha

Bien, primero veamos este fragmento de código:

 stage.addEventListener (MouseEvent.MOUSE_DOWN, downHandler); stage.addEventListener (MouseEvent.MOUSE_UP, upHandler); function downHandler (event: MouseEvent) trace ("Down");  function upHandler (event: MouseEvent) trace ("Up"); 

Estamos usando dos eventos, a saber MouseEvent.MOUSE_DOWN y MouseEvent.MOUSE_UP. El primer evento es el evento cuando el mouse presiona el botón principal del mouse y lo mantiene presionado. abajo. Cuando la persona suelta este botón, se produce el evento MouseEvent.MOUSE_UP. El boton del mouse va arriba despues de lanzarlo.

Ahora podemos usar en lugar de dos manejadores (a saber, downHandler y upHandler) sólo un controlador. Elimine el código que hemos escrito y escriba lo siguiente:

 stage.addEventListener (MouseEvent.MOUSE_DOWN, manejador); stage.addEventListener (MouseEvent.MOUSE_UP, manejador); controlador de funciones (evento: MouseEvent) trace ("Algo ha ocurrido ..."); 

Bien, hemos configurado nuestro controlador y funciona, pero queremos que nuestro controlador haga algo específico, dependiendo de qué evento se pasa al controlador. Afortunadamente, podemos usar tipo de evento. Vamos a usarlo!

 stage.addEventListener (MouseEvent.MOUSE_DOWN, manejador); stage.addEventListener (MouseEvent.MOUSE_UP, manejador); controlador de funciones (evento: MouseEvent) if (event.type == "mouseDown") trace ("Down");  else trace ("Up"); 

Paso 11: Flujo de eventos

Ahora digamos que un clic ocurre en un movieclip, llamémoslo mcA. El evento no se despacha simplemente en mcA, no, el evento viaja a través de todo el jugador. Este viaje se llama flujo de eventos, Solo piensa en cómo el evento está fluyendo a través del jugador..

El evento comienza en el nivel superior, en el escenario, después pasará por el los padres de mcA, Hasta que el evento llegue a mcA. Luego, el evento "burbujeará" de regreso desde mcA, de regreso al escenario.

Ok, genial, pero ¿para qué puedo usar esto? Como ahora sabemos que un evento viaja a través de todos los padres del despachador, podemos usar solo uno escucha de eventos, para rastrear los eventos de más de un objeto.

Paso 12: Múltiples objetos, un detector de eventos

Bien, entonces vamos a crear algunos clips de película múltiples uno dentro del otro. Puede hacerlo usted mismo, o simplemente usar el archivo step-11.fla provisto.

Crearemos 3 clips de película y les daremos los nombres de las instancias. redMC, blueMC y greenMC. Luego coloque todos estos dentro de un clip de película más grande, llamado envase.

Ahora comencemos a escribir código. Ya he creado una capa llamada Comportamiento, así que escribe tu código en esa capa. Primero vamos a agregar un detector de eventos a envase, escuchando el evento MouseEvent.CLICK, con el controlador llamado clickHandler.

 container.addEventListener (MouseEvent.CLICK, clickHandler); function clickHandler (event: MouseEvent) // cuerpo de la función

Queremos saber en qué botón se hace clic, así que ¿por qué agregamos un detector de eventos al contenedor? Bueno, mira la imagen de abajo:

Como ve, el evento se está distribuyendo en redMC, sin embargo, burbuja de vuelta al contenedor. Luego, el detector de eventos agregado al contenedor escuchará el evento y llamará a la función de escucha clickHandler. Lo mismo ocurre con blueMC y greenMC.

Ahora vamos a usar event.target, porque event.target es el dispatcher del evento, y el dispatcher del evento es redMC. Entonces, ¿cómo podemos usar event.target? Podemos comprobar event.target.name, que devuelve el nombre de la instancia como una cadena. Así que simplemente podemos usar normal Si declaraciones:

 container.addEventListener (MouseEvent.CLICK, clickHandler); función clickHandler (event: MouseEvent) if (event.target.name == "redMC") trace ("Red");  if (event.target.name == "blueMC") trace ("Blue");  if (event.target.name == "greenMC") trace ("Green"); 

Paso 13: Eventos de uso frecuente

Ahora que tiene una buena comprensión del marco del evento, sin embargo, para lograr algo, la clave es saber qué evento usar. Un gran lugar para comprobar qué eventos existen, es la referencia del lenguaje y componentes ActionScript 3.0. Simplemente haga clic en un evento que contenga una clase, como MouseEvent, y observe qué es cada evento.

Paso 14: MouseEvent.MOUSE_MOVE

Este evento ocurre cuando el usuario mueve el mouse. Si agrega un detector de eventos que escucha este evento, digamos, un clip de video llamado myMC, entonces sabría cuándo se mueve el mouse sobre myMC.

 myMC.addEventListener (MouseEvent.MOUSE_MOVE, mouseMoveHandler); function mouseMoveHandler (event: MouseEvent) trace ("Su mouse se está moviendo sobre myMC"); 

Paso 15: MouseEvent.MOUSE_OVER

Este evento ocurre cuando el usuario se mueve (se desplaza). Este evento solo ocurre cuando el usuario mueve el cursor desde otro lugar sobre el objeto. Mover el mouse sobre el objeto ya no es el evento MouseEvent.MOUSE_OVER, sino el evento MouseEvent.MOUSE_MOVE.

 myMC.addEventListener (MouseEvent.MOUSE_OVER, overHandler); function overHandler (event: MouseEvent) trace ("Acaba de mover el mouse en myMC"); 

Paso 16: MouseEvent.MOUSE_OUT

Este evento es precisamente lo contrario de MouseEvent.MOUSE_OVER. Esto es cuando el cursor del usuario se mueve fuera del objeto, o como lo llaman (los chicos que crearon AS3), fuera del objeto.

 myMC.addEventListener (MouseEvent.MOUSE_OUT, outHandler); function outHandler (event: MouseEvent) trace ("Acaba de sacar el mouse de myMC"); 

Paso 17: MouseEvent.MOUSE_DOWN

Este evento ocurre cuando el usuario presiona el mouse primario hacia abajo, mientras se mantiene presionado.

 myMC.addEventListener (MouseEvent.MOUSE_DOWN, downHandler); function downHandler (event: MouseEvent) trace ("El botón primario del mouse está presionado en myMC"); 

Paso 18: MouseEvent.MOUSE_UP

Este evento es precisamente lo contrario de MouseEvent.MOUSE_DOWN. Cuando el usuario suelta el botón primario del mouse, se produce el evento MouseEvent.MOUSE_UP.

 myMC.addEventListener (MouseEvent.MOUSE_UP, upHandler); function upHandler (event: MouseEvent) trace ("El botón principal del mouse se ha soltado, mientras se movía sobre myMC"); 

Paso 19: MouseEvent.CLICK

Bueno, el nombre ya lo deja bastante claro cuando ocurre este evento. Este evento ocurre cuando el usuario hace clic (con el botón primario del mouse).

 myMC.addEventListener (MouseEvent.CLICK, clickHandler); function clickHandler (event: MouseEvent) trace ("Acabas de hacer clic en myMC"); 

Paso 20: MouseEvent.DOUBLE_CLICK

Bueno, este evento ocurre cuando el usuario hace clic dos veces (con el botón primario del mouse). Tenga en cuenta que cuando se produce MouseEvent.DOUBLE_CLICK, ese MouseEvent.CLICK se produce por segunda vez.

 myMC.addEventListener (MouseEvent.DOUBLE_CLICK, doubleClickHandler); function doubleClickHandler (event: MouseEvent) trace ("Acabas de hacer doble clic en myMC"); 

Si ahora prueba su película y hace doble clic, no pasará nada. ¿Por qué? Bueno, de forma predeterminada, los clips de película (y casi todos los objetos de visualización) tienen la propiedad doubleClickEnabled establecida en false. Así que MouseEvent.DOUBLE_CLICK no será enviado. Solo configúralo en verdadero, y todo funcionará bien.

 myMC.addEventListener (MouseEvent.DOUBLE_CLICK, doubleClickHandler); function doubleClickHandler (event: MouseEvent) trace ("Acabas de hacer doble clic en myMC");  myMC.doubleClickEnabled = true;

Paso 21: Evento .ENTER_FRAME

Este evento ocurre cada vez que el objeto entra en un nuevo marco (sí, eso suena un poco extraño). Bueno, básicamente, este evento se produce a la velocidad de la velocidad de fotogramas. Eso significa que si su película tiene una velocidad de fotogramas de 30 fps, el evento se convocará 30 veces por segundo. ¿Para qué usarías este evento? Puedes usar este evento para hacer que las cosas sucedan gradualmente. Por ejemplo, podría aumentar la coordenada x de un objeto en 5, a la velocidad de la velocidad de fotogramas.

 myMC.addEventListener (Event.ENTER_FRAME, enterFrameHandler); función enterFrameHandler (evento: evento) myMC.x + = 5; 

Paso 22: Evento.COMPLETO

Este evento ocurre cuando el objeto completa lo que estaba haciendo. La mayoría de las veces lo usarás para cosas que necesitan cargar algo, o para cosas que reproducen algún tipo de medio. Un URLLoader carga un URLRequest, luego de que el URLLoader se completa, luego cargaremos estos datos en un cargador diferente y luego agregaremos el cargador al escenario..

 var myURLRequest: URLRequest = new URLRequest ("http://farm3.static.flickr.com/2382/1616598266_bafebf0086_o.jpg"); var myURLLoader: URLLoader = new URLLoader (myURLRequest); myURLLoader.dataFormat = URLLoaderDataFormat.BINARY; myURLLoader.addEventListener (Event.COMPLETE, completeHandler); function completeHandler (event: Event) var loader: Loader = new Loader (); loader.loadBytes (myURLLoader.data); addChild (cargador); 

Paso 23: Evento. ACTUALIZAR

Este evento ocurre cuando se cambia el tamaño del flash player o la página donde se contiene el flash. Puede usar este evento para reposicionar objetos después de que haya cambiado el tamaño.

 stage.addEventListener (Event.RESIZE, resizeHandler); function resizeHandler (event: Event) trace ("Las dimensiones del escenario son" + stage.stageWidth + "x" + stage.stageHeight); 

Paso 24: KeyboardEvent.KEY_DOWN

Este evento ocurre cuando alguna tecla se presiona en el teclado.

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) trace ("¡Acaba de presionar una tecla!"); 

Paso 25: KeyboardEvent.KEY_UP

Este evento es precisamente lo opuesto a KeyboardEvent.KEY_DOWN, este evento ocurre cuando alguna Se suelta la tecla (la tecla sube).

 stage.addEventListener (KeyboardEvent.KEY_UP, keyUpHandler); function keyUpHandler (event: KeyboardEvent) trace ("Acaba de liberar una tecla"); 

Paso 26: Usando los booleanos clave incorporados

Por supuesto, es bastante inútil responder a cualquier llave (a excepción de un protector de pantalla), por lo que necesitaríamos recuperar información sobre qué tecla se presionó. Afortunadamente, algunas de las claves están integradas en la clase KeyboardEvent, estas son booleanas y se configuran como verdaderas cuando se presionan. Estos construidos en booleanos son:

  • KeyboardEvent.altKey, se establece en verdadero cuando se presiona la tecla alt.
  • KeyboardEvent.commandKey, se establece en verdadero cuando se presiona la tecla de comando (solo AIR).
  • KeyboardEvent.controlKey, se establece en true cuando se presiona la tecla de control (ctrl) (solo AIR).
  • KeyboardEvent.ctrlKey, se establece en true cuando se presiona la tecla de control (ctrl) en Windows. Sin embargo, en Mac, la tecla ctrl es verdadera cuando se presiona la tecla cmd.
  • KeyboardEvent.shiftKey, se establece en verdadero cuando se presiona la tecla Mayús.

Así que ahora podemos usar esto para ser más específico, qué tecla debe ser presionada antes de hacer algo..

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.shiftKey) trace ("Acaba de presionar la tecla Mayús"); 

Paso 27: Uso de códigos de clave

Quizás se esté preguntando, de acuerdo, ¿qué pasa con todas las otras teclas? Bueno, hay algo que se llama clave. Cada tecla tiene un número determinado; un código clave. Podemos verificar el código clave de la clave que desencadenó el evento. Esto se hace con event.keyCode, que devuelve un entero. Haga clic aquí para obtener una lista de los códigos clave. A pesar de que es para javascript, los códigos clave son los mismos.

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.keyCode == 65) trace ("Acaba de presionar la tecla A"); 

Ahora es más fácil almacenar los códigos de clave en una variable (o si eres un hardcore, en una clase) y solo usar esa variable, en lugar del código de clave.

 var A: uint = 65; stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.keyCode == A) trace ("Acaba de presionar la tecla A"); 

Paso 28: Uso de códigos de caracteres

Con los códigos clave puede hacer bastante, sin embargo, a veces no es lo que necesita. Por ejemplo, la misma clave se utiliza para los caracteres. una y UNA. Pero todavía nos gustaría diferenciar entre los dos. Bueno, el evento lleva el código de carácter del despachador de eventos.

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) trace (event.charCode); 

Bien, esto funciona, sin embargo, ¿entonces necesitamos recordar estos códigos de caracteres? No. Por suerte, podemos usar la función charCodeAt (), que devuelve el código de carácter de un carácter (en una cadena). charCodeAt () toma por defecto el primer carácter de la cadena. charCodeAt (0) es el primer carácter, charCodeAt (1) el segundo, etc..

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.charCode == String ("a"). charCodeAt ()) trace ("Acaba de presionar una tecla en minúscula"); 

Paso 29: Enfoque

Ahora intenta escribir lo siguiente:

 myMC.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) trace ("Acaba de presionar una tecla, mientras se enfoca en myMC"); 

Intenta probar esto, ¡no funcionará! ¿Por qué? Si myMC es un clip de película, no aceptará la entrada del teclado, por lo que los eventos del teclado no se distribuirán en los clips de película. Si desea que myMC responda, agregue el detector de eventos al escenario y luego haga que myMC haga algo. Intente cambiar myMC de un clip de película a un campo de texto dinámico, entonces funcionará.

¿Qué pasa con dos campos de texto dinámico? Si el usuario escribe, ¿ambos campos de texto envían un evento? No, solo el que estás escribiendo. Esto se llama atención. Los eventos de teclado son enviados por el objeto que tiene el foco. El escenario es el único objeto que aún tiene foco, mientras que un objeto diferente también tiene foco.

Paso 30: TimerEvent.TIMER

Este evento está especialmente diseñado para los temporizadores. Se envía en un temporizador, que acaba de alcanzar el tiempo de retardo. Esto significa que puede usar este evento para hacer algo de manera muy precisa, a intervalos de tiempo establecidos.

 var myTimer: Timer = new Timer (1000, 5); myTimer.start (); myTimer.addEventListener (TimerEvent.TIMER, timerHandler); function timerHandler (event: TimerEvent) trace ("un segundo después ..."); 

Paso 31: TimerEvent.TIMER_COMPLETE

Todos los temporizadores tienen un segundo parámetro opcional. Este parámetro establece la cuenta de repetición del temporizador. Esto significa que cuando el temporizador alcance el tiempo de retardo, comenzará de nuevo. Si el temporizador se ha repetido tantas veces como el recuento de repetición, enviará el evento TimerEvent.TIMER_COMPLETE.

 var myTimer: Timer = new Timer (1000, 5); myTimer.start (); myTimer.addEventListener (TimerEvent.TIMER_COMPLETE, timerHandler); function timerHandler (event: TimerEvent) trace ("El temporizador se ha repetido 5 veces"); 

Conclusión

¡Eso fue todo! Espero que ahora tenga un conocimiento profundo del marco de eventos de ActionScript 3.0. Tenga en cuenta que los eventos discutidos no son todos los eventos que existen, solo comenté los que uso con frecuencia. No olvide consultar siempre la referencia de idioma y componentes, ¡puede ayudarlo mucho! Fue un placer escribir para ustedes.!