使用CFG文件系统在godot中创建多值存储Save System
Creating a multi-value storing Save System in godot using CFG file system
我想在 Godot 中为我的游戏创建一个保存系统,但由于我不太擅长编码,所以我唯一能理解的方法是将数据写入配置文件。
以下代码位于名为 save_system.gd
的单例脚本中。它保存和加载一个变量数组 inventory.inventory_ingredients
的值如下 -
var save_path = "res://Saves/save-file.cfg";
var config= ConfigFile.new()
var load_response = config.load(save_path)
func saveValue(section,key):
config.set_value(section,key,inventory.inventory_ingredients)
config.save(save_path)
func loadValue(section,key):
inventory.inventory_ingredients = config.get_value(section, key, inventory.inventory_ingredients)
在我的游戏开始时,我有一个 "Load Game" 按钮加载数组如下 -
func _on_Load_pressed():
save_system.loadValue("Inventory", "ingredients")
当我触发保存功能时,使用了以下脚本 -
save_system.saveValue("Inventory","ingredients")
到目前为止一切都运行完美 - 就像我想要的那样。但是,我想扩大保存的变量数量。要在相当长的任务中为每个场景中的每个变量分别执行相同的代码,并且需要大量代码。我如何最大限度地减少行数,也许从一个节点一次性保存一堆 2-3 个变量?我更喜欢使用我使用过的 "cfg" 方法的方法。
例如,我有一个包含 3 个变量 (x,y,z) 的节点,我想按以下方式保存这些变量。目前,我知道的唯一方法是手动执行此操作 -
save_system.saveValue("Variables","x")
save_system.saveValue("Variables","y")
save_system.saveValue("Variables","z")
和类似的加载方法。 我想避免这种情况。我该怎么办?
将JSON写入文本文件
JSON is well-known standard for serializing data, and Godot provides standard library functions 与 JSON.
一起工作
extends Node
func load_save() -> Dictionary:
var f := File.new()
f.open("user://save.json", File.READ)
var result := JSON.parse(f.get_as_text())
f.close()
if result.error:
printerr("Failed to parse save file: ", f.error_string)
return result.result as Dictionary
func save(data: Dictionary):
var f := File.new()
f.open("user://save.json", File.WRITE)
prints("Saving to", f.get_path_absolute())
f.store_string(JSON.print(data))
f.close()
func _ready():
save({
"inventory": {
"ingredients": ["apple", "pear"],
"items": ["spoon", "fork"]
},
"stats": {
"health": 10,
"experience": 20,
}
})
print(load_save())
我们正在将保存文件写入 user path,这是适合应用程序数据的平台特定位置。
JSON可以用来保存任意复杂的数据,只要它由JSON支持的原始数据类型组成(string
、number
、dict
、array
, true
, false
, null
).
我想在 Godot 中为我的游戏创建一个保存系统,但由于我不太擅长编码,所以我唯一能理解的方法是将数据写入配置文件。
以下代码位于名为 save_system.gd
的单例脚本中。它保存和加载一个变量数组 inventory.inventory_ingredients
的值如下 -
var save_path = "res://Saves/save-file.cfg";
var config= ConfigFile.new()
var load_response = config.load(save_path)
func saveValue(section,key):
config.set_value(section,key,inventory.inventory_ingredients)
config.save(save_path)
func loadValue(section,key):
inventory.inventory_ingredients = config.get_value(section, key, inventory.inventory_ingredients)
在我的游戏开始时,我有一个 "Load Game" 按钮加载数组如下 -
func _on_Load_pressed():
save_system.loadValue("Inventory", "ingredients")
当我触发保存功能时,使用了以下脚本 -
save_system.saveValue("Inventory","ingredients")
到目前为止一切都运行完美 - 就像我想要的那样。但是,我想扩大保存的变量数量。要在相当长的任务中为每个场景中的每个变量分别执行相同的代码,并且需要大量代码。我如何最大限度地减少行数,也许从一个节点一次性保存一堆 2-3 个变量?我更喜欢使用我使用过的 "cfg" 方法的方法。
例如,我有一个包含 3 个变量 (x,y,z) 的节点,我想按以下方式保存这些变量。目前,我知道的唯一方法是手动执行此操作 -
save_system.saveValue("Variables","x")
save_system.saveValue("Variables","y")
save_system.saveValue("Variables","z")
和类似的加载方法。 我想避免这种情况。我该怎么办?
将JSON写入文本文件
JSON is well-known standard for serializing data, and Godot provides standard library functions 与 JSON.
一起工作extends Node
func load_save() -> Dictionary:
var f := File.new()
f.open("user://save.json", File.READ)
var result := JSON.parse(f.get_as_text())
f.close()
if result.error:
printerr("Failed to parse save file: ", f.error_string)
return result.result as Dictionary
func save(data: Dictionary):
var f := File.new()
f.open("user://save.json", File.WRITE)
prints("Saving to", f.get_path_absolute())
f.store_string(JSON.print(data))
f.close()
func _ready():
save({
"inventory": {
"ingredients": ["apple", "pear"],
"items": ["spoon", "fork"]
},
"stats": {
"health": 10,
"experience": 20,
}
})
print(load_save())
我们正在将保存文件写入 user path,这是适合应用程序数据的平台特定位置。
JSON可以用来保存任意复杂的数据,只要它由JSON支持的原始数据类型组成(string
、number
、dict
、array
, true
, false
, null
).