Zderzenie i restart
Część sekcji Projekty ścieżki Godot w Coddy. Lekcja 21 z 36.
Statek przelatuje przez skały. Skała, która dotknie statku, powinna zakończyć grę. W _on_body_entered w pliku rock.gd statek jest ciałem o nazwie Ship. Skała emituje sygnał hit_ship. main.gd łączy go w spawn_rock i kończy grę:
func _on_hit_ship():
$HUD/Message.text = "Game Over"
$Ship.hide()
$Boom.position = $Ship.position
$Boom.emitting = true
get_tree().paused = trueBoom to jednorazowy węzeł CPUParticles2D. Ustaw emitting na true, a wyemituje cząsteczki raz. Jest dzieckiem węzła Main, który ma ustawienie Always, więc działa, gdy gra jest wstrzymana.
Na koniec spraw, by Enter rozpoczynał nową grę, gdy jest ona wstrzymana, tak jak w Breakout: wznów grę, a następnie wywołaj reload_current_scene(). Działa to również po wygranej.
Wyzwanie
ŚredniZakończ grę, gdy asteroida uderzy w statek.
- W
rock.gddodajsignal hit_shipi emituj ten sygnał, gdy obiektem jestShip. - W
main.gdpołącz go wspawn_rockz_on_hit_ship, który wyświetlaGame Over, ukrywa statek, wywołuje eksplozję w miejscu, w którym był$Boom, i wstrzymuje grę. - Gdy gra jest wstrzymana, naciśnięcie Enter wznawia ją i ponownie wczytuje scenę.
Naciśnij „Graj” i wleć w asteroidę: statek eksploduje. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
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
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Projekty
2Projekt: Strzelanka z asteroidami
Obróć statekUruchom silnikPoćwicz samodzielnie: Edytor online Godot