Menu
CoddyTech

Schiantarsi e ricominciare

Fa parte della sezione Progetti del percorso Godot di Coddy. Lezione 18 di 33.

La nave vola tra le rocce. Una roccia che tocca la nave dovrebbe terminare la partita. In rock.gd, nel metodo _on_body_entered, la nave è il corpo chiamato Ship. La roccia emette un segnale hit_ship. main.gd lo collega in spawn_rock e termina la partita:

func _on_hit_ship():
	$HUD/Message.text = "Game Over"
	$Ship.hide()
	$Boom.position = $Ship.position
	$Boom.emitting = true
	get_tree().paused = true

Boom è un CPUParticles2D a colpo singolo. Imposta emitting su true e genera un'esplosione. È figlio di Main, che è Always, quindi continua a funzionare mentre la partita è in pausa.

Infine, fai in modo che Enter avvii una nuova partita mentre il gioco è in pausa, come in Breakout: togli la pausa, poi chiama reload_current_scene(). Funziona anche dopo una vittoria.

challenge icon

Sfida

Medio
  1. In rock.gd, aggiungi signal hit_ship ed emettilo quando il corpo è Ship.
  2. In main.gd, collegalo in spawn_rock a _on_hit_ship. Mostra Game Over, nasconde la nave, fa esplodere $Boom nel punto in cui si trovava la nave e mette in pausa il gioco.
  3. Quando il gioco è in pausa, premendo Invio lo si riattiva e si ricarica la scena.

Provalo tu

extends Node2D

const ROCK = preload("res://rock.tscn")

var score = 0
var rocks_left = 4

func _ready():
	for i in 4:
		spawn_rock(Vector2(randf_range(0, 640), 0), Vector2(randf_range(-90, 90), randf_range(40, 90)), 2)
	$HUD/Score.text = "Score: 0"

func spawn_rock(where, velocity, size):
	var rock = ROCK.instantiate()
	rock.position = where
	rock.velocity = velocity
	rock.size = size
	rock.broken.connect(_on_rock_broken)
	add_child(rock)

func _on_rock_broken(rock):
	if rock.size == 2:
		spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5, 1)
		spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5, 1)
		score += 20
		rocks_left += 2
	else:
		score += 50
	rocks_left -= 1
	$HUD/Score.text = "Score: %d" % score
	if rocks_left == 0:
		$HUD/Message.text = "You Win!"
		get_tree().paused = true
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Progetti

Esercitati da solo: Playground Godot