【发布时间】:2020-08-21 11:36:49
【问题描述】:
我有点难过。我已经按照this修改了保存系统。
为了解决这个问题,我不确定如何将字典加载回原始变量。 很可能更容易解释您所看到的问题。
# This would be "GlobalData"
onready var KEY = name
# Stats dictionary
var stats:= {
"health" : 75,
"stamina": 25
}
# Meta Dictionary
var meta:= {
"testing": "I'm a totally random thing",
"testing2": 2002,
"date": "Thursday, 2020-08-20, 20:12"
}
# Load both into array to iterate through upon saving
var list = [stats, meta]
func save(save_game:Resource):
var i = 0
for element in list:
# Make a unique key based on iteration
var temp:String = KEY + String(i)
# Store data to key
save_game.data[temp] = element
i = i+1
func load(save_game:Resource):
var i = 0
# === Where the error lies === #
# While saving works fine, I cannot use the list array to push content back into the original dictionaries
# If I targeted the dictionary by it's variable, then it got applied.
for element in list:
var temp:String = KEY + String(i)
element = save_game.data[temp]
i = i+1
所以,我的问题在于“如何重新应用加载的数据?”。 我是否必须将列表写入某种方式,它也会存储字典名称?或者是否有可能以某种方式调用元素的名称以使其定位到原始变量/字典?
PS。不要问我为什么不使用 i++ 或 i+=1。出错了。
【问题讨论】:
-
我越是尝试推动这个问题,它就越糟糕。也许不值得过度设计它,应该坚持一个字典,把所有的东西都扔进去。或者至少,只要能以某种方式给出指点,因为我想不出任何好的方法来解决这个问题。
-
嗯,youtube 教程并不是参考您正在使用的某种库的好方法——实际存储数据的部分在您的问题中不可见,您能否提供指向源的链接或更有用的东西?尽管如此,仅存储您的字典并将它们作为单个条目重新加载似乎是合理的,而不是逐个键。另外,您为什么要随意更改键名?在您的示例中,名称没有重叠,只需按原样使用名称即可。如果您有重叠,则需要一个双向的独特映射。