Fall Down

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

Iremos pulsando sobre los misiles que caen de la parte superior de la pantalla para explotarlos.

Poner imagen de fondo

1. Creamos una escena de tipo 2D.

2. Colocamos la imagen de fondo. Node 2DCanvas LayerTexture Rext.

Crear un misil que tiene velocidad constante

3. Colocamos un Sprit2D en pantalla al que asociaremos la imagen de un Sprite.

4. Ubicamos el misil sobre la imagen de fondo modificando la propiedad…

5. Asignamos al misil el siguiente código para que caiga con velocidad constante.

extends Sprite2D

func _process(delta):
	position+=Vector2(0, 200)*delta

Crear un misil que cae por gravedad

6. Vamos a crear otro misil, pero este va a caer por gravedad. Para ello creamos un CharacterBody2D en el que anidamos un Sprite2D y un CollisionShape2D.

7. Al CharacterBody2D le asignamos un script utilizando el template CharacterBody2D: Basic Movement. Limpiamos el código generado hasta dejarlo como se muestra a continuación, lo cual hará que el misil caiga por gravedad.

extends CharacterBody2D
@onready var sprite_2d = $Sprite2D

var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")/20

func _physics_process(delta):
	velocity.y += gravity * delta
	move_and_slide() // Esta función ejecuta el resultado de las físicas que hemos definido

8. Añadimos el código que mostrará una traza cuando pulsemos sobre el misil.

func _input(event):
	if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
		if sprite_2d.get_rect().has_point(to_local(event.position)):
			print("clicked")

Vamos a añadir la animación de explosión.

9. Añadimos una nueva escena (ctrl + n) → Other Node → Animated Sprite 2D.

10. Seleccionamos el nodo y en el panel inspector → Animation → Sprite Frames → New Sprite Frames.

11. En el panel SpriteFrames que se muestra, pulsamos en el botón Add frames from sprite sheet (ctrl + shift + o). Seleccionamos la imagen que contiene la spritesheet y marcamos los frames que compondrán la animación de explosión.

Fall Down 1

12. Marcamos Autoplay on Load y desmarcamos Animation Looping.

Fall Down 2

12. Asociamos el siguiente código al Nodo AnimatedSprite2D.

extends AnimatedSprite2D

func _on_animation_finished():
	queue_free() // Esto destruirá la escena

13. Volvemos al código del misile para cambiar la línea que mostraba una traza por el código que instanciará la animación cuando pulsemos sobre el misil.

var i  = explosion_scene.instantiate()
get_parent().add_child(i)
i.global_position = global_position
queue_free()

Instanciar los misiles cada cierto tiempo

14. Añadimos un nodo de tipo Timer a la escena y en el inspector seleccionamos AutoStart.

15. Añadimos el siguiente código a la escena principal para instanciar los misiles en posiciones aleatorias.

extends Node2D
@export var rocket:PackedScene
@onready var timer = $Timer

# Called when the node enters the scene tree for the first time.
func _ready():
	timer.timeout.connect(put_missile)

func put_missile():
	var m = rocket.instantiate()
	add_child(m)
	m.position.x = randf_range(0, get_viewport_rect().size.x)
	m.position.y = -60

16. Podemos hacer que los misiles se instancien cada vez con mayor frecuencia con la siguiente línea:

timer.wait_time = timer.wait_time*0.9

Cargar escena de perder la partida

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