Menu
CoddyTech

带值的信号

本课属于 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,而不是手动输入一个数字。

challenge icon

挑战

简单

让每颗宝石告诉 main.gd 它值多少分。

  1. 在 gem.gd 顶部声明 signal collected(points)。
  2. 在 _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 在线编辑器