lunes, 22 de junio de 2015

Eventos Personalizados


Ya hemos visto en varias oportunidades como se manejan eventos definidos bajo ciertos parámetros que se activan o “disparan” en determinadas situaciones (sonidos, presión de teclas, cargas, mouse, frames, etc).

Pero qué pasa si necesito extender la funcionalidad de los eventos o crear eventos propios? Veamos:





En esta primera parte vamos a ver como crear nuestros propios eventos y llamarlos desde varios puntos de un programa. Al mismo tiempo, veremos como la librería Actuate manipula un archivo de sonido. En la próxima entrega veremos un ejemplo de cómo extender la funcionalidad de los eventos.

Nuestro ejemplo en acción


Estructura del Ejemplo:
Estructura del Ejemplo

Para que se entienda mejor veamos primero cómo es su estructura:

Una clase principal o Main, donde declararemos nuestros eventos y que va a alojar el código necesario para que todo funcione.

Tendremos una clase llamada Cargador que se va a ocupar de cargar nuestros recursos (audio e imàgenes).

Por último, una clase menu para contener en ella todo lo relacionado a la interface del menú (recuadros, botones, etc).
Al iniciar el programa se cargarán los archivos: La imágen por un lado y el archivo de audio por el otro. 



Luego está el contenedor que proporciona los límites de la pantalla y a su vez carga la imágen proporcionada por Cargador.
Un poco más abajo tenemos la declaración de la nueva instancia de la clase menu y la ubicamos en la pantalla (centro).



Por último, están nuestros cuatro eventos propios:

La adición de estos eventos no difiere de los más "comunes"



En este caso (y con fines didácticos digamos) dos de ellos son declarados en la clase Main, pero “viven” o su código se encuentra alojado en la clase menu. Lo ideal no es cruzar declaraciones y código con otras clases en nuestros proyectos, pero quería dejar en claro que puede hacerse aunque en lo personal creo que es engorroso. En la próxima entrada veremos cómo deberían de tratarse. Aquí lo importante es conocer cómo se declaran y su sintaxis básica.


La clase menu es simplemente un contenedor para nuestros dos botones y en este caso particular las dos funciones de los eventos “Remover” y “Activar”.



Funcionamiento:


Bastante simple. El primer botón activa y desactiva la música de fondo, pero lo hace de una forma especial, dada por Actuate en este caso que crea el efecto de “desvanecer” (fade out) en un lapso de 3 segundos. Si se oprime nuevamente, la música retorna de la misma forma (fade in).

Manejo de eventos



El segundo botón, mueve el menú de un lado al otro sin más.


Toda la lógica que se encuentra definida para el primer botón es para asegurarnos de que al hacer “click” repetidas veces sobre él, no se disparen múltiples eventos.

Un "mute" que no es abrupto..lo mismo que el "continue"


Es un silencio de música “especial” ya que no lo hace de forma abrupta. Además, al volver a activarse no lo hace reiniciando el archivo de música, sino que continúa desde el último punto reproducido.


El boton “Deslizar” no hace mucho, pero puede observarse como Actuate trabaja para mover los objetos. Los dos cuadros de texto se van  compensando junto con los recuadros al animarse y ello provoca un efecto no deseado de compensación; Sólo para que lo tengan en cuenta.

Menu deslizado a la izquierda y sus efectos no deseados en el texto


Código fuente y más aquí.