如何解决在 Godot 中使用自定义类
我有一个在 Godot 中创建的简单网络聊天程序,我用它来向高中生教授基本的加密。我想添加一个自定义构建的加密类,以允许学生创建自己的密码。这是我为测试类而创建的一个简单实现:
class Security:
extends Resource
func _init():
print("Started.")
func encrypt():
print("Encrypting.")
在我的主脚本中,我有这个代码来初始化类(我在顶部,变量空间中,在任何函数定义之前):
const Security = preload("res://scripts/security.gd")
var sec = Security.new()
然后在我的脚本中的一个函数中执行此操作:
func send_message():
sec.encrypt()
任何时候都不会在控制台中出现任何打印消息。当我触发 send_message 函数时,出现以下错误:
无效调用。基础“Rederence (security.gd)”中不存在函数“encrypt”。
我在创建类时做错了什么,或者我如何将它添加到我的脚本中?或者我正在尝试的东西不是真的可行(例如,我应该只添加一个节点,向其添加脚本并在我的场景中使用该节点)?
谢谢。
解决方法
class
语法创建一个内部类。也就是说 class Security
不是脚本的类。
因此,当您这样做时:
const Security = preload("res://scripts/security.gd")
您没有获得您定义的安全等级。相反,它是一个包含您定义的类的类。
你可以像这样实例化你的类:
var sec = Security.Security.new()
第一个 Security
是引用脚本类的常量的名称。第二个 Security
是您定义的内部类 Security
。
我建议你用 class_name
语法定义你的类:
class_name Security extends Resource
func _init():
print("Started.")
func encrypt():
print("Encrypting.")
还要注意缩进的变化。
然后类将是全局的(这也意味着不需要 preload
),所以你可以简单地这样做:
var sec = Security.new()
同样,不需要预加载,类是全局的。
或者,不要使用类名,而是直接在脚本上使用函数。并使用预加载:
scurity.gd:
extends Resource
func _init():
print("Started.")
func encrypt():
print("Encrypting.")
其他地方:
const Security = preload("res://scripts/security.gd")
var sec = Security.new()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。