Menu
CoddyTech

打碎砖块

本课属于 Coddy Godot 学习旅程的“项目”单元。第 6 课,共 36 课。

球会穿过砖块。砖块也是物体,每块砖都在 bricks 组中。is_in_group 用来区分砖块和挡板。

每块砖都有一个 smash() 函数。它会让砖块迸裂成火花,并将其移除。

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

然后,球会从砖块中间弹开:如果球的位置低于砖块,就向下弹;如果高于砖块,就向上弹。球可能会在穿过缝隙后从上方撞到砖块。

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

不要翻转 velocity.y。如果球同时碰到两块砖,两次翻转会相互抵消。

challenge icon

挑战

中等

让球打碎砖块。

  1. 在 _on_body_entered 中,为属于 bricks 组的物体添加一个 elif。
  2. 调用 body.smash()。
  3. 如果球在砖块中线下方,就让球向下反弹;如果在中线上方,就让球向上反弹。

按“开始”:砖块会逐个爆开。然后按“检查”。

亲手试试

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)

项目中的所有课

自己练习: Godot 在线编辑器