Primer tutorial: Tappy Plane
Vamos a aprender a como hacer un juego en Game Maker Studio. Será un juego muy básico, para empezar a conocer como funciona el programa y las posibilidades que nos da. Si os gusta más aprender el programa con ejemplos que leeros todas las funcionalidades que hemos puesto, podéis acceder directamente aquí, ya que lo haremos paso por paso.
Es posible que os acordéis de un juego que se hizo muy famoso llamado Flappy Bird, un juego con una mecánica muy sencilla y con una dificultad endiablada. El juego fue número uno en descargas en las tiendas de la Apple Store y Google Play, y el propio autor lo retiró sin dar explicaciones (está claro que murió de éxito).
Este tutorial será un juego muy parecido a este juego. Utilizaremos la misma mecánica, que consiste en evitar los obstáculos, pulsando con el ratón para hacer que suba el jugador y teniendo en cuenta la gravedad.
Primer paso: añadimos las imágenes necesarias
Iniciamos la aplicación, y en la ventana inicial vamos a la pestaña new. Elegimos una ruta donde guardaremos nuestro proyecto y en Project Name pondremos Tappy Plane. Se abrirá una ventana parecida a ésta:
Utilizaremos imágenes con licencia Creative Commons. En la dirección http://opengameart.org/content/tappy-plane podemos coger las imágenes de Kenney. Así que ¡vamos a descargarlas!
Ahora crearemos los primeros sprites. Iremos al menú Resources – Create Sprite. Le damos al botón Load Sprite y buscaremos la carpeta de Tappy Plane, en la ruta PNG – Planes. Elegiremos 3 imágenes de un color (elegid el color que queráis). Aseguraros que en el Nombre archivo aparecen los 3 ficheros seleccionados.
Le damos al botón Abrir y nos cargará las imágenes. ahora le damos un nombre al sprite, por ejemplo spr_plane.
Ahora haremos los mismos pasos con el fichero rockdown.png que hay en la carpeta PNG. El nombre del sprite será spr_rock.
Este sprite tendrá una máscara precisa, es decir, su máscara será igual que el dibujo que vemos.
Hacemos click en Modify Mask y marcamos la opción Shape – Precise. Quedará de la siguiente manera:
Ahora añadimos una imagen como fondo del juego. Vamos a la opción de menú Resources – Create Background y seguimos los mismos pasos que hasta ahora para elegir el fichero backgroung.png.
Guardamos todos los cambios que hemos añadido al proyecto Para eso, vamos al menú File – Save o al botón correspondiente de la barra de herramientas .
Crear los diferentes objetos
Vamos a crear los objetos necesarios para el juego, añadiendo toda la programación que haga falta. Empezamos por el más sencillo.
Objeto roca
Vamos a Resources – Create Object. En la ventana que vemos, en Name pondremos obj_rock_down.
Elegimos su sprite. Vamos a la casilla de elección de sprite, justo debajo de nombre, y le damos al botón que hay al lado de dónde pone . Nos saldrá una lista y elegiremos spr_rock.
Le damos al botón de Add Event y de la ventana que aparece elegimos la primera opción Create.
Una vez añadido el evento, añadiremos su acción relacionada. Nos aseguramos que estamos en la pestaña move (derecha del formulario de objetos) y arrastramos el primer botón de la zona de Actions. Pulsamos la flecha de la izquierda y en Speed le damos valor de 4.
Le damos OK y se añadirá la acción elegida. Ya podemos dar por finalizado todas las acciones del objeto, asi que también podemos darle OK a la ventana de propiedades del objeto.
Copia del mismo objeto
Crearemos el mismo objeto con las mismas características, pero con alguna ligera diferencia, que llamaremos obj_rock_up.
Una vez hemos añadido el mismo sprite, el mismo evento y la misma acción de movimiento, añadiremos una acción nueva. Iremos a la pestaña main1 y haciendo Drag&Drop del botón de Transform sprite. Aparecerá una ventana y elegimos la opción de mirror flip vertically.
También añadiremos una acción nueva, en la pestaña move, arrastramos Jump Position. En y ponemos 480 y marcamos la casilla Relative.
Objeto controlador
Es muy típico en muchos juegos crear un objeto que no tenga ningún sprite, y que sólo se dedique a pintar cosas globales (por ejemplo la puntuación global) o a generar objetos y/o enemigos. Vamos a hacer algo muy parecido para este proyecto.
Creamos un objeto nuevo, lo llamamos obj_controller. Añadimos un evento Create, y en la pestaña main2 arrastramos el botón de Alarm
. Le daremos un número de steps de 60.
Creamos un evento nuevo. Le damos a Add Event y le damos al botón Alarm. Saldrá una lista y elegimos Alarm 0.
Una vez añadido el evento Alarm 0, añadiremos dos acciones. Primero vamos a la pestaña main1 y arrastramos el botón Create random, En object1 pondremos obj_rock_down, y en object2 pondremos obj_rock_up. En x pondremos 850. Quedará así
Por último, añadimos otra vez la acción Alarm de la pestaña main2, y su valor de 60. El objeto obj_controller ya está acabado.
Testear lo que hemos probado
Con lo que tenemos hecho, podemos probar si los objetos que hemos programado son correctos.
Creamos la room
Iremos a Resources – Create room, se abrirá una ventana que es el editor de rooms. Iremos a la pestaña que pone Settings y pondremos en name room_main. En Width pondremos 800 y en Height 480.
Añadimos el fondo
En la pestaña backgrounds marcamos la casilla Visible when room starts, elegimos el único que tenemos (si no hemos cambiado el nombre se llamará background0). En la casilla Hor. speed pondremos -1, para que se mueva ligeramente el fondo.
Vemos que en la derecha de la room gris se ha añadido el fondo.
Ahora añadiremos los objetos
Vamos a la pestaña de Objects y elegimos el objeto obj_controller.
Cuando esté seleccionado, haremos click en la room de la derecha. Se añadirá el objeto con un símbolo “?” (significa que no tiene un sprite asociado).
Ejecutamos el juego
Para ejecutar y probar el juego, vamos al menú Run – run normally y vemos el resultado.
Añadimos más objetos: el jugador
Hemos visto como se mueven los objetos, pero nos falta que interactue el jugador.
Creamos el objeto obj_plane, y asociamos el sprite spr_plane. Añadimos el evento Step y añadimos la acción gravity
. Le damos los valores de direction 270 y gravity 1.
Añadimos el evento Mouse – Global Mouse – Global Left Released. Añadimos la acción Vertical Speed
de valor -10.
Ahora añadimos el evento Collision y elegimos el objeto obj_rock_down. La acción que añadimos es Display message
y pondremos en el texto GAME OVER. Luego añadimos la acción Restart Game
.
Haremos las mismas acciones con otro evento Collision, pero con el objeto obj_rock_up.
También lo haremos con otro evento pero esta vez duplicaremos un evento colisión, haciendo click con el botón derecho y eligiendo Duplicate event. Aparecerá la ventana para elegir eventos, que elegiremos Other – Intersect boundary. Le damos OK a la ventana de propiedades del objeto para acabar todas las opciones. Ahora lo añadiremos a nuestra ventana de juego.
Añadir objeto a la room
Vamos a la ventana de edición de rooms. Añadimos nuestro objeto obj_plane en la room que hemos creado, intentando que quede más o menos en la mitad de la room.
Podemos ejecutar el juego. Ya hemos creado nuestro primer juego.
Final
¿Qué os ha parecido? ¿Habéis seguido todas las indicaciones? Os dejo el proyecto importado aquí:
Tutorial Tappy Plane
Espero que el tutorial sea suficientemente claro, no obstante, no dudes en poner vuestra opinión en los comentarios.
Yo lo he intentado, pero los pinchos de abajo no me aparecen… :c lo he hecho todo igual
Comprueba con el proyecto que añadí si está todo igual. Pueden ser varias cosas: que no esté bien la velocidad en los pinchos, que no esté bien hecho el obj_controller, o que no se haya añadido a la room.
A veces el detalle más sencillo hace que no funcione nada.
Seguí todos los pasos correctamente y perféctamente me corrió bien el juego, pero hay un problemita en el juego “Tappy Plane”, uno puede subir hasta el cielo y así nunca perderías. ¿ Hay alguna manera para que no pase de lo máximo de la room ?, porfavor. Buen Día
Buenas Dylan,
, debería limitarte al tamaño de la ventana.
en principio, con el evento Other – Intersect boundary
Yo lo había puesto pensando en si el avión cae, pero también te daría un mensaje de “Game Over” en la parte de arriba.
Es lo que comento de duplicar el evento, en el último párrafo del objeto del avión.
David
Puedes probar a poner en el evento Step que si la variable Y del avión es menor que room_height ponga Game Over.
Hola, me pasa lo mismo que a Toni, he revisado todo y los pinchos de abajo no salen; no se si puede ser por el objeto que saca los pinchos o qué pero seguido al pie de la letra y no salen. Alguna ayuda?
Buenas Fray,
compara mi proyecto que adjunto. Puede ser el X/Y del sprite sea diferente, o algún paso que sea incorrecto. Si no ves que puede ser, le puedo echar un vistazo a tu proyecto (aunque no te prometo contestar rápidamente).
Me resultaría interesante tener este proyecto pero sólamente usando GML. Lo tenéis? Thanks
Pues no me lo había planteado 🙂
Le doy una vuelta y lo hago, pero no deja de ser una conversión de acciones Drag and Drop a código GML.
Aquí tienes una guía que creé en su momento.
Muy bueno el tutorial. Lo único es que hay veces que me salen a la vez la roca up y la down y claro, es imposible pasar. ¿se os ocurre que puede estar fallando?
¡Hola Alberto!
se supone que en el objeto controlador, en el evento de Alarma hay una acción Create Random, para controlar que cree una roca arriba o abajo, no las dos a la vez. Una de dos, o se ejecuta la alarma más de una vez o tienes dos acciones Create Random.
Compara con el proyecto para descargar si es eso.
Una duda, sigo todo al pie de la letra pero al iniciar el juego solo me sale un pincho, por lo demás todo esta correcto
Hola Nacho,
si te sale un solo pincho, revisa tu evento Alarm si crea el objeto. Si está bien, mira si en el evento Create activas la alarma con una acción Set Alarm.
Gracias por los tutoriales en español, muy bien explicados!
¡Gracias a ti! Un abrazo.
como pongo puntaje?
Deberías de mirar la acción Set Score, en la pestaña Score. Pones un número y marca el check Relative para acumular.
Oye necesito tu ayuda hay forma de ponerle un contador osea que cuente cuantas rocas ah pasado
Yo en el objeto controlador, en el evento Create pondría un Set Variable de esta manera
global.contador = 0
Añadiría un evento Draw para añadir un Draw Variable de la que acabas de crear
Luego, en los dos objetos roca, agrego un evento Outside room, para detectar cuando sale de la habitación, y haría otro Set Variable, pondria la variable
global.contador
, en value un 1 y marcaría el check Relative.Así es como sumaría globalmente.
Hola, el tutorial me a servido y me gusto la forma de explicarlo. Pero queria saber lo siguiente:
1. ¿Como poder agragar puntuaje (suma 1 punto cada vez que el avion pasa una roca)?
2. ¿Se le podria agregar alguna habitacion como “menu” y otra cuando pierdes en el juego?
Tengo mas dudas pero primero las principales. Gracias de antemano 🙂
1. Lo de agregar puntuación está respondido en el comentario a Alejandro, mira si te sirve de solución.
2.- Claro, se puede agregar todas las rooms que quieras, solo tienes que respetar el orden en que se ve el árbol de recursos (al menos en la primera room). Luego para cambiar de room puedes usar la acción Different room.
Como poner subtitulos?
Te refieres a dibujar texto en pantalla?
Busca la acción Draw Text que sirve para eso.
Hola! Tengo una pregunta, como puedo cambiar de room a otra por si sola es decir como si fuera de dia y noche en el juego
Depende de como hayas hecho la room. Puede ser cambiando la imagen de fondo, el color, con shaders… Hay muchas posibilidades.