Desarrollo de juegos con Godot 🤖

Skip to content

¡Este es un texto traducido por máquina que puede contener errores!

¿De dónde proviene esta información?

Mucho de esto es solo una reformulación de la documentación oficial de Godot. Abajo encontrarán algunos enlaces útiles a la documentación oficial (que prefiero recomendar sobre esta en Piggy, pero si prefieren esta, ¡úsensela!)

Recursos útiles:

¿Qué hay del gráfico, ¿tengo que crearlo yo mismo?

¡No! Podéis encontrar muchos recursos gratuitos aquí:

Otros enlaces útiles:

¿Otros motores de juego?

Si lo prefieres, puedes usar otros motores de juego. Ejemplos de otros motores de juego son:

¡Hay muchos otros también, busca si quieres probar algo diferente!

¿Qué es Godot?

Godot (Se pronuncia Guh-doh), es un ‘Game Engine’. Para decirlo simplemente, es un programa que te permite crear juegos (o programas convencionales si quieres). Godot puede hacer casi todo lo que pueden hacer otros game engines, tanto 2D como 3D.

Ejemplos de juegos creados en Godot: Godot Showcase

No solo juegos Indie han sido creados en Godot, Sonic Colors Ultimate está hecho con Godot!

¿Cómo obtienes Godot?

Puedes descargar Godot desde:

Simplemente descarga e instala (o ejecuta en steam).

¡Configura un proyecto!

Al iniciar Godot, aparece esta ventana:

Godot Proyecto

Aquí te preguntan por el lenguaje de programación, GDScript o C#. GDScript es muy similar a Python.

Diferencias entre GDScript y Python (sin colores):

def hello():
    text = "Hello world!"

    print(text)
func hello():
    var text = "Hello world!"

    print(text)

Para variables en Python solo necesitas escribir el nombre de la variable. En GDScript debes escribir var primero. Para crear funciones escribes func en lugar de def.

Escenas y Nodos

Uno de los conceptos más importantes en Godot son las Escenas y los Nodos. Podemos empezar con los nodos. Un nodo es un objeto en Godot, y puede representar cualquier cosa. Puede ser algo que represente a un jugador, un enemigo, un botón en un menú, texto en la pantalla, cualquier cosa. Las escenas son una colección de nodos.

Aquí vamos a crear un ejemplo muy sencillo.

Del 1a - Configurar la escena “player”

En la parte superior de la ventana de Godot, presione el botón “2D” para cambiar la vista a una vista 2D.

En el lado izquierdo de la ventana, verán la siguiente interfaz:

Create Scene

Presione el botón “Other Node” y busque “CharacterBody2D”, selecciónelo y presione “Create”. Este es un nodo que se utiliza para un jugador 2D. Quizás noten que hay un triángulo de advertencia ⚠️ junto al nodo “CharacterBody2D”. Esto se debe a que le faltan algunas cosas que le gustaría tener.

Si hace clic derecho en el nodo, hay un botón “+ Add Child Node…”. Utilice este y agregue dos nodos, Sprite2D y CollisionShape2D. Sprite2D se utiliza para agregar gráficos al jugador, mientras que el otro se utiliza para verificar las colisiones. También puede darles nombres si eso facilita el seguimiento de las cosas. Le he dado a mi CharacterBody2D el nombre “Player”. Así es como debería verse la escena ahora:

Scene currently

Del 1b - Arreglar ⚠️ en CollisionShape2D

El triángulo de advertencia en este caso es que la CollisionShape2D carece de colisión real. Puedes arreglar esto pulsando el nodo (a la izquierda), entonces aparecerá un panel a la derecha. Aquí obtendrás una gran cantidad de información sobre el nodo que puedes modificar. Siéntete libre de experimentar con lo que hay allí. Pero el que queremos enfocar es “Shape”, establece esto a, por ejemplo, RectangleShape2D. No es muy importante, no vamos a usar las colisiones aquí.

Del 1c - Añadir un Sprite, gráfico

Si haces clic en Sprite2D a la izquierda, aparece el campo a la derecha donde dice “Texture”. Aquí puedes introducir una imagen para el jugador. Solo tienes que arrastrar una imagen y soltarla en el campo.

Así se verá después de haber añadido un sprite.

Sprite menu

Parte 2 - Añadir entrada, controlar

En la parte superior de la ventana hay un menú, “Escena - Proyecto - Depurar - Editor - Ayuda”. Pulsa en “Proyecto” y luego en “Configuración del Proyecto”. Aquí aparece un menú con muchas configuraciones. Pulsa en “Mapa de Entrada”. Aquí pueden configurar los botones del teclado.

  • En el campo “Añadir Nueva Acción”, escribe “izquierda” y luego pulsa “Añadir”.
  • Después, añade “derecha”, “arriba” y “abajo”.
  • Estos se conocen como “Acciones”
  • En cada “Acción” pueden añadir botones pulsando el botón + a la derecha.

Botón más

  • Aquí solo hay que pulsar el teclado y luego pulsar Añadir.
  • Añade botones a todas las acciones.

Del 3 - Añadir un script para controlar al jugador.

Para poder añadir lógica de juego, es decir, hacer algo con el jugador, el fondo, o lo que sea en el juego, necesitamos un script. Los scripts son código, y se pueden escribir en dos lenguajes, GDScript o C#, GDScript es el predeterminado.

  • Pulsa en el nodo “CharacterBody2D” (yo lo he llamado “Player”).
  • Pulsa el botón “Attach Script” (ver abajo)

Attach script button

  • Aquí aparecerá una ventana donde puedes elegir el lenguaje (elige GDScript) y una ruta (simplemente deja que se llame como está, pero puedes darle un nombre), también pulsa continuar. Aquí aparecerá una ventana de “Script”. No hay mucho aquí para empezar.

extends CharacterBody2D
# Definerer hastigheten til karakteren
# Defines the character's speed
var speed = 200

El único propósito de este código por el momento es que el código pertenezca a un nodo del tipo “CharacterBody2D”, que es nuestro jugador.

Vamos a añadir una función aquí que usaremos para manipular al jugador:

extends CharacterBody2D

func _physics_process(delta: float) -> void:
   # return
   # returnerer

Proceso Físico?

_physics_process es una función que se actualiza en cada “frame”, es decir, alrededor de 60 veces por segundo (por defecto). Existe otra función que simplemente se llama _process, que se actualiza en todo momento. Si quieres que el jugador se mueva a un ritmo constante, usa _physics_process.

Aquí es donde vamos a añadir código que mueve al jugador.

Parte 4 - Entrada básica

En la parte 2 añadiste botones de entrada, ahora vamos a usarlos. Existe un objeto integrado llamado Input que podemos usar para comprobar si el jugador ha pulsado lo que hemos configurado en “Mapa de Entrada”.

Prueba a incluir este código en el código _physics_process:

if Input.is_action_pressed('right'):
   # Hvis høyre tasten trykkes, sett x-hastigheten til 100
   # Si la tecla derecha se presiona, establece la velocidad x a 100
   velocity.x = 100

move_and_slide()

¿Qué es move_and_slide()?

move_and_slide() es una función integrada en Godot que se utiliza cuando queremos mover realmente aquello en lo que la aplicamos. Sin ella, el jugador no se moverá.

Warning

Los espacios en las líneas son muy importantes, esto es similar a como en Python.

¿Qué sucede cuando inicias el programa al presionar el botón de reproducir en la ventana de Godot, luego presionas “right”?

Si nada sucede ahora:

  • ¿Has recordado configurar algo en “Input Map”?
  • ¿Has escrito right y no Right? Es decir, ¿lo que escribiste en el código es lo mismo que el nombre en el mapa de entrada?

Todo el código hasta ahora
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100

    move_and_slide()

Ahora intenta añadir código para 'left', 'up', 'down'.

¿Qué debe ser velocity.x para left? ¿Y para up y down?

Todo el código ahora
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

Parte 5 - Arreglar el código

Quizás notéis que el jugador no se detiene cuando soltáis una dirección. ¡Podemos arreglar eso ahora!

Antes de todos los if, añadid una línea que establezca la velocidad a 0. Podéis hacerlo escribiendo velocity = Vector2()

Todas las velocidades y direcciones en Godot son vectores, este es un concepto matemático en el que no vamos a profundizar ahora, pero si queréis saber más sobre lo que significa, podéis ir aquí: Wikipedia vectors.

Todo el código ahora
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    velovity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

Cuando empiezas el juego ahora puedes mover al jugador:

Además, puedes arreglar el código para que la velocidad no sea solo un número, sino que pueda guardarse en otro lugar.

Puedes, por ejemplo (antes de la función), añadir una constante que controle la velocidad.

Todo el código al final con const
extends CharacterBody2D

const SPEED = 100

func _physics_process(delta: float) -> void:
    velovity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = SPEED
    if Input.is_action_pressed('left'):
        velocity.x = -SPEED
    if Input.is_action_pressed('down'):
        velocity.y = SPEED
    if Input.is_action_pressed('up'):
        velocity.y = -SPEED

    move_and_slide()

Parte 6 - ¡Juega por tu cuenta!

Si vuelves a la primera parte, Recursos Útiles, puedes encontrar qué puedes seguir explorando.

Después de esto, puedes intentar crear tu propio juego. ¡Lo que crees depende de ti! Si quieres crear algo completamente nuevo, ¡hazlo! Si quieres intentar imitar un juego que ya existe, ¡hazlo! La mejor manera de aprender es intentándolo.