Desarrollando un juego con Godot

📆 14 de junio de 2024

Siempre me gustó la programación, aunque es un hobby al que le he dedicado poco tiempo. Como no se me ocurre ninguna aplicación a la que pueda meterle mano, los videojuegos parecen una buena opción, ya que nunca sobran y no tienen por qué ser útiles.

Mis primeros pinitos en el mundillo los hice con pygame, porque python es el lenguaje de programación más asequible para mí. Pero, aunque el lenguaje es sencillo, había que programar prácticamente todas las cuestiones del videojuego, lo que te hace perder mucho tiempo con la parte técnica, y es difícil ver avances.

Unos cuantos años después he vuelto a empezar, pero esta vez he confiado la parte más técnica a un motor de videojuegos que se llama Gogot. Aunque sigue siendo necesario programar cosas, Godot se encarga de gestionar todo lo difícil de programar, dejando la lógica en tus manos. Godot utiliza un lenguaje de scripting, GDscript, que es muy parecido a python, por lo que comenzar a trastear con él ha sido muy sencillo.

También hay que decir, que uno de los puntos clave del desarrollo de un videojuego es la planificación, y ese, concretamente, es uno de mis puntos débiles, por lo que no avanzo todo lo que podría al tener que estar continuamente cambiando cosas porque no había previsto algunos detalles. Esto, que se conoce com refactorización del código, también permite aprender, pero enlentece el ritmo de desarrollo, y si tu tiempo es muy limitado, hace que el avance sea muuuuy lento.

Desarrollando el videojuego

Lo primero es decidir el tipo de videojuego, en mi caso un clásico plataformas en 2D. Después viene pensar un poco en la mecánica del juego, es decir, en qué consite. Para este juego la idea es tener un nivel con varias plataformas, obviamente, enemigos estáticos y dinámicos, collectables, y salidas. Se trata de recoger todos los collectables y encontrar la salida, avanzando entre las plataformas y evitando a los enemigos. Hasta el momento todo fácil.

En Godot, la mayoría de las cosas que vayas a ver en el videojuego son escenas. Las escenas se componen combinando nodos de varios tipos y la lógica de la escena se define mediante scripts.

El mundo

Esta es la escena principal, que va a contener, un fondo, las plataformas y a la que luego añadiremos el resto de los elementos.

El jugador

Se trata de un nodo tipo CharacterBody2D, que le permite interaccionar con las físicas del juego, como la gravedad. Le he añadido un nodo AnimatedSprite2D, con las animaciones del movimiento y un CollisionShape2D, que le permitirá chocar con algunas de las cosas, por ejemplo, con el suelo.

Para facilitar el manejo le he añadido una máquina de estados que encontré mirando tutoriales. Esta máquina permite definir estados en los que se encuentra el personaje, de modo que solo puede estar en uno de ellos en cada momento. A su vez, se definen los eventos que determinan el cambio de estado. Aunque suena lioso y para este juego puede ser incluso demasiado, he preferido implementarla para ir aprendiendo un poco cómo funcionan y, la verdad, es que creo que merece la pena el esfuerzo.

Los collectables

Se trata de las cosas que puedes recoger para obtener puntos, un poco al estilo de las monedas en los juegos de Sonic. En mi caso he optado por que sean frutas. La primera que he utilizado, porque tenía un sprite a mano, es la cereza.

Estas cerezas aparecen flotando en determinados lugares del mapa y solo interaccionan con el jugador. No están sujetas a la gravedad ni pueden chocar con nada. Para definirlas uso un Area2D, con un AnimatedSprite2D, para la animación y una CollisionShape2D para la forma.

Los enemigos

Patrulleros

Son una especie de guardianes que patrullan por las diferentes plataformas. No pueden bajarse de ellas. Su único peligro es que al chocar con ellos pierdes puntos de vida.

Cañón

Cuando detecta la presencia del jugador comienza a disparar

Trampas

Final

De nuevo, aparecerá flotando en algún punto del mapa y solo interaccionará con el jugador.

Puedes compartir el enlace si te gustó: Desarrollando un juego con Godot

También puedes dejarme un mensaje:





(Esto funciona gracias a Un-static Forms)