当KinematicBody2D存储在JSON文件中时意味着什么 - Godot?



在编写了一些文件以保存在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是否更适合您。

最新更新