Contenido del curso
Tu primer juego
Desarrollando el juego
Conclusión
Movimiento del player con GDScript en Godot
Resumen
Programar el movimiento de un personaje en Godot con GDScript es el primer paso para darle vida a tu juego. Aquí aprenderás a leer inputs del teclado, manejar vectores 2D y aplicar la función move_and_slide para desplazar al player hacia arriba y hacia abajo en un Pong clásico.
Cómo creo un script en Godot y lo asocio a una escena
Antes de escribir lógica, necesitas vincular un archivo de código a tu escena. En Godot, las escenas tienen extensión .tscn y los scripts usan la extensión .gd, propia de GDScript.
Desde la escena player, busca el botón que dice añadir un nuevo script o ya existente al nodo seleccionado [01:00]. Al crearlo te pedirá tres datos clave:
- Lenguaje: elige GDScript en lugar de Native o Visual Script.
- Clase de la que hereda: en este caso
KinematicBody2D, porque es el nodo del player. - Plantilla y ruta: deja la plantilla con comentarios o vacía y guarda el archivo en la raíz.
Una convención útil es que el script tenga el mismo nombre que la escena. Si tu escena se llama player, tu archivo será player.gd.
¿Qué es GDScript? Es el lenguaje propio de Godot, con sintaxis basada en indentación muy parecida a Python. No usa punto y coma y declara variables con
vary funciones confunc.
Qué necesita hacer el player y cómo defino su velocidad
En un Pong, el personaje no tiene libertad total: solo sube y baja. Eso simplifica la lógica a dos cosas, velocidad y dirección.
Lo primero es declarar una variable que controle la velocidad en píxeles por segundo [04:30]:
gdscript extends KinematicBody2D
var speed = 400
La palabra extends siempre va en la primera línea de cualquier script, porque incluso un nodo nativo hereda de la clase Node. Aquí estás extendiendo de KinematicBody2D, que es la clase que te da acceso a funciones de movimiento físico.
Por qué uso physics_process en lugar de process
Para mover un cuerpo cinemático conviene usar _physics_process(delta), una función que se ejecuta en cada frame de física [05:10]. El parámetro delta representa el tiempo transcurrido entre frames y lo usarás más adelante para suavizar movimientos.
Dentro de esa función defines la dirección con un Vector2, que es un vector en 2D con coordenadas X e Y. La constante Vector2.ZERO equivale a Vector2(0, 0) y mantiene al personaje quieto como estado inicial.
gdscript func _physics_process(delta): var direction = Vector2.ZERO
Cómo leo inputs del teclado para mover al personaje
Godot expone un objeto global llamado Input que centraliza todo lo que el jugador presiona: teclas, duración, combinaciones. La función Input.is_action_pressed() devuelve true mientras una acción esté presionada.
Las acciones como ui_up y ui_down ya vienen mapeadas por defecto en Proyecto, Configuración del proyecto, Mapa de entradas [07:00]. Allí puedes ver que ui_up está vinculada a la flecha hacia arriba, y si quieres puedes agregar la tecla W para que dispare la misma acción.
El movimiento vertical funciona al revés de lo intuitivo: en pantalla, los valores negativos en Y van hacia arriba y los positivos hacia abajo. Por eso restas para subir y sumas para bajar.
gdscript if Input.is_action_pressed("ui_up"): direction.y -= 1 if Input.is_action_pressed("ui_down"): direction.y += 1
El operador -= es azúcar sintáctico: direction.y -= 1 equivale a direction.y = direction.y - 1, solo que se lee mejor.
¿Qué hace Input.is_action_pressed? Devuelve verdadero mientras la tecla asociada a esa acción siga presionada, lo que permite movimiento continuo en lugar de un solo pulso.
Cómo aplico move_and_slide para desplazar al player
Tener una dirección no es suficiente: necesitas que el cuerpo se desplace de verdad. Para eso KinematicBody2D ofrece move_and_slide(), que mueve el nodo y lo desliza si encuentra obstáculos en el camino [10:30].
Esta función recibe un vector que combina dirección y velocidad:
gdscript move_and_slide(direction * speed)
Multiplicar direction por speed significa que el player se moverá 400 píxeles en la dirección indicada por las teclas. Existe también move_and_collide, que detiene el movimiento al primer choque, pero para este Pong move_and_slide es la opción correcta.
Resultado final del script player.gd
El script completo queda así:
gdscript extends KinematicBody2D
var speed = 400
func _physics_process(delta): var direction = Vector2.ZERO if Input.is_action_pressed("ui_up"): direction.y -= 1 if Input.is_action_pressed("ui_down"): direction.y += 1 move_and_slide(direction * speed)
Guarda los cambios, dale play a la escena principal y prueba las flechas. Tu personaje ya sube y baja respondiendo al teclado.
Si te interesa profundizar en la sintaxis, revisa el curso inicial de Python en Platzi y la documentación oficial de GDScript para ver operadores y palabras reservadas con más detalle. ¿Lograste mover tu player? Comparte un screenshot o tu repositorio en los comentarios.