首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在godot中使用不同的脚本执行其他脚本?

如何在godot中使用不同的脚本执行其他脚本?
EN

Stack Overflow用户
提问于 2021-11-06 23:35:03
回答 1查看 325关注 0票数 0

所以我用godot制作了这个简单的游戏,我已经成功地制作了一个开始菜单。但是,我希望开始菜单中的按钮实际执行其他脚本。我已经知道如何向按钮添加函数,我所需要的就是如何在godot中使用不同的脚本执行另一个脚本。

如果你还不明白我的意思,看看这段python代码:

代码语言:javascript
运行
复制
exec(open("file.py").read())

我基本上想在gdscript中做一些类似的事情。

EN

回答 1

Stack Overflow用户

发布于 2021-11-07 00:09:21

首先,GDScript没有顶级语句。至少本质上不是这样(它有顶级变量声明--也就是字段/属性--带有初始化器)。这意味着你想要执行的任何GDScript都必须在一个方法中。让我换一种说法:您不会执行GDScript脚本。您可以执行GDScript脚本中的GDScript方法。

其次,当按钮被按下时,它会发送一个"pressed"信号(其他系统会将其称为事件或通知)。无论您想要在按钮被按下时执行什么,您都希望将其放在一个连接到信号的方法中(其他系统会将其称为事件侦听器或处理程序)。

通常,可以将信号连接到附加到场景树中节点的脚本中的方法。

您可以从编辑器连接信号,在节点面板的->信号选项卡中,您将找到所选节点的信号。从那里可以将它们连接到同一场景中附加了脚本的任何节点。因此,您应该事先在要连接信号的节点上附加一个脚本。

一旦告诉Godot连接一个信号,它就会要求您选择要连接到的节点,并允许您指定处理该信号的方法的名称(默认情况下会生成一个名称)。也可以连接来自代码的信号。

参见Signals

从connected方法中,您可以调用您需要的任何其他内容。例如,您可以在其他脚本中调用静态方法;在自动加载(单例)中调用脚本;加载脚本,将其实例化,然后调用实例上的方法;评估代码;调用其他可执行…如果这是你感兴趣的事情之一,请澄清。

附录:因为该示例将加载脚本。下面是一个这样的例子:

代码语言:javascript
运行
复制
var script := load("res://script.gd")
script.static_method_name()
var instance = script.new()
instance.method_name()

附录2:Sine exec采用源代码,让我们也来看一个例子:

代码语言:javascript
运行
复制
var file := File.new()
file.open("res://script.gd", File.READ)
var source_code := file.get_as_text()
var script := GDScript.new()
script.source_code = source_code
script.reload()
script.static_method_name()
var instance := script.new()
instance.method_name()

对于那些直接跳到示例进行复制和粘贴的人:上面的示例不是在GDScript中通常使用的方法。

附录3

如果你要多次引用一个脚本,不要每次都加载它。取而代之的是将其preload到脚本开头需要它的const:

代码语言:javascript
运行
复制
const ClassName := preload("res://script.gd")

或者更好,而不是加载或预加载脚本。转到另一个脚本,为其指定一个类名,并在文件开头加上class_name,如下所示:

代码语言:javascript
运行
复制
class_name ClassName

然后,在你需要的地方,你可以这样做:

代码语言:javascript
运行
复制
ClassName.static_method_name()
var instance = ClassName.new()
instance.method_name()

这就是Godot的习惯用法。尽管不可否认,使用File加载上面显示的脚本的方法可能是建模系统的基础。

再次重申,您需要连接按钮的"pressed"信号,以便Godot知道在按钮被按下时调用什么。通常,您会将信号连接到附加到场景中节点的脚本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69868733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档