Wynik i zwycięstwo
Część sekcji Projekty ścieżki Godot w Coddy. Lekcja 20 z 36.
Duży kamień jest wart 20 punktów, a mały 50. _on_rock_broken zna rozmiar, więc dodaje punkty i aktualizuje $HUD/Score.
Wygrywasz, gdy nie zostanie już żaden kamień. Zacznij liczenie od 4. Odejmuj jeden za każdy rozbity kamień, a gdy duży kamień rozpadnie się na mniejsze, dodaj dwa:
if rock.size == 2:
rocks_left += 2
rocks_left -= 1
if rocks_left == 0:
$HUD/Message.text = "You win!"
get_tree().paused = truePolicz tutaj dwa nowe kamienie, a nie w spawn_rock. spawn_rock wykonuje się na końcu klatki, więc licznik osiągnąłby zero, zanim pojawiłyby się dwa ostatnie małe kamienie.
Kamienie, pociski i statek mają ustawienie Pausable. Main ma ustawienie Always.
Wyzwanie
TrudnyZdobywaj punkty za rozbijanie skał i wygraj, gdy wszystkie znikną.
- W pliku
main.gddodajvar score = 0i wyświetlScore: 0. - Rozbicie dużej skały dodaje 20 punktów, a małej — 50. Wyświetl wynik.
- Dodaj
var rocks_left = 4. Odejmuj 1 za każdą rozbitą skałę, a gdy duża skała się rozpadnie, dodaj 2. Gdy liczba wyniesie 0, wyświetl „You win!” i wstrzymaj grę.
Naciśnij „Graj” i zniszcz wszystkie skały: pojawi się komunikat „You win!”. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
extends Node2D
const ROCK = preload("res://rock.tscn")
func _ready():
for i in 4:
spawn_rock(Vector2(randf_range(0, 640), 0), Vector2(randf_range(-90, 90), randf_range(40, 90)), 2)
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)
Wszystkie lekcje w sekcji Projekty
2Projekt: Strzelanka z asteroidami
Obróć statekUruchom silnikPoćwicz samodzielnie: Edytor online Godot