Menu
CoddyTech

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().

challenge icon

Thử thách

Trung bình

Hãy để đạn phá vỡ đá.

  1. Trong rock.gd, kết nối body_entered với _on_body_entered trong _ready.
  2. Khi đối tượng nằm trong nhóm bullets, hãy xóa viên đạn, gọi burst() 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

Tự luyện tập: Playground Godot