Eventos

El Game Maker emplea lo que se conoce como programación orientada a eventos. Esto es, en todo tipo de situaciones las instancias de los objetos reciben eventos (como mensajes que indican que algo ha sucedido). Entonces los objetos pueden reaccionar a estos mensajes ejecutando ciertas acciones. Para cada objeto debes indicar a qué eventos responderá y qué acciones debe realizar. Puede parecer complicado pero en realidad es bastante sencillo. Primero que nada, para la mayoría de los eventos los objetos no tienen que hacer nada. Para los eventos donde algo suceda puedes usar muy simples comandos de arrastrar y soltar para indicar las acciones.

 

En medio de la ventana de propiedades de objeto hay una lista de los eventos a los cuales el objeto puede reaccionar. Al principio está vacía. Puedes agregar eventos presionando el botón Add Event. Aparecerá un pequeño menú con todos los diferentes tipos de eventos. Aquí debes seleccionar el evento que deseas agregar. En ocasiones se mostrará un nuevo menú con opciones extra. Por ejemplo, para el evento del teclado debes seleccionar la tecla. Más abajo encontrarás una completa lista con descripciones de los eventos. Seleccionaremos un evento de la lista. Este será el evento que modificaremos. Puedes cambiar el evento seleccionado haciendo clic sobre él. A la derecha están todas las acciones representadas por pequeños iconos. Se encuentran agrupadas en varias páginas / fichas de opciones. En el siguiente capítulo describiré todas las acciones y lo que realizan. Entre los eventos y las acciones se encuentra la lista. Esta lista contiene las acciones para el evento actual. Para agregar acciones a la lista, arrástralas desde la derecha a la lista. Serán colocadas una bajo la otra, con una breve descripción. Para cada acción se te pedirán algunos parámetros. Estos se describirán también en el siguiente capítulo. Después de agregar algunas acciones, tendrías algo como esto:

Ahora puedes agregar acciones a otro evento. Haz clic con el botón izquierdo del ratón sobre el evento adecuado para seleccionarlo y arrastra la acción a la lista. Puedes cambiar el orden de las acciones en la lista arrastrando los iconos. Si mantienes presionada la tecla <Ctrl> mientras arrastras una acción, crearás una copia de dicha acción. Puedes inclusive arrastrar acciones entre diferentes listas de diferentes objetos. Cuando haces clic con el botón derecho sobre una acción, se muestra un menú desde el cual puedes eliminar la acción (también puedes hacer esto usando la tecla <Supr>), o copiar y pegar acciones. Cuando mantienes el cursor del ratón sobre una acción, se muestra una descripción más detallada sobre la misma. En el siguiente capítulo hay más información sobre las acciones.

 

Para eliminar el evento seleccionado y todas sus acciones, presiona el botón Delete. (Los eventos sin acciones son eliminados automáticamente cuando cierras la ventana por lo que no hay necesidad de que lo hagas tu mismo). Si deseas asignar las acciones a un evento diferente (porque por ejemplo, has decidido emplear una tecla diferente para las

acciones) presiona el botón Change y selecciona el nuevo evento. (¡El nuevo evento no debe haber sido empleado antes!).

 

Como se mencionó arriba, para agregar un evento, presiona el botón Add Event. Se muestra la siguiente ventana:

Aquí seleccionas el evento que deseas agregar. Algunas veces aparece un menú con opciones extra. A continuación una descripción de los eventos. (Recuerda que normalmente sólo haces uso de algunos de ellos):

 

Evento create
Este evento ocurre cuando se crea una instancia del objeto. Normalmente se usa para establecer el movimiento de la instancia y/o establecer ciertas variables de la misma.

Evento Destroy

Este evento ocurre cuando la instancia es destruida. Para ser precisos, ocurre justo antes de que sea destruida, ¡por lo que la instancia aún existe cuando el evento es ejecutado! La mayoría de las veces este evento no se usa pero puedes por ejemplo emplearlo para cambiar el marcador o para crear algún otro objeto.

Eventos alarm

Cada instancia tiene 12 relojes de alarma. Puedes configurar estos relojes usando ciertas acciones (ver el siguiente capítulo). El reloj de alarma hace una cuenta regresiva hasta que llega a 0, que es cuando se genera el evento de alarma. Para indicar las acciones para un reloj de alarma, necesitas primero seleccionarlo en el menú. Los relojes de alarma son muy útiles. Puedes usarlos para hacer que ciertas cosas sucedan de tiempo en tiempo. Por ejemplo un enemigo puede cambiar su dirección de movimiento cada 20 pasos. (En cuyo caso una de las acciones en el evento debe configurar nuevamente la alarma).

Eventos step
El evento step sucede a cada paso/frame del juego. Aquí puedes colocar acciones que requieren ejecutarse continuamente. Por ejemplo, si el objeto debe seguir a otro, puedes adaptar aquí la dirección de movimiento hacia el objeto que se está siguiendo. Sin embargo ten cuidado con este evento. No coloques muchas acciones muy complicadas en el evento step. Esto podría alentar el juego. Para ser más preciso, hay tres diferentes eventos step. Normalmente solo necesitas el evento por defecto. Pero usando el menú puedes también seleccionar el inicio y el final del evento step. El inicio del evento step es ejecutado al inicio de cada paso, antes de que ocurra cualquier otro evento. El evento step normal es ejecutado justo antes de que se coloquen las instancias en sus nuevas posiciones. El final del evento step se ejecuta al final de cada paso, justo antes de que se dibuje la escena. Este evento se usa normalmente para, por ejemplo, cambiar el sprite dependiendo de la dirección actual.

 

Eventos de colisión
En el momento en que dos instancias colisionan (esto es, que sus sprites se sobreponen) ocurre un evento de colisión. Bien, para ser precisos, ocurren dos eventos de colisión, uno por cada instancia. La instancia puede reaccionar a este evento de colisión. Para este fin, selecciona en el menú el objeto con el cual quieres definir el evento de

colisión. Después coloca las acciones. 

Hay una diferencia entre lo que sucede cuando la instancia colisiona con un objeto sólido y cuando lo hace con uno no sólido. Antes que nada, cuando no hay acciones en el evento de colisión, no sucede nada. La instancia actual simplemente continúa moviéndose; aún cuando el otro objeto sea sólido. Cuando el evento de colisión contiene

acciones sucede lo siguiente: 

    Cuando el otro objeto es sólido, la instancia se coloca de vuelta al lugar previo (antes de que ocurriera la colisión). Entonces se ejecuta el evento. Finalmente, la instancia es llevada a su nueva posición. Así que si por ejemplo, el evento invierte la dirección de movimiento, la instancia rebota contra la pared sin detenerse. Si hay una nueva colisión,

la instancia se mantiene en su lugar previo. De manera que efectivamente deje de moverse.

     Cuando el otro objeto no es sólido, la instancia no se regresa. El evento simplemente se ejecuta con la instancia en su posición actual. Tampoco se checa una nueva colisión. Si lo piensas, esto es lo que debería ocurrir lógicamente. Porque cuando el objeto no es sólido, podemos simplemente movernos sobre él, o a través de él. El evento nos notifica lo que está sucediendo.

Existen muchos usos para el evento de colisión. Las instancias pueden usarlo para rebotar contra las paredes. Puedes usarlo para destruir algún objeto cuando es tocado por una bala, etc.

 

Eventos Keyboard
Cuando el usuario presiona una tecla, ocurre un evento keyboard para todas las instancias de todos los objetos. Hay un evento diferente para cada tecla. En el menú puedes seleccionar la tecla para la que quieres definir el evento de teclado y después arrastrar las acciones. Es claro que solo unos cuantos objetos necesitan eventos para unas cuantas

teclas. Se tiene un evento en cada paso cuando el jugador presiona la tecla. Hay dos eventos de teclado especiales. Uno es el <No key>. Este evento ocurre en cada paso cuando no hay ninguna tecla presionada. El segundo se llama <Any key> y ocurre cuando se presiona cualquier tecla. A propósito, cuando el usuario presiona varias teclas, ocurren

los eventos para todas ellas. Las teclas en el teclado numérico solo producen sus eventos correspondientes cuando <BloqNum> está activada.

Eventos mouse
Un evento mouse ocurre para una instancia cuando el cursor del ratón se encuentra sobre el sprite que representa a la instancia. Dependiendo de qué botón se presione, se obtienen los eventos no button (ningún botón), left button (botón izquierdo), right button (botón derecho), o middle button (botón central).
Estos eventos son generados en cada paso mientras el jugador mantenga el botón del ratón presionado. Los eventos press se generan una sola vez cuando el botón es presionado. Los eventos release se generan una sola vez cuando se suelta el botón. Recuerda que estos eventos sólo ocurren cuando el ratón está sobre la instancia. Si el jugador presiona un botón del ratón en algún lugar donde no haya ninguna instancia, no se genera el evento. Pero en ocasiones es importante reaccionar a cualquier click del ratón. Esto puede conseguirse usando los eventos globales que aparecen en el submenú. También hay dos eventos especiales. El evnto mouse enter ocurre cuando el ratón entra sobre el sprite de la instancia. El evento mouse leave ocurre cuando el ratón deja de estar encima de la instancia. Estos eventos se usan típicamente para cambiar el sprite o para hacer sonar algún sonido. Los eventos mouse wheel up y mouse wheel down ocurren cuando se usa la rueda del ratón. Por último, hay una serie de eventos para joysticks. Puedes indicar acciones para las cuatro direcciones del joystick (en una dirección diagonal se ejecutan ambos eventos) y para 8 botones del joystick. Puedes hacer esto para dos joysticks.

 

Eventos other
Hay otros eventos que pueden ser útiles en ciertos juegos. Los encuentras en este menú.

Los eventos que puedes encontrar son:

·          Outside: Este evento ocurre cuando la instancia se encuentra completamente fuera del cuarto. Este es normalmente un buen momento para destruirla.

·          Boundary: Este evento ocurre cuando la instancia llega al borde del cuarto.

·          Game start: Este evento se genera para todas las instancias en el primer cuarto donde inicia el juego. Ocurre antes que el evento room start (ver abajo) y aún antes de los eventos create de las instancias en el cuarto. Este evento se define normalmente en un solo objeto “controlador” y se usa para reproducir alguna música de fondo y para dar valores iniciales a algunas variables, o para cargar información.

·          Game end: El evento ocurre para todas las instancias cuando termina el juego. De nuevo, es común que solo un objeto lo defina. Se emplea por ejemplo para guardar cierta información en un archivo.

·          Room start: Este evento se genera para todas las instancias (en el cuarto) cuando se inicia un cuarto. Ocurre antes que los eventos de creación.

·          Room end: Este evento se genera para todas las instancias existentes cuando finaliza el cuarto.

·          No more lives: El Game Maker tiene un sistema de vidas interno. Hay una acción para especificar y cambiar el número de vidas. En el momento que el número de vidas sea menor o igual a 0, se genera este evento. Normalmente empleado para terminar o reiniciar el juego.

·          No more health: El Game Maker tiene un sistema interno de energía. Hay una acción para especificar y cambiar el nivel de energía. En el momento que la energía sea menor o igual a 0, ocurre este evento. Normalmente se emplea para disminuir el número de vidas o para reiniciar el juego.

·          End of animation: Como se indicó antes, una animación consiste en varias imágenes que se muestran una después de otra. Después de que se muestra la última se inicia nuevamente con la primera. El evento ocurre en ese preciso momento. Esto se puede usar para por ejemplo cambiar la animación, o destruir la instancia.

·          End of path: Este evento ocurre cuando la instancia que sigue una trayectoria predeterminada (path) llega al final de la misma. Ve al Capítulo 18 para encontrar más información sobre las trayectorias.

·          User defined: Hay 16 de estos eventos. Normalmente nunca ocurren a menos que tú mismo los llames desde alguna pieza de código.

 

Evento Drawing
Las instancias, cuando son visibles, dibujan su sprite en la pantalla en cada paso. Cuando especificas acciones en el evento de dibujo, no se dibuja el sprite, sino que se ejecutan estas acciones en su lugar. Esto se puede usar para dibujar algo más que un sprite, o para primero hacer algunos cambios a los parámetros del sprite. Hay varias acciones de dibujo especialmente diseñadas para usarse en el evento drawing. Recuerda que el evento drawing se ejecuta solamente cuando el objeto es visible. También recuerda que, independientemente de lo que dibujes aquí, los eventos de colisión se basan en el sprite que está asociado a la instancia

 

Evento Key press
Este evento es similar al evento keyboard con la diferencia de que éste ocurre solo una vez cuando se presiona la tecla, y no continuamente. Este es útil cuando deseas que una acción ocurra solo una vez.

 

Key release events
Este evento es similar al evento keyboard, pero ocurre solo una vez cuando la tecla es liberada, en lugar de ocurrir continuamente.

 

En algunas situaciones es importante conocer el orden en el cual el Game Maker procesa los eventos. Como sigue.

·          Eventos Begin Step

·          Eventos Alarm

·          Eventos Keyboard, Key press, y Key release

·          Eventos Mouse

·          Eventos Step normales

·          (ahora todas las instancias son colocadas en sus nuevas posiciones)

·          Eventos Collision

·          Eventos End Step

·          Eventos Drawing

Los eventos de creación (create), destruir (destroy) y otros son generados en el momento pertinente.