Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Signal

代表 Object 中某个信号的内置类型。

描述

信号 Signal 是内置的 Variant 类型,代表 Object 实例的某个信息。信号和所有 Variant 类型一样,可以在变量中存储、传递给函数。信号能够让所有连接的 Callable(及相应扩展对象)监听事件并作出反应,不必直接互相引用。这样就能让代码更灵活、更易于管理。

在 GDScript 中,信号可以使用 signal 关键字声明。在 C# 中,你可以在代理上使用 [Signal] 属性。

signal attacked

# 可以声明额外的参数。
# 这些参数必须在发出信号时传递。
signal item_dropped(item_name, amount)

备注

通过 C# 使用这个 API 时有显著的不同。详见 C# API 与 GDScript 的差异

教程

构造函数

Signal

Signal ( )

Signal

Signal ( Signal from )

Signal

Signal ( Object object, StringName signal )

方法

int

connect ( Callable callable, int flags=0 )

void

disconnect ( Callable callable )

void

emit ( ... ) vararg const

Array

get_connections ( ) const

StringName

get_name ( ) const

Object

get_object ( ) const

int

get_object_id ( ) const

bool

is_connected ( Callable callable ) const

bool

is_null ( ) const

操作符

bool

operator != ( Signal right )

bool

operator == ( Signal right )


构造函数说明

Signal Signal ( )

构造空的 Signal,没有绑定对象和信号名称。


Signal Signal ( Signal from )

构造给定 Signal 的副本。


Signal Signal ( Object object, StringName signal )

在指定对象 object 中新建名称 signalSignal


方法说明

int connect ( Callable callable, int flags=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 的引用。

  • flagsConnectFlags 的组合。


StringName get_name ( ) const

返回该信号的名称。


Object get_object ( ) const

返回发出该信号的对象。


int get_object_id ( ) const

返回发出该信号的对象的 ID(见 Object.get_instance_id)。


bool is_connected ( Callable callable ) const

如果指定的 Callable 已连接到此信号,则返回 true


bool is_null ( ) const

如果该信号的名称并不存在于其对象中,或者对象无效,则返回 true


操作符说明

bool operator != ( Signal right )

如果信号的对象或名称不同,则返回 true


bool operator == ( Signal right )

如果信号的对象和名称相同,则返回 true