Tảng đá lớn và nhỏ
Thuộc phần Dự án trong hành trình Godot của Coddy. Bài học 19 trên 36.
Chỉ đá lớn mới được tách ra. Gán cho mỗi hòn đá size, giá trị 2 cho đá lớn và 1 cho đá nhỏ, rồi dùng giá trị đó để vẽ trong rock.gd's _ready: scale = Vector2.ONE * size * 0.5.
spawn_rock cũng nhận kích thước. Đặt rock.size trước add_child(rock): _ready chạy bên trong add_child, nên đặt kích thước sau đó sẽ quá muộn để thay đổi tỷ lệ.
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)Đá nhỏ chỉ vỡ ra.
Thử thách
KhóKhiến đá lớn tách ra và đá nhỏ vỡ.
- Trong
rock.gd, thêmvar size = 2và đặtscale = Vector2.ONE * size * 0.5trong_ready. - Thêm tham số
sizechospawn_rockvà đặtrock.sizetrướcadd_child. 4 viên đầu tiên có2. - Chỉ tách khi
rock.size == 2, thành hai viên cỡ1.
Nhấn Chơi rồi bắn: đá lớn tách ra, đá nhỏ vỡ. 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)))
func spawn_rock(where, velocity):
var rock = ROCK.instantiate()
rock.position = where
rock.velocity = velocity
rock.broken.connect(_on_rock_broken)
add_child(rock)
func _on_rock_broken(rock):
spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5)
spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5)
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