Galería de tiro

Galería de tiro

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

  1. Abrimos Godot y creamos un nuevo proyecto 2D.
  2. En la jerarquía de nodos, agregamos un Node2D como nodo principal y lo renombramos a EscenaJuego.
  3. 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.

Paso 2: Creación de los Objetivos

  1. Creamos un nuevo Scene2D y lo llamamos Objetivo.
  2. 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.
  3. Guardamos la escena y la instanciamos varias veces en EscenaJuego.
  4. 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

  1. Creamos un nuevo Scene2D y lo llamamos Disparo.
  2. Agregamos:
    • Sprite2D: Para representar el proyectil.
    • CollisionShape2D: Para detectar colisiones.
    • Area2D: Para gestionar los impactos.
  3. 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!

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.