Signal
代表 Object 中某个信号的内置类型。
描述
信号 Signal 是内置的 Variant 类型,代表 Object 实例的某个信息。信号和所有 Variant 类型一样,可以在变量中存储、传递给函数。信号能够让所有连接的 Callable(及相应扩展对象)监听事件并作出反应,不必直接互相引用。这样就能让代码更灵活、更易于管理。
在 GDScript 中,信号可以使用 signal
关键字声明。在 C# 中,你可以在代理上使用 [Signal]
属性。
GDScriptC#
signal attacked
# 可以声明额外的参数。
# 这些参数必须在发出信号时传递。
signal item_dropped(item_name, amount)
[Signal]
delegate void AttackedEventHandler();
// 可以声明额外的参数。
// 这些参数必须在发出信号时传递。
[Signal]
delegate void ItemDroppedEventHandler(string itemName, int amount);
备注
通过 C# 使用该 API 时会有显著不同,详见 C# API 与 GDScript 的差异。
教程
构造函数
Signal() | |
Signal(object: Object, signal: StringName) |
方法
void | disconnect(callable: Callable) |
void | emit(…) vararg const |
get_connections() const | |
get_name() const | |
get_object() const | |
get_object_id() const | |
is_connected(callable: Callable) const | |
is_null() const |
运算符
operator !=(right: Signal) | |
operator ==(right: Signal) |
构造函数说明
构造空的 Signal,没有绑定对象和信号名称。
构造给定 Signal 的副本。
Signal Signal(object: Object, signal: StringName)
在指定对象 object
中新建名称 signal
的 Signal。
方法说明
int connect(callable: Callable, flags: int = 0) 🔗
将此信号连接到指定的 callable
。还可以添加 flags
对连接的行为进行配置(见 ConnectFlags 常量)。可以使用 Callable.bind 为连接的 callable
提供额外的参数。
一个信号只能和同一个 Callable 连接一次。如果该信号已连接,则会返回 @GlobalScope.ERR_INVALID_PARAMETER 并推入错误消息,除非信号是用 Object.CONNECT_REFERENCE_COUNTED 连接的。要防止这个问题,请先使用 is_connected 检查已有连接。
for button in $Buttons.get_children():
button.pressed.connect(_on_pressed.bind(button))
func _on_pressed(button):
print(button.name, " 被按下了")
void disconnect(callable: Callable) 🔗
将该信号与给定的 Callable 断开连接。如果该连接不存在,则会生成错误。请使用 is_connected 来确保连接存在。
void emit(…) vararg const 🔗
发出该信号。与该信号相连的所有 Callable 都将被触发。此方法支持可变数量的参数,所以参数可以用逗号分隔列表的形式传递。
Array get_connections() const 🔗
返回该信号的连接 Array。连接用 Dictionary 表示,包含三个条目:
signal
是对此信号的引用。callable
是对连接的 Callable 的引用。flags
是 ConnectFlags 的组合。
StringName get_name() const 🔗
返回该信号的名称。
返回发出该信号的对象。
返回发出该信号的对象的 ID(见 Object.get_instance_id)。
bool is_connected(callable: Callable) const 🔗
如果指定的 Callable 已连接到此信号,则返回 true
。
如果该信号的名称并不存在于其对象中,或者对象无效,则返回 true
。
运算符说明
bool operator !=(right: Signal) 🔗
如果信号的对象或名称不同,则返回 true
。
bool operator ==(right: Signal) 🔗
如果信号的对象和名称相同,则返回 true
。