让小球从挡板反弹
本课属于 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。
挑战
中等让球从挡板上弹开。
- 在
ball.gd中,在_ready里将body_entered连接到_on_body_entered。 - 当物体的名称是
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 在线编辑器