Utilización de detectores de eventos

Los detectores de eventos permiten que un objeto, denominado objeto detector, reciba eventos difundidos por otro objeto, denominado objeto difusor. El objeto difusor registra el objeto detector que va a recibir los eventos generados por el difusor. Por ejemplo, se puede registrar un clip de película para que reciba notificaciones onResize desde el escenario o que una instancia de botón reciba notificaciones onChanged de un objeto de campo de texto. Se pueden registrar varios objetos detectores para que reciban eventos de un único difusor y se puede registrar un único objeto detector para que reciba eventos de varios difusores.

El modelo detector-difusor para eventos, a diferencia de los métodos de controlador, permite que varios fragmentos de código detecten el mismo evento sin que se produzca ningún conflicto. Los modelos de evento que no utilizan el modelo detector/difusor, como XML.onLoad(), por ejemplo, pueden resultar problemáticos cuando varios fragmentos de código detectan el mismo evento; los diferentes fragmentos de código entran en conflicto por el control de dicha referencia única a la función callback XML.onLoad. Con el modelo de detector/difusor, pueden añadirse fácilmente detectores del mismo evento sin que ello provoque conflictos de código.

Las siguientes clases de ActionScript pueden difundir eventos: Key, Mouse, MovieClipLoader, Selection, Stage y TextField. Para comprobar los detectores que están disponibles para una clase, consulte la entrada correspondiente en Referencia del lenguaje ActionScript 2.0.

Para más información sobre detectores de eventos, consulte los siguientes temas:

Para ver un archivo de origen de muestra, stagesize.fla, que ilustra cómo afecta la propiedad Stage.scaleMode a los valores de Stage.width y Stage.height cuando se cambia el tamaño de la ventana, visite la página de ejemplos de Flash en www.adobe.com/go/learn_fl_samples_es. Descargue y descomprima el archivo zip Samples y vaya a la carpeta ActionScript2.0/StageSize para acceder al ejemplo.

Modelo de detector de eventos

El modelo de eventos de los detectores de eventos es muy parecido al modelo de los controladores de eventos (consulte ActionScript y eventos), aunque presenta dos diferencias fundamentales:

En el código siguiente se aprecia el modelo del detector de eventos:

var listenerObject:Object = new Object();
listenerObject.eventName = function(eventObj:Object) {
    // El código se escribe aquí
};
broadcasterObject.addListener(listenerObject);

El código comienza con un objeto, listenerObject, con una propiedad eventName. El objeto detector puede ser cualquier objeto, como un objeto ya existente, un clip de película o una instancia de botón del escenario, o bien una instancia de cualquiera de las clases de ActionScript. Por ejemplo, un clip de película personalizado puede implementar métodos de detector para detectores del escenario. Puede incluso tener un objeto que detecte diversos tipos de detectores.

La propiedad eventName es un evento que se produce en broadcasterObject, que a su vez difunde el evento a listenerObject. Se pueden registrar varios detectores de eventos para un único difusor de eventos.

Se asigna una función al detector de eventos que responde de alguna manera al evento.

Finalmente, se llama al método addListener() en el objeto difusor, al que se pasa el objeto detector al método addListener().

Para anular el registro de un objeto detector de forma que deje de recibir eventos, debe llamar al método removeListener() del objeto difusor y pasarle el nombre del evento que se va a eliminar y el objeto difusor.

broadcasterObject.removeListener(listenerObject);

Ejemplo de detector de eventos

En el ejemplo siguiente se muestra cómo utilizar el detector de eventos onSetFocus en la clase Selection para crear un gestor de selección simple para un grupo de campos de introducción de texto. En este caso, el borde del campo de texto que se selecciona con el teclado se activa (aparece), mientras que el borde del texto que no está seleccionado se desactiva.

Para crear un gestor de selección simple con detectores de eventos:

  1. Con la herramienta Texto, cree un campo de texto en el escenario.
  2. Seleccione el campo de texto y, en el inspector de propiedades, elija Introducción de texto en el menú emergente Tipo de texto y haga clic en el botón Mostrar borde alrededor del texto.
  3. Cree otro campo de introducción de texto debajo del primero.

    Compruebe que la opción Mostrar borde alrededor del texto no esté seleccionada para este campo de texto. Puede continuar con la creación de campos de entrada de texto.

  4. Seleccione el fotograma 1 en la línea de tiempo y abra el panel Acciones (Ventana > Acciones).
  5. Para crear un objeto que detecte la notificación de selección de la clase Selection, introduzca el código siguiente en el panel Acciones:
    // Crea un objeto detector, focusListener.
    var focusListener:Object = new Object();
    // Define la función para el objeto detector.
    focusListener.onSetFocus = function(oldFocus_txt:TextField, newFocus_txt:TextField) {
        oldFocus_txt.border = false;
        newFocus_txt.border = true;
    }
    

    Este código crea un objeto llamado focusListener que define una propiedad onSetFocus y asigna una función a la propiedad. La función está formada por dos parámetros: una referencia al campo de texto que no está seleccionado y una referencia al campo de texto que está seleccionado. La función define la propiedad border del campo de texto que no está seleccionado con el valor false y define la propiedad border del campo que está seleccionado con el valor true.

  6. Para registrar el objeto focusListener para que reciba eventos del objeto Selection, añada el código siguiente al panel Acciones:
    // Registra focusListener con el difusor.
    Selection.addListener(focusListener);
    
  7. Pruebe la aplicación (Control > Probar película), haga clic en el primer campo de texto y presione la tecla Tabulador para pasar la selección de un campo a otro.

Flash CS3

 

Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios

Página actual: http://livedocs.adobe.com/flash/9.0_es/main/00000838.html