Điểm số và chiến thắng
Thuộc phần Dự án trong hành trình Godot của Coddy. Bài học 20 trên 36.
Một tảng đá lớn đáng giá 20 điểm, còn một tảng nhỏ đáng giá 50 điểm. _on_rock_broken biết kích thước, nên hàm này cộng điểm và cập nhật $HUD/Score.
Bạn thắng khi không còn tảng đá nào. Bắt đầu số đếm từ 4. Trừ đi một cho mỗi tảng đá bị phá vỡ, và cộng thêm hai khi một tảng lớn tách ra:
if rock.size == 2:
rocks_left += 2
rocks_left -= 1
if rocks_left == 0:
$HUD/Message.text = "You win!"
get_tree().paused = trueĐếm hai tảng đá mới ở đây, không phải trong spawn_rock. spawn_rock chạy vào cuối khung hình, nên số đếm sẽ về không trước khi hai tảng đá nhỏ cuối cùng xuất hiện.
Các tảng đá, đạn và tàu đều có thể tạm dừng. Main luôn chạy.
Thử thách
KhóGhi điểm khi phá đá và chiến thắng khi phá hết đá.
- Trong
main.gd, thêmvar score = 0và hiển thịScore: 0. - Phá đá lớn được 20 điểm, đá nhỏ được 50 điểm. Hiển thị điểm số.
- Thêm
var rocks_left = 4. Mỗi khi phá một hòn đá, giảm đi một; khi đá lớn vỡ, tăng thêm hai. Khi số đá còn lại bằng 0, hiển thịYou win!và tạm dừng.
Nhấn Chơi và phá hết đá: thông báo You win! sẽ xuất hiện. Sau đó nhấn Kiểm tra.
Tự làm thử
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)
Tất cả bài học trong Dự án
1Dự án: Breakout
Thanh đỡ trong BreakoutGiữ thanh đỡ trong màn hình4Dự án: trò chơi khám phá hầm ngục
Khám phá hầm ngụcNhặt chìa khóa2Dự án: Trò chơi bắn thiên thạch
Xoay con tàuKhởi động động cơTự luyện tập: Playground Godot