Sunteți pe pagina 1din 10

Listado de eventos

aprendegamemaker.com/listado-eventos

David 5 de mayo de
2015

Hemos visto en el post anterior un poco como funcionan los eventos y como los usamos a
la hora de añadirlos a un objeto, que es la bse para programar en Game Maker Studio.
Ahora vamos a detallar cada evento, para saber cuando se desencadena y como lo
podemos utilizar.

Evento Create

Este evento ocurre cuando la instancia de un objeto se crea por primera vez en una room.
Es el primer evento que se ejecuta, por delante de otros que comentaremos después. Se
utiliza normalmente para inicializar variables, iniciar timelines, establecer paths, etc. Se
ejecutará sólo una vez por instancia.

Evento Destroy

El evento Destroy es el último que se ejecuta cuando se elimina una instancia.


Normalmente no lo usaremos mucho, pero es útil para añadir comportamiento a los
objetos. Por ejemplo, podemos definir una explosión, aumentar la puntuación por eliminar
un enemigo, efectos de partículas o ejecutar algún sonido. Un apunte rápido y muy
importante a tener en cuenta: cuando cambiamos de una room a otra, las instancias son
eliminadas, a no ser que el objeto tenga la propiedad Persistent activada. El evento no se
activa en este caso, solo se activa cuando le decimos expresamente que se elimine. Por
ejemplo, si tenemos un enemigo que sume 5 puntos cuando lo matamos, definido en su
evento Destroy, al salir de la room, si hay enemigos pendientes, no sumará esos puntos.

Eventos de alarma

Cuando queremos añadir un evento de alarma, nos aparecerá un listado que irá desde la
Alarma 0 hasta la Alarma 11. Significa que podemos añadir 12 tipos de alarmas diferentes.
Una alarma sólo se ejecuta cuando se ha llamado previamente mediante una acción.
Ponemos una acción relacionada con la Alarma 0, por ejemplo, y le ponemos un tiempo
para que se lance (el tiempo se mide en steps). Lo habitual es configurar los pasos/steps a
30 en la room, así que si ponemos una alarma con valor 30, al cabo de un segundo se
ejecutaría el evento correspondiente. Un ejemplo sería crear un enemigo que cada 5
segundos cambie de dirección. Cuando creamos el enemigo, evento Create, añadimos una
1/10
acción de alarma. Podemos poner como dato el número de steps multiplicado por 5. Luego
añadimos el evento Alarm 0 y ahí le decimos que cambie de dirección. En el mismo evento
deberíamos de volver a llamar a la acción si queremos que eso se repita siempre.

Evento Step

La unidad de tiempo usada en Game Maker Studio son los steps o pasos por segundo. En
cada paso se comprueban todos los eventos y se activan los que sean necesarios mientras
se ejecuta el juego. Así que en este evento podemos comprobar y ejecutar acciones en cada
paso. Un evento Step en realidad contiene tres sub-eventos, Step, Begin Step y End Step.
Para la gran mayoría de las cosas el evento Step es más que suficiente para poder usarlo,
pero a veces queremos controlar el código que se ejecuta y en qué momento. Para ello
tenemos los eventos de inicio y fin de step, para comprobar en cada paso todas las
opciones en orden. El evento Step se utiliza para comprobar cosas continuamente. Por
ejemplo, si queremos comprobar que estamos a una distancia de un enemigo, lo podemos
comprobar en este evento. Hay que vigilar de no hacer cosas muy complicadas en este
evento, ya que si tenemos muchas instancias podemos hacer relantizar nuestro juego.
¡Usadlo con precaución!

Evento Colisión

Cuando no tenemos activada la opción de Physics, podemos calcular las colisiones basadas
en las máscaras de los objetos. Puede ser la máscara del sprite que tenga en ese momento
o la máscara que definimos en el propio objeto. En el momento que se superpongan estas
máscaras se lanza el evento. Si uno de los objetos no tiene máscara definida (podemos
tener un sprite sin máscara), aunque tenga un sprite que dibuje no habrá colisiones
detectadas. Si el objeto que choca con el otro es Sólido, antes de ejecutar el evento de
colisión, muy importante, la instancia se coloca a la posición previa que se ha registrado la
colisión, pero sólo si hay un evento de colisión creado. Si tenemos un objeto obj_player1
con un evento de colisión con el objeto obj_player2 , si en obj_player2 también tenemos
este evento, ejecutará los dos eventos. No sabremos nunca en qué orden ejecutará uno o el
otro. Hay que tener especial cuidado con los objetos heredados. Imaginemos que tenemos
los objetos obj_child1 y obj_child2 , que heredan de obj_parent . Quizás nos interese crear
un evento colisión en obj_parent sobre el mismo obj_parent , para que afecte a los dos
objetos hijos que hemos comentado. ¡Cuidado con las acciones que hagamos que se
ejecutarán en los dos hijos!

Eventos de teclado

2/10
Cuando creamos un juego, tenemos muchas maneras para que el jugador interaccione con
él, desde el ratón, el gamepad, el teclado. Para controlar todas las opciones del teclado,
Game Maker proporciona una lista muy grande de subeventos que se puede utilizar para
los tres eventos principales. Hablaremos de los tres eventos porque será indistinto utilizar
una tecla u otra.

Evento Keyboard Pressed: este evento se activa cada vez que se presiona una

tecla.
Evento Keyboard: este evento se lanza continuamente, en cada step o paso,

mientras la tecla se mantiene pulsada.


Evento Keyboard Released: se activa una vez se ha liberado o dejado de

presionar una tecla.

Como vemos, conocer estos tres eventos es muy importante ya que hacen cosas diferentes,
y podemos controlar nuestro juego de una manera más eficiente. También tenemos que
tener en cuenta que los eventos de teclado se activarían en todas las instancias activas de la
room dónde hayamos definido este evento, y responderán cada una a las acciones que
hayamos programado. Por ejemplo, si tenemos la tecla <A> para mover al personaje y otro
evento con la misma tecla para que un enemigo dispare, hará las dos cosas a la vez.

La lista de subeventos que aparece es enorme, tal y como hemos comentado, y distingue
todas las opciones del teclado que tenemos. También distingue el teclado numérico
(tenemos que tener activo mediante <Bloq num>), el que tenemos a la derecha, con los
números que tenemos por encima de las letras.Podemos seleccionar también teclas
especiales, como las superiores de funciones (<F1>, <F2>, <F3>…) como las teclas de
retroceso, inicio, fin, eliminar, insertar, etc.

Como apunte último, también nos permite seleccionar dos subeventos especiales, ninguna
tecla y cualquier tecla. Con la primera opción, podemos detectar que no hay interacción
con el usuario, así que puede ser útil para que el personaje, si tiene una velocidad asignada,
deje de moverse. Con la opción cualquier tecla podemos detectar cualquier opción del
teclado sin importar cuál pulse.

Para adaptar a dispositivos móviles, Game Maker Studio nos permite aprovechar todos los
eventos de teclado que hemos definido y que funcione con un área de la pantalla. De esta
manera sencilla podemos crear un “touch-pad” para nuestra tablet o móvil.

Eventos de ratón

3/10
Al igual que los eventos de teclado, los eventos de ratón contiene una serie de subeventos
para especificar que está sucediendo durante el juego. Al igual que cuando pulsamos
cualquier tecla del teclado, con el ratón podemos detectar cuando pulsamos el botón
izquierdo, el botón central y el botón derecho. Una diferencia importante respecto a los
eventos de teclado que hemos comentado es que se ejecuta en todas las instancias donde
hemos asignado acciones al evento, pero en los eventos de ratón actúa en la máscara que
tiene el objeto (recordemos que la máscara puede ser muy diferente al sprite). ¡Así que para
que funcione el objeto tiene que tener máscara!

Para el evento Left pressed, Right pressed o Middle pressed, se detecta una sola vez que se
pulsa el botón indicado. Para el evento Left released, Right released o Middle released, se
activa una vez cuando se ha dejado de pulsar el botón. El evento Left button, Right button o
Middle button se activa en cada step o paso mientras se mantenga pulsado cada uno de los
botones. Como hemos visto hasta ahora, es igual que con el teclado.

Tenemos otros eventos relacionados con el ratón, que son Mouse enter y Mouse leave.
Estos no están relacionados con los botones del ratón, sino con su posición. Cuando el
juego detecta que el puntero del ratón entra en contacto con la máscara del objeto, se
activa el evento Mouse enter, y cuando el puntero del ratón sale de la máscara del objeto, se
activa el evento Mouse leave. Estos dos eventos se activan SOLO UNA VEZ. Por ejemplo, se
podrían usar para cambiar el puntero del ratón para según que objetos de inventario,
botones, enemigos, etc.

Para finalizar, también tenemos el evento Global mouse, que agrupa otros sub eventos de
los botones del ratón. Con los eventos globales del ratón, podemos detectar cuando se ha
pulsado un botón en casos que el ratón no esté encima de un objeto, o incluso en ningún
objeto. Simplemente detecta los botones, independientemente de la posición del ratón. Por
ejemplo, si tenemos algún objeto con el evento Left pressed y Global left pressed
configurado, generará los dos eventos cuando hagamos click sobre él. Si se hace click fuera
del objeto, generará el evento global.

En dispositivos móviles, al no existir el ratón, Game Maker usa sus eventos para detectar
cuando un usuario ha pulsado la pantalla (lo que se conoce como un finger tab, tap o
touch). Si pulsamos una vez la pantalla, se generaría el evento Mouse Left, si pulsamos dos
veces seguidas, se ejecutaría el evento Mouse Right. Para usar el multitouch o detectar que
hay varios dedos pulsados en la pantalla (los típicos efectos de deslizar o desplazar, ampliar
o hacer zoom, etc) ya se utiliza funciones de programación.

Otros eventos

4/10
Tenemos unos eventos especiales que los han metido en este saco, ya que son tan dispares
y hacen tantas cosas diferentes que no los han podido clasificar de otro modo. Vamos a
detallarlos a continuación.

Salir de la room o outside room. Este evento se activa cuando un objeto sale de la
habitación o room. No estamos hablando de su posición X/Y, estamos hablando
cuando el sprite entero (la máscara) ha salido de la room. Si el objeto no tiene sprite,
entonces la referencia sí que es su posición X/Y. Como vemos, los objetos que no
vemos porque están fuera de la room existen, así que podemos crear un objeto fuera
para que no se vea, incluso pintarlo en el Ventana de propiedades de la room.
Este evento lo usamos principalmente para eliminar objetos que ya no nos interese
que aparezca. Por ejemplo, si al disparar creamos un objeto bala y sale fuera de la
room, podemos destruir el objeto con este evento, ya que hemos visto que no se
elimina automáticamente, y acabaríamos con millones de estos objetos moviéndose al
infinito. Este evento se ejecuta una única vez.
Intersección de límites o Intersect Boundary. Que no asuste el nombre que le han
puesto. Es muy parecido al anterior, pero en vez de detectar cuando sale de la
habitación, detecta cuando toca justo en el límite de la room. Tiene las mismas
características que el evento anterior, se detecta mediante sprite o con su posición si
no lo tiene. Se puede utilizar, por ejemplo, si tenemos un objeto que es una pelota y
queremos que rebote en los límites de la room, sin necesidad de crear objetos y
generar el evento de colisión.
Vistas o views. Cuando hablemos como se define la room, hablaremos en detalle
sobre las vistas y su configuración. Ahora comentaremos que las vistas se utilizan para
ver solo una pequeña área de toda la room, como podemos comprobar en juegos
RPG o plataformas. Podemos configurar hasta 8 vistas en una misma room. Si
seleccionamos esta opción aparecen varios subeventos, pero se pueden clasificar en
dos categorías: los objetos que salen de nuestro vista y los objetos que tocan o llegan
al límite de la vista. Las características son muy parecidas a los eventos comentados
antes.
Inicio del juego o Game Start. Este evento se activa una sola vez en todo el juego.
Además, las instancias de estos objetos se tienen que colocar en la primera room de
todas desde el editor de rooms, no funcionaría si creamos el objeto una vez iniciado el
juego. Más abajo hablamos del orden de los eventos, pero ahora destacamos que el
evento Room Start se ejecuta después del evento Create, así que si creamos variables
en el evento Create las podríamos utilizar en este evento.
No es habitual usar este evento en varios objetos, aunque se puede hacer. Se suele
crear un objeto controlador para que haga cosas genéricas, y este evento es útil para
crear variables globales, ejecutar un sonido de fondo, leer ficheros de configuración
iniciales. En resumen, todo lo que creamos necesario configurar nada más arrancar
nuestro juego.
Final del juego o End Game. Al igual que el evento anterior, este evento se ejecuta
5/10
una única vez cuando finaliza tu juego o se cierra la ventana. Este evento no se ejecuta
en todas las exportaciones que ofrece Game Maker. Por ejemplo, en iOS los juegos
nunca se cierran, se quedan “pausados”. En navegadores funcionaría cuando
cerramos la pestaña donde está ejecutándose el juego, pero es recomendable probar
todas las opciones para comprobar que lo hace correctamente. Se suele utilizar para
grabar datos o configuraciones en ficheros.
Inicio de room o Room Start. Este evento se ejecuta para todas las instancias que se
encuentran al principio en la room. Al ser el evento Create el primero que se ejecuta,
también podemos utilizar variables previamente creadas.
Fin de room o Room End. Ocurre cuando una room termina, por ejemplo porque se
cambia a otra room. Se suele utilizar para destruir objetos o casos especiales como
listas o partículas, para que no ocupen memoria.
No hay más vidas o No More Health. Game Maker utiliza un sistema de vidas que ya
viene en la aplicación, que podemos utilizar o no, que usaríamos con la palabra Lives.
Aunque no entendamos aún el uso de variables, nos adelantamos diciendo que es
una variable global que se crea al comienzo del juego. Podemos dar valor, sumar o
restar el valor de Lives/vidas, así que podemos manipularlas como creamos oportuno.
El evento se activa cuando el número de vidas es inferior o igual a 0. Lo podemos
utilizar para ejecutar de alguna manera un Game Over, por ejemplo con un mensaje o
reiniciando la room actual.
No tienes más energía o No More Health. Se puede llamar energía, salud o Health,
que funciona igual que la variable de Lives. Es una variable global llamada Health y
podemos también usarla como queramos, para dibujar una barra de energía, utlizarlo
para combinarlo con las vidas, etc. El evento se ejecuta cuando su valor es más
pequeño o igual que 0. Por ejemplo, podemos usar la energía y cuando llegue a 0,
restarle una vida. Existen acciones propias para poder dibujar tanto la energía como
las vidas que ya vienen integradas en el programa.
Fin de animación o Animation end. Hemos aprendido en posts anteriores que los
sprites pueden contener una o varias subimágenes. Si tiene más de una imagen,
generará una animación infinita a la velocidad que digamos(a no ser que la
controlemos programando). Cada subimagen tiene un valor numérico, que empieza
con su valor 0, y podemos controlar mediante las diferentes acciones o variables. Pero
muchas veces solo nos interesa saber que la animación ha terminado, es decir, que ha
llegado a su última subimagen. Esto lo podemos saber gracias a este evento. Un
ejemplo sería si creamos un objeto que es una explosión. Como no queremos que se
repita la animación siempre, podemos hacer que cuando llegue al final desaparezca.
Actualización de animación o Animation Update. Este evento solo se ejecuta en
sprites que son de tipo esqueleto, y se usa funciones específicas para ello. En un sprite
que usa ficheros de imagen sabemos su animación por cada subimagen, pero en un
sprite hecho con spine sólo tenemos la secuencia que hace. Este evento ayuda a saber
la orientación del esqueleto para añadir código o acciones que nos pueda interesar.

6/10
Fin de ruta o End of Path. Ya hablaremos de rutas o paths más adelante. Os adelanto
que una ruta la definimos y pintamos para un objeto. Esta ruta tiene un inicio y un fin,
y con este evento podemos detectar que el objeto asociado ha finalizado todo el
camino.
Definidos por el usuario o User Defined. Es posible que queramos definir un evento
propio, para separar las acciones o el código de otras opciones del objeto. Al ser un
evento especial, no puede ser lanzado por el propio programa, así que eres tú el que
lanzas este evento cuando lo llamas. Es muy parecido a como usamos el evento de
Alarma cuando lo queremos lanzar para el siguiente step o paso, la diferencia es que
aquí lo llamas al momento y volverías a la siguiente línea de código. Se utiliza cuando
en diferentes partes del objeto y en eventos muy diferentes queremos que siempre se
hagan las mismas acciones, y no queremos ponerlo como un Script genérico.

Evento de Dibujo

Este evento es el que manda con todo lo que se ve en pantalla cuando se ejecuta el juego, y
se divide en varios subeventos separados en las siguientes categorías:

El evento Draw estándar se divide en tres tipos:el evento Draw Begin, el evento Draw
y el evento Draw End, por ese orden. Lo más habitual es usar el evento Draw, para
poder pintar el sprite del objeto, pintar texto como puede ser la puntuación, barras de
energía, vidas, etc. Recordemos que el evento Draw se ejecuta en cada Step o paso
del juego, o sea, se ejecutará muchas veces cada segundo, así que no debemos poner
acciones o códigos que pueda relantizar nuestro juego, al igual que si ponemos
muchas instancias en la room. El evento siempre se ejecutará mientras la propiedad
visible sea true , es decir, aunque no pongamos ninguna acción lo ejecutará para
poder pintar su sprite por defecto. Si añadimos código, entonces estamos controlando
lo que queremos pintar, por lo tanto el sprite por defecto no se pintará a no ser que lo
pongamos expresamente.
Los eventos Draw Begin y Draw End funcionan de una manera muy parecida a los
eventos Begin Step y Begin End. Si queremos preparar algunas acciones antes de
dibujar, como cambiar algunos valores, se puede hacer con Draw Begin, y si queremos
tratar algo después de dibujar, podemos usar Draw End.
Los eventos de Draw GUI están pensados para que no afecte al escalado y a la vista o
view utilizada en ese momento. Por ejemplo, si queremos dibujar un cronómetro con
el evento Draw, y nuestro juego utiliza las vistas, no podemos colocarlo situandolo en
la X/Y de la room, sino que se debería hacer con la vista para que siempre sea visible.
Pero si utilizamos Draw GUI podemos colocarlo en la posición de pantalla que
queramos independientemente de cómo sea nuestro juego: si tiene vistas o no, si lo
escalamos, etc. También tenemos los eventos Draw GUI Begin y Draw GUI End parap
oder usarlos tal y como hemos comentado.
7/10
¿Entonces qué hacen los eventos Pre Draw y Post Draw? ¿No existen los eventos de
Draw Begin y Draw End? Pues parece que se suele utilizar cuando tenemos varias
vistas. Pongamos un ejemplo: el típico juego de carreras cuando juegas con dos
jugadores, cada uno con su mitad de pantalla. Eso se puede controlar fácilmente con
vistas/views. Si tenemos un objeto obj_coche para cada vista, el evento Draw se
ejecutaría en cada vista por separado. Es decir, si el evento Draw se ejecuta en cada
paso, al tener dos vistas se ejecutaría dos veces por cada paso. Imaginemos que
tenemos código en el evento Draw Begin, para preparar unos datos antes de Draw.
Pasaría lo mismo, se ejecutaría dos veces, una por cada vista. Con los eventos Pre
Draw y Post Draw se ejecutaría solo una vez por cada paso, ya que se ejecutan antes
de que Game Maker prepare todo el canal o búfer necesario para pintar los objetos,
así que podrías plantear dónde poner mejor el código, si en un evento u otro. Como
véis, el programa nos da muchas posibilidades para optimizar nuestro juego, y está
claro que todo lo relacionado con dibujar en la pantalla es muy importante si no
queremos tener problemas de rendimiento.
El evento Resize se ejecuta solo en Windows 8 y se activa cuando detecta un cambio
en el tamaño de la ventana. Aunque está en la categoría de los eventos Draw, aquí no
se puede dibujar nada, solo sirve para comprobar el cambio del tamaño y hacer las
acciones oportunas. De esta manera evitamos tener que comprobarlo en el evento
Step (eso significa que en otros dispositivos si que habría que poner el código en ese
evento).

Evento Asíncronos

Los eventos asíncronos son especiales porque no los desencadena Game Maker Studio,
sino al final de una acción externa relacionada, como puede ser la carga de un archivo, la
respuesta de un servidor web o cuando tratamos con paquetes dentro de una red.
Básicamente, cuando lanzamos una orden o acción, como puede ser la carga de una
imagen, empezará a hacerlo en paralelo y el juego también seguirá su curso. Cuando la
solicitud se ha completado, enviará un aviso a Game Maker y saltará los eventos asíncronos
que se han definido para este tipo de llamada. Si tenemos el mismo evento asíncrono en
varios objetos, se dispararan en todas las instancias que se ha definido. La mayoría de estos
eventos están relacionados con los navegadores y juegos que hagamos en formato web.
Ahora los citaremos y más adelante ya entraremos en detalle con cada uno de ellos. Estos
subeventos son:

Imagen cargada o Image Loaded


Evento HTTP o HTTP Event
Eventos de diálogo o Dialogs Event
Eventos IAP (In App Purchases)
Eventos de la nube o Cloud Event
8/10
Eventos de red o Networking Event
Eventos de Steam
Evento de notificación o Push Notification Event
Eventos de Cargar/salvar Load/Save Event
Evento de grabación de audio o Audio Recording Event
Evento de reproducción de audio o Audio Playback Notification Event
Eventos del sistema (detectar dispositivos, por ejemplo) o System Event

Otros eventos fuera de los objetos


Hemos dicho que los eventos están asociados a los objetos, y damos a entender que solo
podemos programar en los objetos. Existen un par de sitios más dónde podríamos asociar
acciones o, mejor dicho, programar acciones mediante código GML.

Al crear una habitación o room. Dentro de la ventana de propiedades de la room,


existe un botón llamado Creation Code, dónde podemos programar acciones cuando
se inicia una room.
Cuando añadimos una instancia de esa room. Si le damos al botón derecho sobre
la instancia, una de las opciones es Creation code. También podremos programar
acciones SOLO para esa instancia, y así no afectaría a todos los objetos.

Entonces, ¿que se ejecutaría antes? ¿El evento Create del objeto, el que hemos añadido en
la room, o el que hemos añadido en la instancia en particular?

Vamos a ver el orden de todos los eventos, ya que hay varios eventos implicados, sobretodo
cuando iniciamos una room o el juego, y tenemos que tener claro ese orden para no tener
sorpresas.

Orden de los eventos


El orden de los eventos no es exacto, ya que dependerá de muchas situaciones que pueden
ocurrir en nuestro juego. Por ejemplo, si tenemos dos objetos que colisionan y tenemos
también otros dos objetos que colisionan, no podemos tener claro cual ejecutará antes.
Pero si que hay una serie de eventos que mantienen un orden al ejecutarse. Estos eventos
son_

Evento Create de cada instancia. Nos referimos al que programamod en nuestr


aventana de propiedades del objeto.
Creation Code de cada instancia. La que definimos en cada instancia de la room.
Evento Game Start. Este evento solo ocurre en la primer room del juego.
Creation Code de la room. El que hemos definido en la ventana de propiedades de la
room.
Evento Room Start de todas las instancias.
9/10
Imaginemos que un objeto tiene el evento Create o el evento Room Start. Si tenemos
varias instancias en una misma room, ¿cuál de ellas se ejecutará antes? Dentro de las
opciones de la room, podemos definir el orden de las instancias, de esta manera podemos
definir como se ejecutarán sus eventos.

También tenemos eventos específicos que siguen un orden establecido. Si queremos


programar algo en cada paso (step) de la velocidad de la habitación, tenemos:

Evento Begin Step: se ejecuta justo antes del step.


Evento Step: este evento se ejecuta justo antes que las instancias se muevan a su
nueva posición.
Evento End Step: se ejecuta al finalizar el step.

Como hemos visto, también tenemos varios eventos para dibujar , siguiendo este orden:

Evento Pre Draw.


Evento Draw Begin.
Evento Draw.
Evento Draw End.
Evento Draw GUI Begin.
Evento Draw GUI.
Evento Draw GUI End.

10/10

S-ar putea să vă placă și