Bắn các tảng đá
Thuộc phần Dự án trong hành trình Godot của Coddy. Bài học 17 trên 36.
Đá là một Area2D, còn đạn là một vật thể, nên body_entered báo cho đá biết khi viên đạn va vào nó. Mỗi viên đạn đều thuộc nhóm bullets.
func _on_body_entered(body):
if body.is_in_group("bullets"):
body.queue_free()
burst()
queue_free()Hãy xóa cả viên đạn. Nếu không, nó sẽ bay tiếp và phá vỡ tảng đá phía sau. burst() đã có sẵn trong rock.gd. Hàm này tạo ra một đám bụi tại vị trí tảng đá vừa ở đó. Gọi hàm này trước queue_free().
Thử thách
Trung bìnhHãy để đạn phá vỡ đá.
- Trong
rock.gd, kết nốibody_enteredvới_on_body_enteredtrong_ready. - Khi đối tượng nằm trong nhóm
bullets, hãy xóa viên đạn, gọiburst()rồi xóa tảng đá.
Nhấn Chơi và bắn vào một tảng đá: nó vỡ thành bụi. Sau đó nhấn Kiểm tra.
Tự làm thử
extends Area2D
var velocity = Vector2.ZERO
func _physics_process(delta):
position += velocity * delta
rotation += 0.5 * delta
if position.x < -30:
position.x += 700
if position.x > 670:
position.x -= 700
if position.y < -30:
position.y += 420
if position.y > 390:
position.y -= 420
# Bursts into dust where the rock is. Call it when the rock breaks.
func burst():
var dust = CPUParticles2D.new()
dust.position = position
dust.one_shot = true
dust.explosiveness = 1.0
dust.amount = 20
dust.lifetime = 0.7
dust.spread = 180.0
dust.gravity = Vector2.ZERO
dust.initial_velocity_min = 30.0
dust.initial_velocity_max = 120.0 * scale.x
dust.scale_amount_min = 2.0
dust.scale_amount_max = 5.0
dust.color = Color(0.75, 0.82, 0.95)
dust.finished.connect(dust.queue_free)
get_parent().add_child(dust)
dust.emitting = true
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