Antimundo logo

Antimundo

Te enseño a hacer el juego mas absurdamente simple que puedes hacer en Godot

02 / 10 / 2024

En este tutorial haremos uno de los juegos mas sencillos que se pueden crear con Godot.

Tendremos dos botones, uno con el que sumar vidas, otro con el que restarlas, y en caso de que nos quedemos sin vidas el juego dirá “has perdido”.

El objetivo de este tutorial es aprender las claves de Godot sin abrumar con demasiada información.

Este tutorial también está disponible en YouTube:

Parte 1. Descargar Godot y crear un proyecto

Lo primero que debemos hacer es descargar Godot.

Para este tutorial usaré la versión de Godot 4.3 pero vamos a hacer algo tan sencillo que podrás replicarlo sin problemas en las futuras versiones de Godot.

Al abrir Godot veremos el Project Manager, aquí podemos gestionar nuestros distintos proyectos.

Aviso antes de empezar, que en este tutorial tendré la interfaz de Godot en inglés. Para cambiar el idioma pulsa en los ajustes y selecciona el idioma que quieras usar.

Cambiar el idioma en el Project Manager de Godot

Empezaremos creando un nuevo nuevo proyecto en Godot pulsando el botón create.

Project manager de Godot

Después tendremos una pantalla donde indicaremos el nombre del proyecto, y en qué parte de nuestro ordenador queremos guardarlo. Estas opciones se pueden cambiar mas adelante si quieres, ahora creamos el proyecto pulsando Create & Edit.

Crear un nuevo proyecto en el Project Manager de Godot

Parte 2. Creando la escena principal

Ahora vemos un proyecto de Godot vacío.

UI de Godot

  1. En la parte de arriba de la interfaz podemos cambiar el espacio de trabajo, por defecto en Godot es el 3D, pero vamos a movernos al espacio de trabajo 2D.
  2. En medio de la pantalla vemos la escena actual del juego.
  3. En el panel de Scene gestionaremos las escenas del juego, ahora mismo no existe ninguna escena y Godot nos pide que creemos una.
    Las escenas pueden ser de muchos tipos, por ejemplo usaríamos una escena 3D si nuestro juego fuese 3D, pero como nuestro juego se compone de botones y texto, crearemos una de tipo User Interface.
    Guardemos la escena que acabamos de crear pulsando CTRL + S, voy a llamar al archivo game.tscn
  4. En el panel de FileSystem podemos ver el archivo game.tscn que acabamos de crear.
  5. En el panel de Inspector podemos ver las propiedades de todos lo que hay en nuestro proyecto.
  6. En la parte de arriba a la derecha, hay unos botones para ejecutar nuestro proyecto ¡Pulsa y verás como se ejecuta el proyecto!

UI de Godot

Parte 3. Creando la interfaz

Ahora vamos a añadir los elementos de la interfaz de usuario.

En Godot todos los elementos son un Nodo, para este proyecto usaremos nodos Button para los botones de añadir y eliminar vidas, y un nodo Label para el texto que cuenta las vidas. Pero hay muchos mas tipos de nodos, por ejemplo, si quisiésemos añadir sonido lo haríamos con un nodo AudioStreamPlayer

Explicación de los nodos de una escena

Vamos a añadir nodos a nuestra escena pulsando en Add child node.

Añadir un nodo hijo

Ahora tenemos que seleccionar de qué tipo de nodo queremos. Vamos a hacer este proceso de añadir nodos para añadir dos nodos tipo Button y uno de tipo Label.

Crear un nodo

Puedes cambiar el nombre de los nodos que has creado pulsando F2 o haciendo click derecho y pulsando Rename.

Finalmente tenemos algo así, nuestros dos botones, y el texto:

Nodos de la escena

Vamos a colocar estos elementos, empezemos poniendo el texto de los botones, haciendo click en cada nodo de botón, y cambiando el Text en el panel de Inspector.

Cambiar texto del botón

De la misma forma, vamos a cambiar el Text en el Label que cuenta las vidas y vamos a poner “0”. También vamos a cambiar el tamaño del texto en Theme Overrides > Font Sizes > Font Size, yo lo voy a poner a 64px.

Luego vamos a seleccionar cada nodo, y a usar la herramienta de selección para situar estos elementos en su sitio.

Cambiar posición del botón

Y con esto deberíamos tener ya la interfaz terminada, podemos ejecutar el proyecto y verla, aunque lógicamente aún no hace nada.

Cambiar texto del botón

Parte 4. Añadiendo un script

Vamos a programar un código que haga que el juego funcione, para ello vamos a añadir un script.

Todos los nodos pueden tener un script, en este caso añadiremos un script al nodo raíz, pulsando sobre este, y luego sobre el botón con un icono de un pergamino.

Añadir script

Al añadirlo se nos abrirá el espacio de trabajo de Script, siempre que quieras puedes cambiar entre este espacio de trabajo y el de 2D

Señales

Por defecto, el código estará vacío. Vamos a añadir algo:

extends Control

func _ready() -> void:
	print("Hola mundo")

La función _ready() se ejecuta en cuanto este nodo está cargado, así que si ejecutamos el juego ahora, nada mas cargue podremos ver que en la consola aparecerá el mensaje “Hola mundo”.

Señales

Ahora crear una variable que vamos a llamar vidas que va a empezar siendo el número 5. Si ejecutamos el siguiente código, en la consola aparecerá el mensaje “5”.

extends Control

var vidas = 5

func _ready() -> void:
	print(vidas)

Ahora vamos a incrementar el número de vidas con vidas += 1. Si ejecutamos el siguiente código, en la consola aparecerá el mensaje “6”.

extends Control

var vidas = 5

func _ready() -> void:
	vidas += 1
	print(vidas)

Ahora vamos a meter este código dentro de una función, una función sirve para poder reutilizar código.

Creamos una función llamada aumentar_vidas() que se encargará de aumentar las vidas, y otra función llamada ver_vidas() que se encargará de mostrar las vidas por pantalla.

Las vidas empezarán en 5 que es su valor inicial, y si llamamos a aumentar_vidas() tres veces aumentarán hasta 8.

extends Control

var vidas = 5

func _ready() -> void:
	aumentar_vidas()
	aumentar_vidas()
	aumentar_vidas()

func aumentar_vidas():
	vidas += 1
	ver_vidas()

func ver_vidas():
	print(vidas)

De momento hemos estado viendo todo esto por consola, pero vamos a mostrarlo en la interfaz de usuario que creamos antes.

Para esto necesitamos cambiar la propiedad text del nodo Label, antes lo hemos cambiado desde el inspector, pero ahora debemos cambiarlo desde el código.

  1. necesitamos la ruta para acceder al nodo Label, podemos conseguirla arrastrando el nodo al script, en este caso la ruta es $Label
  2. Tenemos que modificar la propiedad $Label.text, si por ejemplo ponemos $Label.text = "patatas" al ejecutar el código en este Label aparecerá el texto “patatas”.
  3. Asignamos al label el número de vias: $Label.text = str(vidas)
    El $Label.text necesita una cadena de texto, pero vidas es un valor numérico, por eso tenemos que pasar ese número a texto usando str(vidas)
extends Control

var vidas = 5

func _ready() -> void:
	aumentar_vidas()
	aumentar_vidas()
	aumentar_vidas()

func aumentar_vidas():
	vidas += 1
	ver_vidas()

func ver_vidas():
	$Label.text = str(vidas)

Parte 5. Señales

Nuestro juego ya casi está, pero necesitamos que al pulsar un botón, las vidas aumenten o se reduzcan. Para esto, debemos hacer uso de las señales.

Todos los nodos en Godot pueden mandar y recibir señales para comunicarse entre si. En este caso, los botones mandan una señal llamada pressed cuando son pulsados. Necesitamos conectar esa señal a nuestro script para que sepa cuándo lo hemos pulsado.

Señales

Vamos a empezar con el botón ButtonIncrease, al lado del Inspector hay un panel llamado Node. Ahí podemos ver una lista de todas las señales.

Debemos hacer doble click sobre la señal pressed() y conectarla a nuestro script.

Conectar señales

Ahora cuando se pulse el botón, se llamará a esta función llamada _on_button_increase_pressed()

Conectar señales

Vamos a decirle a esta función que cada vez que se llame, ejecute aumentar_vidas()

extends Control

var vidas = 5

func _ready() -> void:
	ver_vidas()

func aumentar_vidas():
	vidas += 1
	ver_vidas()

func ver_vidas():
	$Label.text = str(vidas)

func _on_button_increase_pressed() -> void:
	aumentar_vidas()

Ahora habría que hacer exactamente el mismo proceso con reducir vidas: conectar la señal de pressed, y cuando este botón se pulse llamar a una una función llamada reducir_vidas():

extends Control

var vidas = 5

func _ready() -> void:
	ver_vidas()

func aumentar_vidas():
	vidas += 1
	ver_vidas()

func reducir_vidas():
	vidas -= 1
	ver_vidas()

func ver_vidas():
	$Label.text = str(vidas)

func _on_button_increase_pressed() -> void:
	aumentar_vidas()

func _on_button_reduce_pressed() -> void:
	reducir_vidas()

Ahora solo queda que si las vidas son menores o iguales a 0, en el Label aparezca el texto “Has perdido”

Para eso debemos modificar la función ver_vidas() y ponerle la condición de que si las vidas son 0 o menos, debe aparecer el texto “Has perdido”.

Vamos a usar un condicional if, y decir que if vidas <= 0: entonces debemos asignar el texto “Has perdido”

Vamos a usar else:, para decir que en el caso contrario, que si tengamos vidas, vamos a mostrar las vidas que tenemos como hacíamos hasta ahora.

extends Control

var vidas = 5

func _ready() -> void:
	ver_vidas()

func aumentar_vidas():
	vidas += 1
	ver_vidas()

func reducir_vidas():
	vidas -= 1
	ver_vidas()

func ver_vidas():
	if vidas <= 0:
		$Label.text = "Has perdido"
	else:
		$Label.text = str(vidas)

func _on_button_increase_pressed() -> void:
	aumentar_vidas()

func _on_button_reduce_pressed() -> void:
	reducir_vidas()

Conclusión

Y eso es todo. En este tutorial habrás aprendido a crear un proyecto de Godot, a usar nodos para crear una interfaz de usuario, y usar scripts y señales para añadir añadir funcionalidad al juego.

Antes de avanzar mas, te recomiendo que entiendas bien los conceptos de este vídeo, y si quieres algo un poco mas avanzado te recomiendo visitar la documentación oficial de Godot ya que ahí encontrarás tutoriales y recursos para aprender mas. Y también te recomiendo probar Learn GDScript From Zero, un tutorial interactivo para aprender GDScript, el lenguaje de programación de Godot, que es muy útil, especialemente si quieres aprender a programar.