📜  自定义信号 godot - Python (1)

📅  最后修改于: 2023-12-03 15:11:47.635000             🧑  作者: Mango

自定义信号 Godot - Python

在 Godot 游戏引擎中,自定义信号是一种非常有用的工具。它们允许您创建特定事件的回调函数,这些事件通常需要在多个脚本中使用。

定义一个信号

要定义一个信号,您需要在 Godot 中创建一个新对象或脚本。在该对象或脚本中,使用 signal 关键字定义信号。以下是一个定义信号的示例代码:

extends Node

# 定义名为 my_signal 的信号
signal my_signal

该代码将定义名为 my_signal 的信号。现在,可以在其他脚本中使用该信号,以便在特定事件发生时执行回调函数。

发送信号

要发送信号,您需要在您的代码中调用 emit_signal() 函数,接着将信号名称和任何需要发送的参数传递给该函数。以下是一个发送信号的示例代码:

# 发送 my_signal 信号
emit_signal("my_signal")

此代码将发送名为 my_signal 的信号,不带任何参数。如果信号需要参数,您可以添加它们到 emit_signal 函数的调用中。

接收信号

要接收信号,您需要在希望接收该信号的对象或脚本中定义一个函数,该函数将处理该信号。为了将一个函数与信号连接起来,您需要使用 connect() 函数。以下是一个连接信号和槽的示例代码:

extends Node

func _ready():
    # 连接 my_signal 信号到 _on_my_signal 函数上
    connect("my_signal", self, "_on_my_signal")

func _on_my_signal():
    print("收到 my_signal 信号")

在该代码中,我们在 _ready() 函数中定义信号的接收者。我们调用 connect() 函数,并将信号名称、接收者对象和信号处理函数名称传递给该函数。在此例中,信号接收者对象是 self,即当前对象或脚本。信号处理函数名称是 _on_my_signal(),我们随便起的一个名称。

当名为 my_signal 的信号被发送时,_on_my_signal() 函数将被自动调用。

带参数的信号

有时候,您可能需要在信号被发送时传递一些参数。例如,在游戏中,您可能希望在玩家得分增加时发送一个包含前一个分数和新分数的信号。在这种情况下,您可以使用 emit_signal() 函数的第二个参数来传递参数。以下是一个发送带参数信号的示例代码:

# 发送一个名为 my_signal 的信号,并传递两个整数参数
emit_signal("my_signal", 10, 20)

在这个例子中,我们发送了一个名为 my_signal 的信号,并传递了两个整数值 10 和 20。

当您带参数的信号被接收时,您可以像下面这样访问这些参数:

extends Node

func _ready():
    connect("my_signal", self, "_on_my_signal")

func _on_my_signal(old_score, new_score):
    print("得分从 {} 增加到 {}".format(old_score, new_score))

在这个例子中,当名为 my_signal 的信号被触发时,_on_my_signal() 函数将被调用,并通过 old_scorenew_score 参数访问发送的整数值。

以上就是关于 Godot - Python 中自定义信号的介绍,希望本文可以为您提供帮助。