在编写了一些文件以保存在Godot中的JSON文件中之后。我将信息保存在一个名为LData
的变量中,它正在工作。LData
看起来像这样:
{
"ingredients":[
"[KinematicBody2D:1370]"
],
"collected":[
{
"iname":"Pineapple",
"collected":true
},{
"iname":"Banana",
"collected":false
}
]
}
当文件显示KinematicBody2D:1370
时是什么意思?我知道它是在文件中保存节点 - 还是只是保存一个字符串?它是否也保存了节点的属性?
当我尝试检索数据时 - 分配给保存KinematicBody2D
的变量.
法典:
for ingredient in LData.ingredients:
print(ingredient.iname)
错误:
获取索引名称"iname"无效(基于:"字符串"(
我假设数据存储为字符串,我需要输入一些代码来获取它保存的确切节点。使用get_node
也会引发错误。
法典:
for ingredient in LData.ingredients:
print(get_node(ingredient).iname)
错误:
获取索引"iname"无效(基于:"空实例"(
当它说[KinematicBody2D:1370]
时,它到底存储了什么信息?如何访问变量iname
和任何其他变量(加载游戏时分配给节点的变量(,并且在整个游戏中不会更改?
[KinematicBody2D:1370]
只是Node
的字符串表示,它来自Object.to_string
:
返回一个表示对象的字符串。如果未被覆盖,则默认为"[类名:RID]"。
如果您确实想序列化整个对象,则可以使用Marshalls.variant_to_base64
并将该字符串放入 json 文件中。但是,这可能会使您的 json 文件膨胀,并且包含的信息比保存游戏实际需要的信息要多得多。你真的需要保存整个KinematicBody
,还是你能找出需要保存的几个属性(位置、对象类型等(并在运行时重建其余的属性?
您还可以将对象另存为Resources
,这比 JSON 文件更强大、更灵活,但往往比保存游戏更适合游戏资产。但是,您可以阅读资源文档,看看保存Resources
是否更适合您。