Godot 游戏引擎指南/信号和方法
如果你向 Godot 用户寻求编码建议,他们经常会说“信号上移,调用下移”。这到底是什么意思呢?
从场景面板中选择一个节点。按下检查器旁边的“节点”选项卡。将出现一个列表。这些是信号。
创建一个新场景。按下用户界面。将其保存为Signal test.tscn
。添加两个节点:一个按钮和一个标签,两者都是控制的子节点。使用布局
按钮将按钮居中到屏幕上。在检查器中将文本
属性设置为按下我
。
现在将脚本添加到控制根节点(第一个节点)。选择按钮。打开节点面板,双击“button_up()”。将弹出一个窗口,其中选择了场景根节点(控制节点)。文本编辑应该显示_on_Button_button_up
。按下“连接”。
这将创建以下代码
func _on_Button_button_up(): pass # Replace with function body.
当信号button_up
发出时,将调用此函数。将代码print("你按下了我!")
添加到该函数中。如果你愿意,可以删除pass # Replace with function body.
。
通过按下 F6 运行场景,并满足该按钮的愿望!
你可以在 GDScript 中使用signal <signal_name> <optional:(argument1: type, argument2: type, ect)>
创建自己的信号。在函数中发出它:emit_signal(<"signal_name">, <argument1>,<argument2 ect.>)
。
与信号一样重要,调用允许发生很多事情。将$Label.text = "你按下了我!"
添加到该函数中。这实际上是在设置一个变量,但它仍然被认为是调用,因为设置变量使用 setter 函数。更多信息将在另一章中介绍。
$path
是get_node(path)
函数的简写。Label
是路径参数。这允许直接操作该名称的子节点。
这些被称为节点路径。它们的工作方式有点像文件路径,这是一个常见的例子:$weapon/art.texture = preload("res://assets/weapons/upgraded_sword.png")
,并且也可以是相对的,例如(在res://game/player.gd
中调用)/weapons/upgraaded_sword.tscn
。
一个全局get_node
看起来像/root/game/player/weapon/art
。
有关更多信息,请参见GDScript:操作场景树.
这意味着,如果你正在调用另一个节点上的方法,请使用信号来调用父节点(以降低代码复杂度),并在调用子节点时使用方法(以提高可读性和自由度)。
- 如何获取子节点。
- 如何连接信号。
- 如何设置另一个节点的属性(使用“.”。你也可以用它来调用它们的函数!)