Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
En esta lección, aprenderemos a desarrollar un juego de galería de tiro en 2D utilizando Godot. Crearemos una escena en la que los jugadores puedan disparar a objetivos en movimiento y acumular puntos según su precisión. Aprenderemos a manejar nodos 2D, detectar colisiones y gestionar la lógica del juego con GDScript.
Paso 1: Creación de la Escena Principal
- Abrimos Godot y creamos un nuevo proyecto 2D.
- En la jerarquía de nodos, agregamos un Node2D como nodo principal y lo renombramos a
EscenaJuego
. - Agregamos un Sprite2D como fondo del juego:
- Añadimos una imagen de fondo arrastrándola a la textura del
Sprite2D
. - Ajustamos el tamaño para cubrir toda la pantalla.
- Añadimos una imagen de fondo arrastrándola a la textura del
Paso 2: Creación de los Objetivos
- Creamos un nuevo Scene2D y lo llamamos
Objetivo
. - Agregamos los siguientes nodos:
- Sprite2D: Para representar la imagen del objetivo.
- CollisionShape2D: Para detectar impactos, con una forma adecuada al sprite.
- Area2D: Para detectar colisiones con el disparo.
- Guardamos la escena y la instanciamos varias veces en
EscenaJuego
. - En el script del objetivo (
objetivo.gd
), agregamos código para que el objetivo se mueva de lado a lado:
extends Area2D
var velocidad = 100
var direccion = 1
func _process(delta):
position.x += velocidad * direccion * delta
if position.x > 600 or position.x < 0:
direccion *= -1
Paso 3: Creación del Disparo
- Creamos un nuevo
Scene2D
y lo llamamosDisparo
. - Agregamos:
- Sprite2D: Para representar el proyectil.
- CollisionShape2D: Para detectar colisiones.
- Area2D: Para gestionar los impactos.
- En
disparo.gd
, escribimos la lógica para mover el proyectil:
extends Area2D
var velocidad = 500
func _process(delta):
position.y -= velocidad * delta
if position.y < 0:
queue_free()
4. En EscenaJuego
, agregamos un Sprite2D
como puntería y un script para disparar cuando el jugador haga clic:
extends Node2D
@onready var punteria = $Punteria
@onready var escena_disparo = preload("res://Disparo.tscn")
func _process(delta):
punteria.position = get_global_mouse_position()
func _input(event):
if event is InputEventMouseButton and event.pressed:
var nuevo_disparo = escena_disparo.instantiate()
nuevo_disparo.position = punteria.position
add_child(nuevo_disparo)
Paso 4: Detectar Impactos y Gestionar Puntuaciones
1. En el script del objetivo, agregamos detección de impacto:
func _on_area_entered(area):
if area.is_in_group("disparos"):
queue_free()
2. En disparo.gd
, agregamos el proyectil a un grupo:
func _ready():
add_to_group("disparos")
3. Creamos una variable global de puntuación y la incrementamos al acertar un objetivo:
var puntuacion = 0
func _on_area_entered(area):
if area.is_in_group("disparos"):
puntuacion += 10
queue_free()
Conclusión
Hemos creado un juego de galería de tiro funcional en Godot. Ahora puedes mejorar la jugabilidad añadiendo niveles, efectos de sonido o animaciones. ¡Experimenta y haz tu versión personalizada!