Chocar y reiniciar
Parte de la sección Proyectos del Journey de Godot de Coddy. Lección 18 de 33.
La nave vuela entre rocas. Una roca que toque la nave debería terminar el juego. En _on_body_entered de rock.gd, la nave es el cuerpo llamado Ship. La roca emite una señal hit_ship. main.gd la conecta en spawn_rock y termina el juego:
func _on_hit_ship():
$HUD/Message.text = "Game Over"
$Ship.hide()
$Boom.position = $Ship.position
$Boom.emitting = true
get_tree().paused = trueBoom es un CPUParticles2D de una sola emisión. Establece emitting en true y estalla una vez. Es hijo de Main, que está en modo Always, así que se reproduce mientras el juego está en pausa.
Por último, permite que Enter inicie una partida nueva mientras está en pausa, como en Breakout: reanuda el juego y después ejecuta reload_current_scene(). También funciona después de ganar.
Desafío
Intermedio- En
rock.gd, agregasignal hit_shipy emítela cuando el cuerpo sea elShip. - En
main.gd, conéctala enspawn_rocka_on_hit_ship. MuestraGame Over, oculta la nave, hace estallar$Boomdonde estaba la nave y pausa el juego. - Mientras el juego está en pausa, al presionar Enter se reanuda y se vuelve a cargar la escena.
Pruébalo tú mismo
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 lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Proyectos
2Proyecto: Disparador de asteroides
Girar la naveEncender el motorPractica por tu cuenta: Playground de Godot