Prototipo de ayuda
Componente Diseñado por
Crea-Flash.com.
Derechos reservados
Game Maker usa lo que es llamado un mecanismo manejado por eventos <an event driven aproach>

Eventos

Game Maker usa lo que es llamado un mecanismo manejado por eventos <an event driven aproach>. Esto funciona así. En cualquier momento que algo suceda en el juego las instancias de los objetos obtienen eventos (una especie de mensajes diciéndoles que algo ha ocurrido). Las instancias pueden entonces reaccionar a estos mensajes ejecutando ciertas acciones.  Para cada objeto, se debe indicar a cuales eventos este debe responder y que acciones debe ejecutar cuando el evento ocurra. Esto puede sonar complicado pero en realidad es bastante simple. Primero que nada, para la mayoría de eventos los objetos no tienen que hacer nada. Para los eventos donde algo debe ser hecho puedes usar un simplísimo sistema de Arrastrar-y-colocar para indicar las acciones.

 

En el centro de la ventana de propiedades del objeto esta un listado de eventos a los cuales el objeto debe reaccionar. Al inicio esta vacía. Puedes agregarle eventos a la lista presionando el botón 'Add Event' (Agregar evento). Aparecerá un formulario con todos los tipos de eventos definibles. Seleccionas el evento que quieres agregar. En algunos casos aparecerá un menú con opciones extra. Por ejemplo, para el evento 'Keyboard' (Teclado) debes seleccionar una tecla de entre el menú de opciones. Abajo encontraras una lista completa de todos los eventos más sus descripciones. Al seleccionar uno de los eventos de la lista de eventos del objeto, este será el evento en edición. Para editar otro evento simplemente dale clic. A la derecha están todas las acciones representadas por pequeños iconos. Ellas están agrupadas en algunas páginas. En el próximo capitulo encontraras las descripciones de cada acción y lo que ellas hacen. En el formulario, entre los eventos y las paginas de acciones esta una lista de acciones, que deben ser ejecutadas por el evento seleccionado. Para añadir acciones al evento seleccionado, se arrastran con el Mouse desde las páginas de acciones a la lista de acciones del evento. Estas se ubicaran una bajo la otra con una corta descripción. Por cada acción que coloques, se te pedirá que proveas algunos parámetros. Estos están descritos en el próximo capitulo. Después de agregar algunas acciones la ventana lucirá más o menos así:

 

 

Ahora puedes empezar a agregar acciones a otros eventos. Selecciona el evento que quieres dándole clic, y arrastra las acciones necesarias a la lista de acciones del evento.

 

Puedes cambiar el orden de las acciones en la lista simplemente arrastrándolas y colocándolas en la lista.  Si presionas la tecla <Alt> mientras arrastras, harás una copia de la acción seleccionada. Puedes además arrastrar acciones de la lista de un objeto hacia la lista de acciones otro objeto. Si presionas Clic derecho sobre una acción, aparecerá un menú en donde puedes borrar la acción (puedes hacerlo también presionando la tecla <Delete> en el teclado) o copiar y pegar acciones (Puedes seleccionar múltiples acciones para cortar, copiar o borrar las teclas <Shift> o <Control>. Puedes seleccionar todas las acciones de un evento presionando <Control + A>). Si dejas el puntero del Mouse sobre una acción, una descripción mas detallada aparecerá acerca de la acción. Mira el próximo capitulo para más información sobre las acciones.

 

Para borrar el evento seleccionado junto a todas sus acciones, presiona el botón 'Delete'.  (Los eventos sin ninguna acción son automáticamente borrados cuando cierres la ventana, así que no hay necesidad de borrarlos manualmente) Si quieres asignar estas acciones a un evento diferente (Por ejemplo, si decidiste usar una tecla diferente para algo) presiona el botón 'Change' (Cambiar) y selecciona el nuevo evento que quieres (¡Este no debería estar definido ya!). Usando el menú que aparece al dar Clic derecho en la lista de eventos, puedes además duplicar un evento, esto es, agregar un nuevo evento con las mismas acciones del evento seleccionado.

 

Como esta indicado arriba, para agregar un evento presiona el botón 'Add Evento' (Agregar Evento) y este formulario se mostrara:

 

 

 

Seleccionas el evento que quieres agregar. Algunas veces un menú aparecerá con opciones extra.

 

Aquí esta la descripción de cada evento (Recuerda que normalmente solo usaras unos pocos de ellos)

 

 

'Create event' (Evento Creación)

Este sucede cuando una instancia del objeto es creada. Es normalmente usado para darle movimiento a la instancia y/o establecer ciertas variables de la instancia.

 

'Destroy event' (Evento Destrucción)

Este evento sucede cuando la instancia es destruida. Para ser preciso, sucede justo antes de que la instancia se destruya, ¡así que la instancia aun existe cuando el evento es ejecutado! (y aun tiene todas sus propiedades) La mayoría de las veces este evento no es usado, pero puedes por ejemplo usarlo para para cambiar la puntuación del juego, o crear algún otro objeto.

 

 

'Alarm events' (Eventos de Alarmas)

Cada instancia tiene hasta 12 'Relojes de Alarma'. Puedes iniciar estos relojes usando ciertas acciones (detalladas en el siguiente capitulo). El reloj de alarma entonces cuenta hacia abajo hasta llegar a 0, en ese momento el evento de alarma indicado es generado. Para indicar las acciones para uno de los relojes de alarma, primero debes seleccionarlo del menú (uno de los  8 relojes disponibles).  Los relojes de Alarma son muy útiles. Puedes usarlo para hacer que ciertas cosas sucedan cada cierto tiempo. Por ejemplo un mounstro puede cambiar la dirección en la que camina cada 20 pasos o steeps -pasos del juego- (En este caso alguna de las acciones en el evento de alarma debería reestablecer el tiempo de la alarma de nuevo, ya que las alarmas solo se ejecutan una única vez y luego se desactivan automáticamente)

 

'Step events' (Eventos de 'Paso' del juego)

Los eventos 'step' ocurren cada 'step' o paso del juego. Aquí puedes poner acciones que necesites se ejecuten continuamente. Por ejemplo si un objeto debe seguir a otro, aquí puedes ajustar la dirección de movimiento hacia el objeto que se esta siguiendo. Debes ser un poco cuidadoso con este evento. No pongas muchas acciones complicadas en el evento step de objetos de los cuales habrán muchas instancias (por ejemplo en un enemigo común y corriente). Esto puede reducir la velocidad del juego.

Para ser mas preciso, hay tres tipos diferentes de eventos 'step'. Normalmente solo necesitaras el evento por defecto, pero usando el menú, puedes además seleccionar los eventos 'Begin Step' (Inicio de paso)  y 'End Step' (Final de Paso). El evento 'Begin Step' se  ejecuta al inicio de cada step del juego, justo antes de que cualquier otro evento se ejecute. El evento 'Step' normal, es ejecutado antes que las instancias sean colocada en sus nuevas posiciones (si se estan moviendo por ejemplo). El evento 'End Step' es ejecutado al final de cada step en el juego, justo antes de dibujar la pantalla. Este es típicamente usado para cambiar el sprite dependiendo de la dirección de movimiento.

 

 

'Collision events' (Eventos de Colision)

Cuando sea que dos instancias colisionen (Esto es, que sus sprites se superposiciones) un evento de colisión es generado. Para ser preciso, dos eventos de colisión se generan; uno por cada instancia. La instancia puede reaccionar ante algún evento de colisión (Por ejemplo si una bala golpea al personaje). Para este fin, del menú selecciona al objeto con el cual quieres definir el evento de Colisión y luego define las acciones.

 

Hay una diferencia en que pasa si la instancia colisiona con un objeto sólido o uno no-Sólido. Primero que nada, si no hay acciones en el evento colisión (o si siquiera has definido el evento colisión entre dos objetos), nada sucede. Las instancias simplemente siguen moviéndose; aun si el otro objeto era sólido. Cundo el evento colisión contiene acciones esto es lo que pasa:

 

Si el otro objeto es sólido, la instancia es colocada en su ultima posición conocida (donde estaba antes que la colisión ocurriera si se estaba moviendo) entonces el evento es ejecutado. Finalmente la instancia es movida a su nueva posición. Así que si el evento por ejemplo provoca que la dirección del movimiento se revierta,  la instancia rebota contra la pared sin detenerse. Si después de eso aun hay una colisión, la instancia se mantiene es su posición previa. Así que efectivamente dejad e moverse.

 

Cuando el otro objeto es No-Sólido, la instancia no es puesta en su posición anterior. El evento simplemente se ejecuta con la instancia en su posición actual. Así que no hay un segundo chequeo de colisión. Si piensas en esto, esto es lógicamente lo que debería suceder. Ya que el objeto no es sólido, podemos simplemente movernos sobre el (a través de el). El evento simplemente nos notifica que esto esta ocurriendo.

 

Hay muchos usos para los eventos de colisión. Las instancias lo pueden usar para rebotar contra las paredes. Puedes usarlo para destruir instancias cuando por ejemplo estas sean golpeadas por una bala.

 

 

 

 

'Keyboard events' (Eventos del Teclado)

Cuando el jugador presiona una tecla, un evento de teclado se ejecuta para todas las instancias de todos los objetos. Hay un evento diferente por cada tecla. En el menú (al agregar el evento) selecciona la tecla para la cual quieres definir el evento de teclado y luego arrastra las acciones para ese evento. Claramente solo unos cuantos objetos necesitan eventos para unas cuantas teclas. Puedes tener un evento en cada step mientras el jugador mantenga una tecla presionada. Hay dos eventos especiales del teclado. El primero es llamado <No Key> (<Ninguna tecla>). Este ocurre en cada step cuando ninguna tecla esta siendo presionada. Es segundo se llama <Any key> (<Cualquier tecla>) y ocurre en cualquier momento que cualquier tecla este siendo presionada (sin especificar cual). Si el jugador presiona múltiples teclas a la vez, los eventos de cada tecla presionada se ejecutan. Debes notar que las teclas del teclado numérico solo producen sus correspondientes eventos cuando <NumLock> (Bloqueo numérico)  esta activado.

 

'Mouse events' (Eventos del Mouse)

Un evento del mouse ocurre para una instancia cuando el cursor del mouse esta dentro del sprite que representa a la instancia. Dependiendo del boton del mouse que este presionado puedes obtener 'No Button'<Ningún Botón>, left Button (botón izquierdo), 'right Button' (Botón derecho)  o 'Middle Button' (Botón central del mouse, si tiene 'mouse wheel' es al presionar la rueda como si un botón fuera). Los eventos de botón simple del mouse (left Button, right Button y middle Button) son generados en cada step mientras el jugador mantenga el botón del Mouse presionado.  Los eventos 'pressed' (presionado) son solo generados una única vez cuando el botón es presionado. Los eventos 'release' (soltar botón) son generados una unica vez justo cuando el boton del mouse es soltado. Nota que estos eventos solo ocurren si el cursor del mouse esta sobre la instancia. Si quieres poder reaccionar a los eventos del mouse (normal, pressed y release) pero en un lugar cualquiera de la pantalla (no necesariamente sobre una instancia) usa los eventos globales del mouse que están en un submenú (global mouse).

Hay dos eventos especiales del mouse. el evento 'Mouse Enter' se ejecuta cuando el puntero del mouse entra en la instancia (justo cuando se pone sobre el sprite). El contrario el evento 'Mouse Leave' sucede cuando el mouse se quita de sobre una instancia ('sale' de la instancia) Estos eventos son típicamente usados para cambiar el sprite o ejecutar algún sonido (Por ejemplo podrías en un menú tener un botón, al ponerse el mouse sobre el botón, el botón se ilumina -Cambia su sprite- y se escucha un sonido -Evento 'mouse enter'-, luego en el evento 'mouse leave' reestableces el grafico del botón por su sprite original, haciendo así un botón 'roll-over').

Finalmente hay algunos eventos relacionados con el joystick (control de juegos). Puedes definir eventos para las cuatro direcciones principales en el joystick (para direcciones diagonales, los dos eventos son ejecutados). Además puedes definir eventos para hasta 8 botones del joystick. Puedes definir esto para el joystick primario y secundario (Game Maker soporta hasta dos joystics simultáneos)

 

 

'Other events' (Otros eventos)

Hay algunos eventos extra que pueden ser útiles en algunos juegos y están es este menú. Los eventos que puedes encontrar son:

 

'Outside' (Afuera): Este evento ocurre cuando la instancia sale completamente del room (del room, no de la pantalla)  Típicamente es un buen momento para destruirla.

 

'Boundary' (Al limite o Frontera): Este evento ocurre cuando la instancia (su sprite) intercepta el limite del room (pero aun esta parte de el dentro del room)

 

'Game start' (Inicio del juego): Este evento solo se ejecuta en el primero room cuando el juego inicia. Se ejecuta después del evento 'room start' (mira el siguiente evento)  pero antes del evento 'creation' de las instancias en el room. Este evento es típicamente definido solo en un objeto 'Controlador' y es usado por ejemplo para iniciar alguna música de fondo,  inicializar algunas variables o cargar alguna información (de un archivo).

 

'Game end' (Fin del juego): Ese evento se ejecuta para todas las instancias cuando el juego termina (te sales del juego). De nuevo, típicamente se define este evento es un único objeto y es usado por ejemplo para guardar alguna información en un archivo.

 

'Room start' (Inicio de Room)

Este evento se ejecuta para todas las instancias que inicialmente este en un room cuando este room se inicia. Sucede después de los eventos 'Creation' de las instancias.

 

'Room end' (Fin del Room)

Este evento se ejecuta para todas las instancias existentes cuando el room termina.

 

'No more lives'(No mas vidas)

Game Maker posee un sistema predefinido de 'vidas'. Hay una acción para establecer y cambiar el número de vidas. Cuando sea que el número de vidas sea menor o igual a cero, este evento es generado. Es típicamente usado para terminar o reiniciar el juego.

 

'No more health' (No msa salud/energia)

Game Maker posee un sistema predefinido de salud. Hay una acción para establecer y cambiar la salud. Cuando sea que la salud sea menor o igual a cero, este evento es generado. Es típicamente usado para reducir el numero de vidas o para reiniciar el juego.

'End of animation' (Fin de la animación)

Como fue indicado antes, una animación (sprite animado) consiste en cierto número de imágenes que son mostradas una tras la otra. Luego de que la última subimagen es mostrada la animación se reinicia desde la primera imagen. Este evento se genera en ese preciso momento (antes de cambiar la última imagen por la primera). Por ejemplo esto puede ser usado para cambiar la animación o destruir la instancia.

 

'End of path' (Final del 'path' o ruta)

Este evento se genera cuando la instancia esta siguiendo (usando) un path y el final del path es alcanzado.

 

'User defined' (Eventos definidos por el usuario)

Hay disponibles ocho de estos eventos. Estos normalmente no son generados nunca, a menos que tu mismo los ejecutes desde un bloque de código GML.

'Drawing event' (Evento de dibujado)

Las instancias cuando son visibles, dibujan (Automáticamente) su sprite en cada step en la pantalla. Cuando especificas acciones en el evento 'Drawing' el sprite no es dibujado, pero estas acciones son ejecutadas en su lugar. Esto puede ser usado para dibujar algo más que el sprite o para antes de dibujar hacer algunos cambios a los parámetros del sprite. Hay varias acciones de dibujado que están para ser usadas especialmente en el evento Drawing. Hay que notar que el evento Drawing, es solamente ejecutado si el objeto (mas específicamente, si la instancia) es visible. Además, nota que, independientemente de lo que dibujes, los eventos de colisión son basados en el sprite asociado con la instancia (o si la posee en su mascara).

 

'Key press events'

Este evento es similar al evento keyboard pero este sucede una única vez cuando la tecla es presionada, en lugar de generarse continuamente. Es útil cuando quieres que las acciones se ejecuten una única vez.

 

'Key release events'

Este evento es similar al evento keyboard pero sucede una única vez cuando la tecla es soltada o liberada en lugar de generarse continuamente.

 

 

 

 

En algunos casos, es importante comprender el orden en el cual Game Maker procesa los eventos. Este orden es el siguiente:

 

1. Evento de inicio de step (Begin step event)

2. Eventos de los relojes de alarma (Alarm events [1-8])

3. Eventos del teclado ('Keyboard', 'Key press' y 'Key release')

4. Eventos del mouse (Mouse events)

5. Evento step normal

6. (En este punto, todas las instancias son colocadas en su nueva posición)

7. Eventos de colisión

8. Evento de final de step (End step events)

9. Evento Drawing

 

Los eventos Creation, Destruction y los del menú otros eventos son generados cuando las correspondientes cosas o causas (triggers) suceden.