Abstürzen und neu starten
Teil des Abschnitts Projekte der Godot-Journey von Coddy. Lektion 18 von 33.
Das Schiff fliegt durch Felsen. Ein Felsen, der das Schiff berührt, sollte das Spiel beenden. In rock.gds _on_body_entered ist das Schiff der Körper namens Ship. Der Felsen sendet ein hit_ship-Signal aus. main.gd verbindet es in spawn_rock und beendet das Spiel:
func _on_hit_ship():
$HUD/Message.text = "Game Over"
$Ship.hide()
$Boom.position = $Ship.position
$Boom.emitting = true
get_tree().paused = trueBoom ist ein CPUParticles2D mit einmaliger Auslösung. Setze emitting auf true, und es löst einmal eine Partikelexplosion aus. Es ist ein Kind von Main, dessen Prozessmodus auf Always eingestellt ist, sodass es auch während des pausierten Spiels abgespielt wird.
Zum Schluss soll Enter wie in Breakout ein neues Spiel starten, während das Spiel pausiert ist: Hebe die Pause auf und rufe dann reload_current_scene() auf. Das funktioniert auch nach einem Sieg.
Aufgabe
Mittel- Füge in
rock.gdsignal hit_shiphinzu und löse es aus, wenn der Körper dasShipist. - Verbinde es in
main.gdinspawn_rockmit_on_hit_ship. Dadurch wirdGame Overangezeigt, das Schiff ausgeblendet,$Booman der Stelle ausgelöst, an der sich das Schiff befand, und das Spiel pausiert. - Während das Spiel pausiert ist, hebt die Eingabetaste die Pause auf und lädt die Szene neu.
Probier es selbst
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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Projekte
2Projekt: Asteroiden-Shooter
Das Schiff drehenDen Antrieb zündenÜbe selbstständig: Godot-Playground