Paredes y arcos con nodos 2D en Godot

Resumen

Construir el escenario de un juego tipo Pong en Godot empieza por definir bien los límites: paredes que rebotan la pelota y arcos que detectan goles. Aquí vas a aprender a montar la escena principal en Godot, configurar nodos StaticBody2D y Area2D, y dimensionar las colisiones para un canvas de 1920x1080. Es contenido pensado para quien arranca en desarrollo de videojuegos 2D y quiere entender el árbol de nodos desde la práctica.

¿Cómo se crea la escena raíz en Godot?

Antes de modelar paredes y arcos, necesitas una escena base que contenga todo el nivel. Godot te ofrece plantillas de inicio según el tipo de proyecto.

Al abrir el proyecto en blanco vas a ver cuatro opciones de escena raíz:

  • Escena 2D, ideal para juegos en dos dimensiones.
  • Escena 3D, para proyectos tridimensionales.
  • Interfaz de usuario, útil para head-up display y menús.
  • Otro nodo, si quieres partir de un nodo específico de la lista.

Para este proyecto eliges Escena 2D y le cambias el nombre haciendo doble clic. Le pones Level porque va a contener todo el nivel del juego [00:53]. Renombrar nodos desde el inicio te ahorra confusiones cuando el árbol crece.

¿Qué es una escena raíz en Godot? Es el nodo principal que agrupa todos los demás nodos de tu nivel o pantalla. Funciona como contenedor padre y define el tipo de espacio (2D, 3D o UI) en el que vas a trabajar.

¿Cuándo usar StaticBody2D para paredes?

Las paredes superior e inferior necesitan ser sólidas: la pelota tiene que rebotar contra ellas y nunca moverse de su lugar. Para eso existe el nodo StaticBody2D.

En la jerarquía de Godot, el StaticBody2D hereda de Node2D, pasa por CollisionObject, luego por PhysicsBody y finalmente llega a su definición [02:13]. Sirve para suelos, paredes y cualquier elemento estático que enmarca la escena.

¿Por qué necesita un CollisionShape2D?

Al agregar el StaticBody2D aparece una advertencia: requiere un CollisionShape. La colisión es el espacio físico que define dónde otros objetos pueden chocar con ese nodo. Sin ella, la pared no existe para el motor de físicas.

Dentro del StaticBody2D agregas un CollisionShape2D y en el inspector eliges la propiedad Shape. Tienes opciones como cápsula, círculo, líneas y rectángulo. Para una pared horizontal seleccionas RectangleShape2D.

¿Cómo dimensionar la pared superior a 1920 píxeles?

El escenario mide 1920x1080. El truco está en que los shapes extienden su tamaño hacia ambos lados desde el centro, así que el valor de extents debe ser la mitad del tamaño real que quieres.

Godot permite hacer cuentas dentro de los campos numéricos. En el eje X escribes 1920/2 y al dar enter se convierte en 960 [04:23]. Esto te da una pared de 1920 píxeles de ancho. Para el grosor visible le pones 50 en el eje Y.

Luego ajustas la posición en Transform:

  • Position X: 960, para que el centro coincida con la mitad horizontal del escenario.
  • Position Y: -50, para que la pared quede justo sobre el borde superior, no dentro del área de juego.

Renombras el nodo como ParedSuperior, lo duplicas, lo llamas ParedInferior y solo cambias la posición Y a 1030 (1080 menos los 50 de extensión).

¿Qué diferencia hay entre Area2D y StaticBody2D?

Los arcos no funcionan como paredes. La pelota no debe rebotar contra ellos: debe atravesarlos para que se marque un gol. Aquí entra el nodo Area2D.

Un Area2D marca un espacio con su propio CollisionShape, pero no es físico. No genera rebotes ni bloquea objetos. Lo que hace es detectar cuando otro nodo entra, sale o se superpone con su área [05:54]. Perfecto para zonas de gol, triggers, sensores o pickups.

¿Para qué sirve un Area2D en Godot? Sirve para detectar interacciones sin generar colisiones físicas. Lo usas cuando necesitas saber que un objeto entró a una zona, pero no quieres que rebote ni se detenga.

¿Cómo configurar los arcos del jugador y el oponente?

Agregas un Area2D como hijo del nodo Level y dentro un CollisionShape2D con forma rectangular vertical. Las medidas se invierten respecto a las paredes:

  • Shape extents X: 50, para el grosor.
  • Shape extents Y: 1080/2, que da 540 y produce una altura total de 1080.
  • Position X: -50, para que quede pegado al borde izquierdo por fuera del escenario.
  • Position Y: 540, que es la mitad vertical del escenario.

Un detalle del eje Y en Godot: a diferencia del plano cartesiano tradicional, los valores crecen hacia abajo y hacia la derecha, y decrecen hacia arriba e izquierda. El punto cero está en la esquina superior izquierda [07:30]. Tenerlo claro evita errores al posicionar elementos.

Nombras este nodo ArcoPlayer, lo duplicas y al duplicado lo llamas ArcoOponente. La única diferencia es la posición X, que pasa a 1970 (1920 más los 50 de margen). Position Y se mantiene en 540.

¿Cómo guardar y ejecutar la escena principal?

Con las cuatro colisiones listas (dos paredes y dos arcos), das play al juego. Godot te avisa que no hay escena actual seleccionada. El flujo correcto es:

  1. Guardar la escena con Control+S o Command+S.
  2. Aceptar la ruta y nombre por defecto: level con extensión de escenas de Godot.
  3. Volver a dar play y elegir esta escena como principal del proyecto.

Se abre la ventana de ejecución mostrando solo el fondo, porque todavía no hay personajes ni pelota. Pero el marco del escenario en Godot ya está armado: paredes que rebotarán y arcos que detectarán goles.

Deja en los comentarios una captura de cómo se ven tus nodos y colisiones en pantalla para comparar configuraciones con otros estudiantes.