Como poner pausa en Game Maker (todas las versiones)
Si tuviera un canal de Youtube, podría empezar diciendo
¡Que tal, GAMEMAKEROS!
O algo parecido… acepto sugerencias 😀
Hoy vengo a explicar en un tutorial como poner pausa en Game Maker, que por cierto es una de las primeras dudas que surgen cuando empiezas con Game Maker Studio.
Explicaré dos métodos muy sencillos: el primero lo puedes usar sólo con acciones Drag&Drop, y lo entenderás rápidamente como funciona. La segunda manera de hacerlo es la que deberías de usar, luego explico el motivo. Aunque tengo código GML, tampoco es muy complicado.
Otra cosa muy importante que deberías saber es que, aunque el ejemplo lo hago en Game Maker Studio 2, estas opciones funcionan para todas las versiones de Game Maker. Es decir, debería funcionar con GMS 1.4, pero también para Game Maker 8.1 (y quizás las anteriores).
¡Vamos al lío!
Como poner pausa en Game Maker 【opción super sencilla】
Empiezo creando un proyecto sencillo, con un objeto con una pequeña animación y un botón de Pausa.
¿Cómo vamos a ejecutar el botón de pausa que estás viendo? Pues simplemente cambiando de room.
Creamos una room que será la room de pausa, yo lo he hecho muy sencillo, con un botón que vuelve a la room anterior (la del juego). Es tan sencillo como buscar la siguiente acción, y escribir la room de pausa.:
Esto tiene traducción en lenguaje GML en una simple línea:
room_goto(room_pause);
poniendo dentro de los paréntesis
Pero,
¿Que pasa si en la room ya han pasado cosas, como destruir enemigos?
Pues aquí está la clave de todo. Para que guarde lo que ha pasado en la room, debemos de buscar en las propiedades de la room el check Persistent.
Con la propiedad Persistent al salir de la room, se queda guardada en memoria, podemos decir que se queda congelado, lo que está ocurriendo en ese momento en la room, y así cuando vuelvas estarás en el mismo estado en que se encontraba la room.
Por eso no es recomendable usarlo si tienes muchas rooms, porque todas las rooms se quedarían en memoria, y al final ocupan memoria de una manera absurda si no vuelves a entrar.
Como volver a una room si tienes varios niveles
En este caso, imaginamos que tenemos 4 rooms de juego y una de pausa (también puedes tener otra del menú principal, etc.). ¿Como podemos saber en que room de juego se ha pulsado el botón de pausa?
La mejor opción es guardar en una variable global en la room que nos encontramos. Buscamos el evento Other – Room Start , dónde podemos poner:
global.room_actual = room;
Esto puede escribirse tanto en código o con acciones.
Luego en el botón del menú de pausa, para volver a la room solo hay que escribir:
room_goto(global.room_actual);
Con este pequeño cambio, ya podrías crear una pausa en tu juego de Game Maker.
Aquí te dejo el enlace del proyecto. Lo tengo puesto en BitBucket, que ya comenté que es la mejor copia de seguridad que puedes hacer de tus proyectos. Si no lo estás haciendo, ¡ya tardas!
Como poner pausa en Game Maker 【opción con lenguaje GML】
Lo que has visto hasta ahora no es lo más óptimo si tienes muchas rooms, o si sueles pasar de una room a otra con bastante frecuencia en tu juego.
Así que lo mejor es poder pausar tu juego sin necesidad de salir de la room.
¿Cómo puede hacerse? Gracias a un par de funciones de GML que nos permite congelar y descongelar la room. Estas funciones son:
- instance_deactivate_all(): esta función desactiva todas las instancias que hay en la room actual. Dentro del paréntesis puedes poner un parámetro booleano, es decir, valor
true
ofalse
, para decidir si quieres que el objeto que hace la llamada a esta función se desactive también o no. - instance_activate_all(): para activar todas las instancias desactivadas.
También tienes otras funciones para desactivar un objeto concreto o un área, y también para una capa de instancias, pero en nuestro caso nos interesa todo así, que vamos a ver como se haría.
En el ejemplo que hago, el botón desactiva todas las instancias, incluida la del botón de pausa. Luego crea el objeto del botón de retorno (en nuestro caso sólo tiene que crear un botón).
El código del botón de pausa es el siguiente:
instance_deactivate_all(false); instance_create_layer(room_width / 2, room_height / 2, "Instances", obj_button_return);
Como ves, desactivamos todas las instancias y creamos el botón en medio de la room.
El botón de retorno tiene este código cuando haces click:
instance_activate_all(); instance_destroy();
Y ya está. Bueno, en realidad no está del todo, vamos a mejorar un poco más.
Cuando desactivamos las instancias, Game Maker hace una cosa curiosa: los objetos desaparecen. Solo deja los elementos que hemos pintado de fondo.
Si no quieres que ocurra eso, debemos de hacer una captura de pantalla de nuestro juego para luego pintarla. Tenemos la función screen_save()
que guarda una captura de nuestro juego en un fichero.
Así que el botón de pausa quedaría así cuando se hace click en él, en el evento Mouse – Left Released :
screen_save("fondo_pausa.png"); instance_deactivate_all(false); instance_create_layer(room_width / 2, room_height / 2, "Instances", obj_button_return);
Volvemos al botón de retorno al juego. En el evento Create añadimos una variable, que crea un sprite con la imagen de fondo elegida:
spr_imagen_fondo = sprite_add("fondo_pausa.png",1, false, false, x, y);
Y en el evento Draw del botón el código es el siguiente:
//Dibuja la imagen de fondo draw_sprite(spr_imagen_fondo, 0, x, y); //Dibuja el panel gris draw_sprite (spr_panel_pause, 0, x, y); //Dibuja el sprite del botón draw_self(); //Dibuja el texto del botón draw_text(x, y, "RETURN");
¡Y ya lo tenemos! Podemos ver como nuestro juego se queda pausado, y se ve un menú sencillo para volver.
Un pequeño apunte, la función instance_create_layer()
es propia de Game Maker Studio 2, para versiones anteriores debería ser instance_create()
, de la siguiente forma:
instance_create(room_width / 2, room_height / 2, obj_button_return);
Para finalizar, os dejo el proyecto en GMS 2 por si queréis echarle un ojo:
Resumen final
Bueno, pues aquí tienes dos maneras diferentes para crear una pausa en tu proyecto. Yo recomiendo al segunda, porque servirá para cualquier proyecto.
Pues no está nada mal geimmakeros?
???
No me aparece la funcion “instance_create_layer” en GM 1.4
En GMS 1.4 debes usar
instance_create()
, que es la función equivalente. En GMS 2 hay una gestión de capas en las rooms, y tienes que decir en qué capa se crea el objeto.He añadido un texto para aclarar el cambio.
Por fin mis juegos tendrán función de Pausa!!! Jajajaj ( va en serio, nunca se la implementaba ) 🙂 Gracias!
Gracias
la imagen cuando se crea , el fondo (lo demas de la room) extrañamente se vuelve negro pierde color (es puro code)