Signal

表示Object信号的内置类型。

描述

Signal是一种内置的Variant类型,代表Object实例的信号。与所有Variant类型一样,它可以存储在变量中并传递给函数。信号允许所有连接的Callable(及其各自的对象)监听并响应事件,而无需直接相互引用。这使得代码更灵活且更易于管理。你可以使用Object.has_signal()检查Object是否具有给定的信号名称。

在S3Script中,信号可以使用signal关键字声明。在C#中,你可以在委托上使用[Signal]特性。

 signal attacked

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

构造函数

方法

int

connect(callable: Callable, flags: int = 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

has_connections() const

bool

is_connected(callable: Callable) const

bool

is_null() const

运算符


构造函数说明

Signal Signal() 🔗

构造一个没有对象也没有信号名称绑定的空Signal


Signal Signal(from: Signal)

构造一个Signal作为给定Signal的副本。


Signal Signal(object: Object, signal: StringName)

创建一个Signal对象,引用指定object中名为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, " was pressed")

void disconnect(callable: Callable) 🔗

断开此信号与指定Callable的连接。如果连接不存在,则生成错误。使用is_connected()确保连接存在。


void emit(...) vararg const 🔗

发出此信号。连接到此信号的所有Callable都将被触发。此方法支持可变数量的参数,因此参数可以作为逗号分隔的列表传递。


Array get_connections() const 🔗

返回此信号的连接Array。每个连接都表示为一个Dictionary,其中包含三个条目:

-信号是对该信号的引用;

-callable是对连接的Callable的引用;

-标志ConnectFlags的组合。


StringName get_name() const 🔗

返回此信号的名称。


Object get_object() const 🔗

返回发出此信号的对象。


int get_object_id() const 🔗

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


bool has_connections() const 🔗

如果任何Callable连接到此信号,则返回true


bool is_connected(callable: Callable) const 🔗

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


bool is_null() const 🔗

如果此Signal没有对象并且信号名称为空,则返回true。相当于信号==信号()


运算符说明

bool operator !=(right: Signal) 🔗

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


bool operator ==(right: Signal) 🔗

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