Menu
CoddyTech

Phá gạch

Thuộc phần Dự án trong hành trình Godot của Coddy. Bài học 6 trên 36.

Quả bóng đi xuyên qua các viên gạch. Các viên gạch cũng là vật thể, và mỗi viên thuộc nhóm bricks. is_in_group giúp phân biệt viên gạch với thanh đỡ.

Mỗi viên gạch có một hàm smash(). Hàm này làm viên gạch vỡ tung thành các tia lửa rồi xóa nó.

elif body.is_in_group("bricks"):
	body.smash()

Sau đó, bóng bật ra khỏi phần giữa của viên gạch: đi xuống nếu bóng ở thấp hơn viên gạch, đi lên nếu bóng ở cao hơn. Bóng có thể đập vào viên gạch từ phía trên sau khi lọt qua một khe hở.

if position.y > body.position.y:
	velocity.y = abs(velocity.y)
else:
	velocity.y = -abs(velocity.y)

Đừng đảo chiều velocity.y. Nếu bóng chạm vào hai viên gạch cùng lúc, hai lần đảo chiều sẽ triệt tiêu lẫn nhau.

challenge icon

Thử thách

Trung bình

Để bóng phá vỡ các viên gạch.

  1. Trong _on_body_entered, thêm một elif cho các vật thể thuộc nhóm bricks.
  2. Gọi body.smash().
  3. Cho bóng nảy xuống nếu nó ở dưới điểm giữa của viên gạch, nảy lên nếu nó ở trên.

Nhấn Chơi: các viên gạch vỡ từng viên một. Sau đó nhấn Kiểm tra.

Tự làm thử

extends Area2D

var velocity = Vector2(110, -280)

func _ready():
	body_entered.connect(_on_body_entered)

func _physics_process(delta):
	position += velocity * delta
	if position.x < 8 or position.x > 632:
		velocity.x = -velocity.x
	if position.y < 42:
		velocity.y = -velocity.y

func _on_body_entered(body):
	if body.name == "Paddle":
		velocity.x = (position.x - body.position.x) * 5
		velocity.y = -abs(velocity.y)

Tất cả bài học trong Dự án

Tự luyện tập: Playground Godot