Menu
CoddyTech

让小球从挡板反弹

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

球会穿过挡板。球是一个 Area2D。当某个刚体(例如挡板)碰到球时,球的 body_entered 信号会触发。如果碰到球的是挡板,就让球向上弹:

func _ready():
	body_entered.connect(_on_body_entered)

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

abs() 会去掉负号,因此 -abs(velocity.y) 始终指向上方。球再次碰到挡板时,不会因此向下弹。

要让玩家控制球的方向,请根据球的击中位置设置 velocity.x。position.x - body.position.x 表示球与挡板中心的距离。在挡板左半边时,这个值为负;在右半边时,这个值为正。将它乘以 5。

challenge icon

挑战

中等

让球从挡板上弹开。

  1. 在 ball.gd 中,在 _ready 里将 body_entered 连接到 _on_body_entered。
  2. 当物体的名称是 Paddle 时,将 velocity.x 设为 (position.x - body.position.x) * 5,并将 velocity.y 设为 -abs(velocity.y)。

按“开始”并接住球:它会朝被击中的一侧飞回上方。然后点击“检查”。

亲手试试

extends Area2D

var velocity = Vector2(110, -280)

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

项目中的所有课

自己练习: Godot 在线编辑器