在 Godot 中编写场景脚本17 Mar 2025 | 5 分钟阅读 我们将设置一个包含按钮和标签的 GUI 场景,按下按钮将更新标签。 这将演示
在继续之前,请务必阅读 GDScript 参考。 这是一种旨在简单的语言,文本很短,因此只需几分钟即可概述这些概念。 场景设置使用“添加子节点”对话框(可通过“场景”选项卡访问或按 ctrl+A)创建具有给定节点的层次结构
场景树如下所示 ![]() 使用 2D 编辑器 调整按钮和标签的大小和位置,使其看起来像下图。 我们可以从检查器选项卡设置文本。 ![]() 最后,我们必须使用诸如 sayhello.tscn 之类的名称保存场景。 添加脚本右键单击面板节点,然后从上下文菜单中选择“附加脚本” ![]() 将弹出脚本创建对话框。 此对话框允许我们设置类名、脚本的语言和其他适用的选项。 在 GDScript 中,文件本身代表类,因此类名字段不可编辑。 我们将脚本与面板相关联,因此 legacy 字段将自动填充“panels”。 这是我们想要的,因为脚本的目的是扩展我们的面板节点的功能。 最后,输入脚本的路径名并选择创建; ![]() 脚本将被创建并添加到节点。 我们可以在“场景”选项卡中的节点旁边以及检查器下的脚本选项卡属性中看到一个“OpenScript”图标 ![]() 要编辑任何脚本,请选择以上图片中突出显示的这两个按钮中的任何一个。 这会将我们带到脚本编辑器,其中可以包含默认模板 ![]() 当节点及其子节点进入活动场景时,将调用 _ready() 函数。 注意: -ready() 不是构造函数,而是 _init()。脚本的角色脚本为节点添加行为。 它用于控制节点的工作方式以及它与其他节点(子节点、父节点、兄弟节点等)的交互方式。 脚本的局部区域是节点。 换句话说,脚本节点提供的功能是继承的。 ![]() 处理信号当发生一些 特定 类型的动作时,信号会被“发出”,它们可以与任何实例的任何函数相关联。 信号主要用于 GUI 节点,尽管其他节点也具有信号,我们也可以在脚本中定义自定义信号。 在此步骤中,我们将“抑制”信号连接到自定义函数。 创建连接是第一部分,定义自定义函数是第一部分的第二部分。 Godot 提供了两种构建链接的方式:通过可视化界面、通过编辑器提供或代码。 虽然我们在本教程系列的剩余部分中使用代码方法,但让我们介绍一下编辑器界面的工作方式,以供将来参考。 在视图树中选择按钮节点,然后选择“节点”选项卡。 接下来,确保我们选择了“信号”。 ![]() 如果我们然后选择“BaseButton”下的“pressed()”并单击右下角的“连接..”按钮,我们将打开连接创建对话框。 ![]() 在左下方是我们需要创建连接的关键内容:一个实现我们要触发的方法的节点(此处表示为 NodePath)以及触发方式的名称。 左上角部分显示了我们场景的节点列表,其中突出显示了红色发射节点的名称。 在此处选择“Panel”节点。 默认情况下,该方法包含发射节点的名称(在本例中为“button”),从而产生“_on_[EmitterNode]_[signal_name]"。 如果我们选中了“创建函数”复选框,则编辑器将为我们生成函数以设置连接。 到此结束了关于如何使用可视化界面的指南。 但是,这是一个脚本编写教程,因此为了学习,让我们深入了解手动过程! 完成此操作后,我们将介绍 Godot 程序员最常用的一个函数:Node.get_node ()。 此函数使用路径来获取相对于脚本拥有的节点的任何位置的节点。 为方便起见,删除展开面板下方的所有内容。 我们将手动填写脚本的其余部分。 由于面板底部的按钮和标签是附加脚本的兄弟节点,因此我们已经可以通过在 _() 下键入来调用该按钮了 GDScript func _ready(): get_node("Button") Next, write a function which is called when the button is pressed: GDScript func _on_Button_pressed(): get_node("Label").text = "HELLO!" Lastly, connect the button's "pressed" signal to _ready() by using Object.connect(). GDScript func _ready(): get_node("Button").connect("pressed", self, "_on_Button_pressed") The final script should look like this: GDScript extends Panel func _ready(): get_node("Button").connect("pressed", self, "_on_Button_pressed") func _on_Button_pressed(): get_node("Label").text = "HELLO!" 运行场景并按下按钮。 我们应该得到以下结果 ![]() 你好! 恭喜你编写了我们的第一个场景。 注意:关于本教程的一个常见误解是 get_node (PATH) 的工作方式。 对于节点,get_node (PATH) 搜索其直接子节点。 在上面的代码中,这意味着该按钮必须是 Panel 的子节点。 如果开关改为标签的子节点,则获取它的代码将是;GDScript # Not for this case, # but in case. get_node("Label/Button") 另外,请记住,节点是通过名称而不是类型引用的。 注意 |
我们请求您订阅我们的新闻通讯以获取最新更新。