Colisão e reinício
Parte da seção Projetos do Journey de Godot da Coddy. Lição 18 de 33.
A nave voa entre as rochas. Uma rocha que tocar na nave deve encerrar o jogo. Em rock.gd, dentro de _on_body_entered, a nave é o corpo chamado Ship. A rocha emite um sinal hit_ship. main.gd conecta esse sinal em spawn_rock e encerra o jogo:
func _on_hit_ship():
$HUD/Message.text = "Game Over"
$Ship.hide()
$Boom.position = $Ship.position
$Boom.emitting = true
get_tree().paused = trueBoom é um CPUParticles2D de execução única. Defina emitting como true para que ele exploda uma vez. Ele é filho de Main, que está configurado como Always, então é executado enquanto o jogo está pausado.
Por fim, faça Enter iniciar um novo jogo enquanto estiver pausado, como em Breakout: retome o jogo e, em seguida, execute reload_current_scene(). Isso também funciona depois de uma vitória.
Desafio
Médio- Em
rock.gd, adicionesignal hit_shipe emita-o quando o corpo for oShip. - Em
main.gd, conecte-o emspawn_rocka_on_hit_ship. Isso exibeGame Over, oculta a nave, ativa a explosão de$Boomonde a nave estava e pausa o jogo. - Enquanto o jogo estiver pausado, pressione Enter para despausar e recarregar a cena.
Experimente você mesmo
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
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Projetos
1Projeto: Breakout
Raquete do BreakoutMantenha a raquete na tela4Projeto: Explorador de Masmorras
Percorra a masmorraPegue a chave2Projeto: Jogo de Tiro com Asteroides
Gire a naveAcione o motorPratique por conta própria: Playground de Godot