使用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支持的原始数据类型组成(stringnumberdictarray, true, false, null).