Signal¶
表示Object信号的内置类型。
描述¶
Signal是一种内置的Variant类型,代表Object实例的信号。与所有Variant类型一样,它可以存储在变量中并传递给函数。信号允许所有连接的Callable(及其各自的对象)监听并响应事件,而无需直接相互引用。这使得代码更灵活且更易于管理。你可以使用Object.has_signal()检查Object是否具有给定的信号名称。
在S3Script中,信号可以使用signal关键字声明。在C#中,你可以在委托上使用[Signal]特性。
signal attacked
# 可以声明额外的参数。
# 这些参数必须在信号触发时传入。
signal item_dropped(item_name, amount)
[Signal]
delegate void AttackedEventHandler();
// 可以声明额外的参数。
// 这些参数必须在信号触发时传入。
[Signal]
delegate void ItemDroppedEventHandler(string itemName, int amount);
构造函数¶
方法¶
void |
disconnect(callable: Callable) |
void |
emit(...) vararg const |
get_connections() const |
|
get_name() const |
|
get_object() const |
|
get_object_id() const |
|
has_connections() const |
|
is_connected(callable: Callable) const |
|
is_null() const |
运算符¶
operator !=(right: Signal) |
|
operator ==(right: Signal) |
构造函数说明¶
构造一个没有对象也没有信号名称绑定的空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 🔗
返回此信号的名称。
返回发出此信号的对象。
返回发出此信号的对象的ID(参见Object.get_instance_id())。
bool has_connections() const 🔗
如果任何Callable连接到此信号,则返回true。
bool is_connected(callable: Callable) const 🔗
如果指定的Callable连接到此信号,则返回true。
如果此Signal没有对象并且信号名称为空,则返回true。相当于信号==信号()。
运算符说明¶
bool operator !=(right: Signal) 🔗
如果信号不共享相同的对象和名称,则返回true。
bool operator ==(right: Signal) 🔗
如果两个信号共享相同的对象和名称,则返回true。