Thursday 25 April 2019

Programación Orientada a Eventos

Además de poner imágenes en la pantalla, los juegos requieren que manejes la entrada del usuario. Puedes lograr esto con SDL usando el sistema de manejo de eventos.

En nuestro código, justo después de que SDL se haya inicializado y los medios estén cargados (como se mencionó en el tutorial anterior), declaremos nuestra bandera para el ciclo principal que se encarga de revisar si el usuario ha salido o no de la aplicación. Ya que apenas hemos comenzado el programa, es lógico que la incialicemos en falso.

También querremos declarar una unión de SDL_Event. Un evento en SDL puede ser algo como la acción de una tecla, el movimiento del mouse, accionar algún botón en un control, etc. En esta aplicación, solo buscaremos eventos de salida para finalizar la aplicación.

En tutoriales previos, hicimos que el programa esperara por unos cuantos segundos antes de cerrarse. Pero en esta aplicación el programa esperará hasta que el usuario salga antes de cerrarse.

Así que tendremos el ciclo de la aplicación mientras que el usuario no haya cerrado. Este ciclo que se mantiene en ejecución mientras la aplicación corre se conoce como el ciclo principal, conocido en algunos casos como el ciclo del juego, es el núcleo de cualquier juego.

En la cima de nuestro ciclo principal tenemos nuestro ciclo de eventos. Lo que lleva acabo es procesar la fila de eventos hasta que se encuentre vacía.

Cuando presionas una tecla, mueves el mouse o tocas la pantalla, agregas eventos a la fila de eventos.



La fila de eventos los almacena en el orden en que se van presentando, esperando a ser procesados. Cuando quieres averiguar que eventos ocurrieron para poder procesarlos, sondeas la fila para obtener el evento más reciente, llamando al método SDL_PollEvent. Lo que esta función hace es tomar el evento más reciente de la fila, y poner los datos del evento en el SDL_Event que pasamos a la función.

SDL_PollEvent va continuar removiendo eventos de la fila hasta que queda vacía. Cuando esto suceda, la función regresara 0. Por lo tanto, estas líneas de código continúan sondeando eventos de la fila hasta que esté vacía. Si un evento de la fila es un evento SDL_QUIT (cuando el usuario presiona la X de la ventana para cerrarla), ponemos la bandera de salida en verdadero para salir de la aplicación.

Luego de que hayamos terminado de procesar los eventos para nuestro frame, dibujamos en la pantalla y la actualizamos. Si la bandera de salida se establece en verdadero, la aplicación saldrá al final del ciclo. Si se mantiene en falso continuará hasta que el usuario cierre la ventana.


¡Descarga el código fuente y los recursos de esta publicación aquí!

No comments:

Post a Comment