打碎砖块
本课属于 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。如果球同时碰到两块砖,两次翻转会相互抵消。
挑战
中等让球打碎砖块。
- 在
_on_body_entered中,为属于bricks组的物体添加一个elif。 - 调用
body.smash()。 - 如果球在砖块中线下方,就让球向下反弹;如果在中线上方,就让球向上反弹。
按“开始”:砖块会逐个爆开。然后按“检查”。
亲手试试
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 在线编辑器