返回介绍

信号

发布于 2024-01-08 20:55:54 字数 5475 浏览 0 评论 0 收藏 0

有一种编程方式叫做“事件驱动式编程”,大意就是说当发生某件事的时候就执行一段代码,以此来实现整个程序的功能。其中的事件在 Godot 中被称作信号

一个信号可以连接到很多方法,当信号触发时则会执行这些方法。

你也可以把信号理解成一组方法的集合,并且可以同时调用这组方法。

我们之前接触过按钮节点(Button)的 pressed 方法,这是按钮被按下的信号,不同的节点有不同的信号,例如输入框节点(LineEdit)有 text_changed 信号,会在内容发生变化时触发,且还包含一个参数。

连接信号

在 Godot 引擎界面中可以双击信号来连接到某个脚本上的方法,这种操作没什么难度,这里不再讲解。我们重点看看使用代码连接信号。

我们来尝试实现一个这样的效果:

+3

场景中包含三个节点:

Control
    Button
    Label

我们将脚本写在了 Control 节点上:

extends Control

func _ready():
    $Button.pressed.connect(当点击按钮)

func 当点击按钮():
    $Label.text = str(int($Label.text) + 3)

重点就是 _ready 方法中的 $Button.pressed.connect(当点击按钮),其中的 pressed 属性就是按钮的 pressed 信号,信号对象有 connect 方法,这个方法的参数也是一个方法,表示将信号连接到方法上。

connect 这个单词的中文翻译:连接

断开连接

调用信号的 disconnect 方法就可以断开某个与方法的连接:

$Button.pressed.disconnect(当点击按钮)

[!tip] 代码自动补全没了?

个人感觉目前的 Godot 编辑器有时候有点小问题,我的 Godot 在输入 $Button.pressed. 后不会弹出 pressed 的属性提示,这种情况对于新人来讲属于是个灾难。

这时候,强类型语法就可以登场了,可以用一些拐弯的方法来得到代码提示:

var 点击信号: Signal = $Button.pressed
点击信号.connect(当点击按钮)

这样,在输入 点击信号. 的时候就能看到信号对象的代码提示了,这里使用的类型 Signal 就是信号类型。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文