El editor de objetos de Game Maker Studio 2
Los objetos son los recursos que utilizamos para controlar todos los aspectos de un juego, ya que es la manera en que decimos como hacer cosas específicas. La mayoría de las veces tienen un sprite asociado con ellos para verlos en las rooms de juegos, pero podemos crear objetos invisibles, normalmente los llamamos controladores, para que reaccionen a ciertos eventos relacionados a los eventos, o el tiempo, etc…
Como ves, los objetos es uno de los recursos más importantes en tu proyecto de Game Maker Studio 2. Las interacciones de estos objetos serán lo que determine como funciona tu juego. Vamos a explicar como funcionan. En otros posts hemos dicho que necesitamos una room, que es el área dónde ocurren las cosas en un juego. En esa room colocamos los objetos para que interactúen, pero no es del todo cierto: lo que colocamos son instancias. Los objetos son plantillas para decir que queremos que hagan, pero las instancias, podemos decir que son las copias de estos objetos, son las que realmente se mueven en la room.
Piensa en tu juego por un momento: tenemos personajes, enemigos, monstruos, bolas, paredes… Hemos definido como se ven todas estas cosas con los sprites, y ahora necesitamos objetos para saber como funcionan. Estos objetos los colocamos en la room, que se convertirán en instancias cuando ejecutemos el juego.
Todo esto lo repito para entender que una instancia no es lo mismo que un objeto. Cuando estemo programando un objeto, habrá cosas que afectan a las instancias y otras que afectan a los objetos. Imagina que tenemos una pared, y colocamos muchas de ellas en la room. Si tenemos un arma o un ataque que puede destruir una pared, destruirá esa instancia en concreto. Pero si destruimos el objeto, destuirá todas las paredes de la room (y seguramente no queremos eso).
Veamos como es el editor de objetos de Game Maker Studio 2. Cuando creamos un objeto nuevo, se abrirá una ventana como ésta:
Vamos a ver todas las secciones que tiene.
Details – detalles
Aquí le damos un nombre al objeto (como siempre, alfanumérico). Como siempre comento al dar un nombre a un recurso, nada de espacios, no puede empezar por un número y sólo se puede usar como símbolo especial el guión bajo _. Yo por ejemplo suelo usar el prefijo obj_ para referirme a todos los objetos, como puede ser obj_enemy.
A continuación puedes elegir el sprite para el objeto. Haz click izquierdo en el cuadro del sprite para que se abra el explorador de recursos con una lista de todos los sprites disponibles. Cuando ya tenemos un sprite asignado, podemos darle al botón para editar el sprite y cambiar las propiedades. Si no tenemos sprite y queremos crear uno, podemos darle al botón para crear un nuevo sprite. También podemos editar la imagen del sprite, abriendo el editor de imágenes, si le damos al botón .
Collision Mask – máscara de colisión
Justo debajo de dónde asignamos el sprite del objeto, tenemos una sección para elegir una máscara de colisión. De forma predeterminada, un objeto usará las propiedades de colisión del sprite asignado, pero hay casos en los que es posible que las colisiones se basen en una forma de máscara diferente. En estos casos, podemos darle al botón de la máscara de colisión y elegir otro sprite. De esta manera, separamos en las instancias del objeto los sprites que dibuja y las colisiones de la máscara.
Properties – propiedades
Vamos a ver algunas propiedades que tiene el objeto para configurar.
- Visible: indica si las instancias del objeto son visibles cuando la room se inicia. Lo habitual es que las instancias sean visibles, pero a veces es útil tenerlas invisibles, como puntos de control para movimiento, guardar partidas en lugares concretos, etc. aunque no se vean los objetos invisibles, todavía reaccionan a los eventos, y si tienen un sprite o máscara asignada, también reaccionará a los eventos de colisión con otros objetos. Recuerda que al ser invisibles, el evento Draw no se ejecuta.
- Solid – sólido: cuando se marca una instancia como sólida, le estamos diciendo a Game Maker Studio 2 que deberá de intentar resolver cualquier colisión antes de desencadenar el evento Collision. Esto es una funcionalidad muy básica, lo único que hace es mover la instancia de nuevo a la posición que tenía en el momento antes que se detectó la colisión, y luego realizar las acciones que se encuentran en el evento. Suele limitarse a objetos que no se mueven, como los muros y el suelo.
- Persistent – persistente: un objeto persistente es aquel que no desaparece cuando cambia de room, sino que se traslada a la nueva room. Sólo desaparecerá cuando le decimos explicitamente de destruirlo, ya sea con la acción correspondiente o en el código. Esto significa que si colocamos un objeto con esta propiedad activa, estará disponible en todas las habitaciones posteriores y seguirá con sus acciones y eventos que tiene, excepto el evento de creación que ya se ejecutó en su momento (sólo se ejecuta cuando se crea por primera vez, no cada vez que cambia de room).
Esto puede ser útil, por ejemplo, cuando tienes un personaje principal que se mueve de una habitación a otra y quieres mantener todas las variables del objeto igual, pero debes de tener mucho cuidado cuando creas y destruyes objetos persistentes de hacerlo correctamente, porque es fácil cometer errores (por ejemplo, cuando vuelves al menú.
Recuerda que los objetos tienen su evento Game Start, Game End, Room Start y Room End activados, sin embargo, si reiniciamos el juego, con la funcióngame_restart()
, todos los objetos persistentes serán eliminados y hay que crearlos de nuevo. También si desactivamos un objeto de este tipo, ya no pasará de una habitación a otra, a menos que se vuelva a activar antes que se desencadene el evento de final de room. - Uses Physics – usar física: cuando se activa esta casilla le estamos diciendo a GMS 2 que este objeto debe ser parte de un mundo con físicas. Comprobado esto, abrirá una nueva ventana encadenada dónde se definen estas propiedades.
Options – opciones
La sección de opciones define como se comportarán las instancias cuando se colocan en la room o habitación. Aquí se añaden los eventos, que es cuando se ejecuta tu juego, establecer si el objeto contiene un objeto padre y también establecer las propiedades de físicas si están habilitadas. Vamos uno por uno.
Events – eventos
Aunque de los eventos en Game Maker Studio ya profundizaremos, ahora hago un resumen. Un evento es un momento muy concreto mientras se ejecuta el juego, se suele llamar el bucle del juego, y es en ese momento lo que le decimos que quiere hacer mediante acciones. Desde el momento que una room se pone en marcha hasta que termina, hay un bucle donde cada step (un step es uno de esos momentos que hemos comentado, que se ajusta con la velocidad de la room) lanza una serie de eventos que se ejecutan y comprueban.
Veamos una configuración de objetos con eventos y código:
Como se puede ver en el ejemplo, hay una serie de eventos listados que deben responder, pero al principio esta lista esta vacía y debes decidir que eventos necesitas y qué debería hacer las instancias de ese objeto cuando esos eventos son activados.
Para añadir eventos en el objeto, pulsamos el botón Add Event que se encuentra en la parte inferior de la lista y mostrará la siguiente ventana:
Ésta es la lista de todos los eventos básicos que un objeto puede responder, aunque alguno de estos eventos tiene sub-eventos para afinar más sus comportamientos. Por ejemplo, los eventos de teclado están relacionados con cada una de las teclas. Una vez seleccionado el evento, la ventana de código se encadenará a ella y se abrirá a la derecha. Ahora puedes editar el código para darle al objeto un comportamiento específico.
Puedes hacer click derecho en cualquier evento para obtener un menú con las siguientes opciones:
- Add Event – añadir evento: añade un nuevo evento a la lista.
- Cut / Copy / Paste Events – cortar / copiar / pegar eventos: corta, copia o pega el evento seleccionado. También puedes usar los atajos de teclado <Ctrl>+<X>, <Ctrl>+<C> y <Ctrl>+<V>.
- Duplicate Event – duplicar evento: duplica el evento elegido, especificando el nuevo.
- Change Event – cambiar evento: pedirá que elijas otra categoria de evento, eliminando el evento original.
- Convert to Drag and Drop / Code – convertir a Drag and Drop / código: los eventos del objeto son creados utilizando el método elegido durante la creación del proyecto, siendo Drag&Drop o lenguaje GML. Con esta opción puedes convertir uno a otro, independientemente del tipo de proyecto.
- Delete Event – eliminar evento: elimina un evento. Puedes eliminar varios si se seleccionan mediante <Mayus>+click izquierdo.
También es posible ponerle un texto descriptivo a los eventos que se mostrará al lado del editor de eventos. En la primera línea del editor de código ponemos un ejemplo
/// @description Esta es la alarma AI Fight
y en el evento veremos esto:
Hemos visto algunos eventos, si quieres ver en detalle cada uno de ellos, tienes un listado de eventos ya publicado.
Parent – herencia
Cuando se trabaja con objetos en el IDE de Game Maker Studio 2, puedes definir jerarquías padre/hijo, lo que comúnmente se define como herencia entre objetos. Si hacemos click en el botón Parent del editor, podemos elegir otro objeto del árbol de recursos para ser el padre del que estamos editando.
En general, es una buena práctica crear objetos padre y tener ese objeto con el comportamiento predeterminado, incluso nunca añadir esa instancia en el juego. En su lugar, usaríamos todos los objetos heredados para mostrar sus diferencias. Recuerda que la herencia es múltiple, podemos tener un objeto que hereda de otro, y este último heredad de otro y así continuamente. Esto es muy útil para tener tu juego estructurado.
Physics – físicas
Si hemos marcado la casilla para usar físicas, que no está activado de forma predeterminada, el comportamiento del objeto cambia radicalmente cuando la instancia se coloque en la room, sobretodo las funciones de movimiento y colisión. Si esta marcada, abrirá una ventana encadenada para el editor de físicas.
Las opciones de físicas las trataremos cuando las entienda ;). Es un tema que nunca me he puesto, así que hablaré cuando sepa como funciona.
Resumen final
Hemos visto como funciona el editor de objetos, y como ha cambiado la visualización de los datos respecto a versiones anteriores. ¿Crees que los cambios te benefician? Dime en los comentarios tu opinión, aunque también puedes ver el siguiente post sobre el editor de rooms.