domingo, 16 de diciembre de 2012

Aprendizaje: GameMaker

Estos días, con motivo del concurso de videojuegos organizado por el Blog de Toodaim, estoy repasando el funcionamiento de GameMaker, por lo que he pensasdo en hacerme un mini-manual de lo más importante de programa, sus eventos y sus acciones. Podría haber hecho un manual completo, pero el software ya viene con un par de tutoriales con los que aprender la parte más básica, así que me voy directo al grano.

Cosas importantes en GameMaker:

(objects): Objetos que se instanciaran en los juegos y tendrán unas propiedades y comportamientos.

(rooms): Habitaciones, es decir los niveles o pantallas donde colocaremos los objetos.

(sprites): Imágenes o animaciones que representan visualmente los objetos.

(sounds): sonidos que se usan en el juego, ya sean música o efectos de sonido.

(backgounds): fondos o imágenes que sse usan como fondos para nuestras habitaciones o pantallas.


Eventos:

El sistema comprueba un monton de eventos según interactuamos con él y Gamemaker recoge unos cuantos para poder reaccionar ante ellos. Un evento puede ser pulsar una tecla, pero también sera otro soltarla y otro más mantenerla pulsada (son 3 eventos distintos). Veamos algunos eventos de GameMaker:

Create: Sucede cuando la instancia de un objeto es creada. Es decir, cuando se crea una copia del objeto. Puede usarse, por ejemplo, para preparar variables de juego que deben definirse cuando aparece un objeto o se está iniciando algo en nuestro proyecto.

Destroy: Sucede cuando la instancia es destruida. La instancia del objeto ya no existira cuando este evento sea llamado. Se puede usar, por ejemplo para actualizar puntuaciones al destruir (matar) algún enemigo.

Alarm: Cada instancia tiene 12 alarmas de reloj. Se pueden configurar estas para realizar acciones cada cierto tiempo. Por ejemplo, que un enemigo cambie su estado cada 20 segundos.

Step: Ocurre cada salto en el juego (o fotograma). Aquí se pueden poner acciones que necesites que se ejecuten constantemente. Es un evento con el que hay que tener cuidado por que si ponemos demasiadas cosas en él afectará al rendimiento y se producirán ralentizaciones. Hay 3 eventos step difetentes: begin step, end step y simplemente step, que se ejecutan al inicio del fotograma actual, durante el mismo y cuando termina.

Collision: Ocurre siempre que dos instancias chocan, o más bien cuando se superponen. En este caso dos eventos de colisión se activan, uno para cada instancia. Podemos seleccionar cual nos interesa y añadirle acciones.

Hay diferencias entre colisiones con objetos solidos y no-solidos. Cuando el otro objeto es solido, la instancia vuelve a su posición previa (la que tenía antes de que la colisión sucediera), y luego se ejecuta el evento.

Si el otro objeto no es solido, la instancia no se coloca donde estaba. El evento simplemente se ejecuta en su actual posición. Puedes moverte sobre el objeto si lo deseas y el evento solo te indica una vez que ha habido “choque”.

Keyboard: Cuando el jugador mantiene pulsada una tecla. Puedes elegir para que tecla se capturará el evento o elegir para cosas que ocurran si no se pulsa ninguna tecla, o que comprueba la pulsación de cualquier tecla. Si se pulsan varias teclas a la vez, se activan los eventos para todas las teclas pulsadas.

Mouse: Se puede activar cuando ocurren eventos de raton como que el cursor se situe sobre el sprite que represente la instancia de un objeto, que se pulse uno de los botones del ratón, o no se pulse ninguno, se mantenga pulsado, se suelte, etc.

Dentro de esta sección de eventos se incluyen también eventos para joysticks, por si tenemos conectado alguno.

Otros: Que suelen ser eventos específicos para juegos como por ejemplo

- Ourside room: Que la instancia se salga por completo del nivel actual

- Intersect boundary: Cuando la instancia sale parcialmente de los límites de la habitación.

- Views: Para el uso de vistas en las habitaciones.

- Game start: Inicio del juego.

- Game end: Termina el juego.

- Room start: Se inicia el nivel actual.

- Room end: El nivel termina.

- No more lives: Se han acabado las vidas del jugador.

- No more health: La resistencia del jugador se agotó.

- Animation end: Una animación ha finalizado su ciclo.

- End of path: Si una instancia ha seguido un camino y este ha llegado al final del mismo.

- Close button: Cuando el jugador pulsa el botón cerrar de la ventana de juego.

User defined: Tenemos 16 eventos para personalizar algo que se nos ocurra. Pero para esto hay que saber programar en el lenguaje que usa GameMaker.

Draw: Cuando una instancia es visible, dibuja su sprite cada fotograma en la pantalla. Cuando especificas acciones en el evento de dibujo, el sprite no se dibuja (no lo he comprobado, pero es lo que dice el manual) pero pueden ejecutarse acciones en su lugar. Puede usarse esto para dibujar algo en vez del sprite, o hacer algunos cambios en los parámetros del sprite. Hay un número de acciones de dibujo, pero estas solo se ejecutan si el objeto esta definido como visible. Independientemente de se si dibuja o no, los eventos de colisión se asocian al sprite asociado a la instancia.

Key Press: Suceden cuando se presiona una tecla, pero no de forma continua, es decir, solo se activan una vez aunque después mantengamos pulsado.

Key Release:
Cuando dejamos de pulsar la tecla.

Orden de ejecución de eventos en Gamemaker.

Es importante conocer el orden en el que el programa interpreta los eventos para decidir que acciones colocar en cada uno. El orden es el siguiente:

Begin step 

Alarm 
Keyboard, Key press y Key release 
Mouse 
Step 
Collision
End Step 
Draw

Ahora que ya sabeis como lo hace GameMaker, si os gusta programar o quereis aprender, podeis imaginar como hacerlo vosotros mismos de forma similar. En la programación de un juego hay que tomar distintos eventos que no son otra cosa que acciones del sistema o interacciones del usuario con el mismo o con el ordenador, ante los que hay que decidir que hacer. Solo nos falta hablar de las consecuencias a los eventos o que hacer cuando suceden, es decir, las acciones. Pero eso, por espacio, lo dejamos para la próxima.

3 comentarios:

  1. muy buen repaso, ciertamente para los que esten perdidos al principio les puede venir bien, personalmente creo que el sistema de botones tiene la ventaja de que te facilita mucho dar los primeros pasos, pero a la vez es un poco lioso dado que hay "normas" en GM de las cuales los principiantes no tienen ni idea como el tema evento-accion, por ejemplo acciones que solo se puedan aplicar a ciertos eventos. Incluso hacer un supermario resultaria dificil para un principiante con el modo de arrastre. Aun asi es cierto que con la experiencia que puedas ir ganando puedes llegar a tener resultados realmente buenos, te invito a que mires la web de locomalito, el cual crea juegos "retro" en GM y realmente consigue crear muy buenos juegos 2D, en especial el de "Maldita Castilla", claramente basado en Ghosts'n Goblins :)

    http://www.locomalito.com/

    ResponderEliminar
    Respuestas
    1. Esta claro que no es tan, tan, tan, facil como lo pintan eso de hacer juegos en GameMaker, pero es que es dificil cuando por detrás tienes objetos, eventos y acciones, no mostrarselos de alguna manera al usuario para que pueda manejarlos.

      No conocía al la web de locomalito, mola :P Si todo eso esta hecho en GM... wow!

      Eliminar
  2. Ostia charlie, que bueno, he estado ojeando tu página y tiene una pinta genial. En cuanto acabe el concurso me gustaría probar los juegos.
    Por cierto Javier, buen artículo sobre lo más importante de GameMaker

    ResponderEliminar