Comunidad orientada al desarrollo de videojuegos

Game Maker Studio: Conceptos básicos

En el artículo de hoy nos centraremos en conocer el funcionamiento básico de Game Maker Studio, es decir, en cómo opera interiormente para mostrar los juegos en nuestra pantalla una vez compilado. Game Maker tiene multitud de tutoriales básicos (en perfecto inglés) dónde se aprende a manejar el programa realizando diversos minijuegos. El juego del payaso y el arkanoid son un buen punto de comienzo a realizar antes de seguir este artículo, aunque no son imprescindibles.

Game Maker Studio, como comentaba en el anterior artículo permite crear el juego de dos formas complementarias: Un menú drag and drop y GML, lo que realmente nos importa.

GML (Game Maker Language)

Es un lenguaje de programación propio basado en C, con muchas cosas en común. Está orientado a trabajar con objetos e instancias y una vez dominado y entendido como funciona, aporta una gran libertad creativa.

STEPS (Pasos)

Los steps o pasos, son el número de acciones que se realizan por segundo, en la mayoría de casos están  directamente ligados a los frames por segundo del juego (FPS). El número de pasos por segundo se configura en cada “room” del juego por separado. Las configuraciones más comunes son 30 pasos o 60 pasos por segundo.

Por ejemplo si ponemos en un objeto en su Evento “steps”, que sume + 1 a una variable, si la velocidad de la “room” o habitación es de 60, cada segundo se sumará 60 a esa variable.

El número de pasos además influirá en las veces que la pantalla se dibuja por segundo. El Evento “draw” (dibujado) está muy optimizado en las últimas versiones de GMS y nos permite preparar en qué orden se dibujará todo lo que tenga cada objeto.

No asustaros, esto es sólo teoria general para pasar a explicaros el funcionamiento interno de Game Maker. Debéis quedaros con que en Game Maker Studio, el orden de las acciones que vayamos colocando en cada evento de un objeto, se realizará en ese mismo orden, pero dentro del mismo paso (step), sólo se dibujará la última acción correcta en pantalla. Ejemplo: Si tenemos un personaje que puede mirar izquierda y derecha y en el mismo paso ponemos que primero mire a la izquierda, y luego a la derecha y luego a la izquierda; esa animación nunca se plasmará, porque  en cada paso acaba siempre mirando a la izquierda así que no plasmará más que la última posición / animación “real”.

spriteSprites (Imágenes)

El primer paso para crear objetos en GMS, es asignarles un sprite. GMS recomienda usar PNGs principalmente debido a su calidad y su soporte total para transparencias. Además, cada sprite añadido a nuestro proyecto puede estar formado por una o varias imágenes, como si fuera una especie de gif animado que nos permite crear animaciones y efectos de forma muy sencilla. Dentro de cada objeto además podemos modificar su sprite de muchas formas usando gml.

  • image_alpha : Opacidad de 0 a 1
  • image_blend: Permite tintar el sprite de un color (ej. image_blend = c_red
  • image_xscale / image_yscale = Escala del objeto en los ejes X e Y
  • image_angle = Ángulo ( 0º derecha, 90º arriba, 180º izquierda, 270º abajo)
  • image_speed = Velocidad en la que van cambiando las imágenes del sprite.
  • image_index = Imagen índice del sprite.

Por ejemplo, si tenemos un personaje con dos sprites, uno mirando a la izquierda y otro a la derecha, dichas imágenes dentr del mismo serían 0 y 1. Para intercambiarlas podríamos escribir:

  • image_speed = 0 (Para evitar que cambie sólo)
  • image_index = 0 (Para mirar izquierda)
  • image_index = 1 (Para mirar derecha).

Objetos (Objects)

Una vez tengamos el sprite necesario, crearemos un objeto. Los objetos en Game Maker son la base de todo. Cualquier habitación estará formada por objetos  e imágenes (backgrounds y tiles).

Los objetos son interactivos y funcionan mediante una serie de eventos a los que vamos añadiendo cosas a realizar. Un evento puede ser pulsar una tecla, colisionar con otro objeto, salirse de la cámara, una alarma o mil cosas. Sin embargo aunque el menú Drag and Drop de GMS nos indique tantas opciones distintas debemos tener claro que todos los eventos se realizan dentro del evento “Step” . Cuando decimos a Game Maker que compruebe si hemos pulsado X tecla lo que estamos haciendo es que en cada paso compruebe si está pulsada esa tecla o no, y si está pulsada realizará una acción correspondiente.

eventos

Teniendo esto claro nos damos cuenta que para controlar en qué orden se realiza todo, podemos olvidarnos de muchas de las acciones de Drag and Drop y dedicarnos a escribir todo en los eventos mínimos necesarios: Create, Alarmas y Step (más unos pocos más que pueden sernos útiles para ahorrar tiempo). En vez de crear eventos para cada vez que pulsemos una tecla distinta, podemos englobar las comprobaciones de cada pulsación dentro del mismo evento step, en un orden controlado que nos interese.

La principal razón para esta decisión es aconstumbrarnos a usar GML lo que nos permitirá modificar muchas variables editando texto, funcionar con scripts y mil cosas más que nos facilitará realizar operaciones complejas.

Los objetos por tanto son nuestros “seres vivos” con los que vamos a interactuar, desde un personaje a un botón, un enemigo, o el terreno sobre el que pisamos. Sin embargo, hay que distinguir entre objeto e instancia. Cuando colocamos un objeto en una room, lo que realmente estamos colocando es una “instance” (instancia). Una copia de ese objeto que pasa a tener sus propias variables y su propio código de identificación interno.

Ejemplo:

  • Si creamos el objeto obj_murcielago podemos añadirle en el evento Create la variable vida = 10
  • Si colocamos 3 instancias de obj_murcielago en una room que hemos creado, cada uno de ellos tendrá vida = 10 como variable.
  • Si otro objeto tuviera una línea de código que dijera obj_murcielago.vida = 5, todas las instancias del objeto pasarían a tener vida = 5.
  • Sin embargo si quisieramos bajar la vida a un único murcielago deberíamos encontrar la forma de señalar qué murcielago es, por ejemplo al crearlos: murcielago1 = instance_create(300,300,obj_murcielago).
  • Si lo creamos de esta forma, podremos más adelante usar murcielago1.vida = 5 para cambiar la vida de esa única instancia de obj.murcielago.

La próxima semana profundizaremos un poco más en el código GML para así ponernos manos a la obra con nuestro juego / tutorial, una aventura gráfica en la que haremos uso de muchas funciones que nos facilitarán la programación del juego.

 

2 thoughts on “Game Maker Studio: Conceptos básicos

  • Asensio says:

    ” image_speed = 0 (Para evitar que cambie sólo)
    image_index = 0 (Para mirar izquierda)
    image_index = 1 (Para mirar derecha). ”

    Para evitar tener que poner el image_speed a 0, se podría usar image_single en vez de image_index.

  • javifugitivo says:

    Gracias por el comentario. Parece ser que image_single es una función anterior a GM:Studio y ha sido retirada, quizás funcione perfectamente en Game Maker 8, pero para Game Maker Studio se recomienda mejor el usar image_speed.

Leave a Reply