带值的信号
本课属于 Coddy Godot 学习旅程的“信号与碰撞”单元。第 8 课,共 27 课。
信号可以携带值,就像 body_entered 携带主体一样。声明信号时,把这些值列在括号里:
signal collected(points)按相同的顺序将这些值传给 emit():
collected.emit(points)连接到 collected 的每个函数都会收到这个值。这里,Main 上的脚本会把分数加到总分中并打印出来:
func _on_gem_collected(points):
score += points
print("Score: ", score)两颗宝石都运行相同的脚本。小宝石的 points 是 10,大宝石的是 25,这些值在场景中分别设置在每个节点上。因此要传入 points,而不是手动输入一个数字。
挑战
简单让每颗宝石告诉 main.gd 它值多少分。
- 在
gem.gd顶部声明signal collected(points)。 - 在
_on_body_entered的末尾,用这颗宝石的points发送信号。
按“开始”,走过两颗宝石:控制台会先显示 Score: 10,然后显示 Score: 35。然后按“检查”。
亲手试试
extends Area2D
@export var points = 10
func _ready():
body_entered.connect(_on_body_entered)
func _on_body_entered(body):
if not visible:
return
visible = false
信号与碰撞中的所有课
自己练习: Godot 在线编辑器