Zderzenie i restart
Część sekcji Projekty ścieżki Godot w Coddy. Lekcja 18 z 33.
Statek przelatuje przez skały. Skała, która dotknie statku, powinna zakończyć grę. W rock.gd, w funkcji _on_body_entered, 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 efekt CPUParticles2D. Ustaw emitting na true, a efekt wyemituje cząsteczki raz. Jest dzieckiem Main, który ma ustawienie Always, więc efekt odtwarza się, gdy gra jest wstrzymana.
Na koniec spraw, by klawisz Enter rozpoczynał nową grę, gdy gra jest wstrzymana, tak jak w Breakout: wznów grę, a następnie wywołaj reload_current_scene(). Działa to również po wygranej.
Wyzwanie
Średni- W pliku
rock.gddodajsignal hit_shipi emituj ten sygnał, gdy ciało toShip. - W pliku
main.gdpołącz go w funkcjispawn_rockz funkcją_on_hit_ship. Wyświetla ona komunikatGame Over, ukrywa statek, wywołuje eksplozję w miejscu, w którym znajdował się statek, za pomocą$Boomi wstrzymuje grę. - Gdy gra jest wstrzymana, naciśnięcie klawisza Enter wznawia ją i ponownie wczytuje scenę.
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: Asteroidy
Obracanie statkiemUruchamianie silnikaPoćwicz samodzielnie: Edytor online Godot