感谢这个伟大的社区,我设法为我的游戏制作了一个保存系统!然而,写作有点漫长而且痛苦。我需要帮助,如何(如果可能的话)使这一点变得更短更容易。
所以,这就是我得到的(这个例子只使用1个变量来得到这个想法):
GameState = loadsave.loadTable("GameState.json")
if GameState == nil then
GameState = {
TotalPixoosGS = 0,
}
loadsave.saveTable(GameState, "GameState.json")
end
TotalPixoos = GameState.TotalPixoosGS
让我快速解释一下我在这里得到的内容:GameState = loadsave.loadTable("GameState.json")
是来自.json文件的表的声明。我使用了从这里得到的.loadTable函数:
https://code.coronalabs.com/code/easy-saveload-table-data-corona-sdk
if GameState == nil then
GameState = {
TotalPixoosGS = 0,
}
如果该文件不存在,则只会创建默认游戏设置,在这种情况下,将TotalPixoosGS
变量设置为0
的值。
loadsave.saveTable(GameState, "GameState.json")
同样来自上面链接的函数只是从GameState
表创建.json文件,称之为GameState.json
。
TotalPixoos = GameState.TotalPixoosGS
最后,将GameState.TotalPixoosGS
的值分配给变量TotalPixoos
(如果GameState.json
不存在,则会指定值0
)。到目前为止,非常直截了当,对吧?
现在,在打开应用程序时调用了此代码。
以下代码是我在EXITING应用程序中使用的代码:
if ( event.type == "applicationExit" ) then
GameState = {
TotalPixoosGS = TotalPixoos,
}
loadsave.saveTable(GameState, "GameState.json")
end
基本上,它的作用是:当应用即将退出时,您只需将TotalPixoosGS
的值更改为当前值TotalPixoos
(即随时间变化的变量)。最后,我们使用新的GameState
保存TotalPixoosGS
表。
一旦应用再次启动,该过程将重复。
现在,问题是什么?好吧,当你有1个变量时,就像在这种情况下,它看起来很简单。但是,当你需要管理超过50个变量时,写入可能会很痛苦。有什么方法可以缩短这个吗?
无论如何,这只是一小段代码,以实现这个想法:
GameState = loadsave.loadTable("GameState.json")
if GameState == nil then
GameState = {
TotalPixoosGS = 0,
PixoosQuantityGS = 0,
PixoosPerSecondGS = 0,
BottlesQuantityGS = 0,
MaxBottlesFoundGS = 0,
BottlesPriceGS = 0.005,
WillFindBottlesChanceGS = 10,
CanFindBottlesGS = 0,
MaxClickableGS = 5,
MaxTrashCanValueGS = 5,
}
loadsave.saveTable(GameState, "GameState.json")
end
TotalPixoos = GameState.TotalPixoosGS
PixoosQuantity = GameState.PixoosQuantityGS
PixoosPerSecond = GameState.PixoosPerSecondGS
BottlesQuantity = GameState.BottlesQuantityGS
MaxBottlesFound = GameState.MaxBottlesFoundGS
BottlesPrice = GameState.BottlesPriceGS
WillFindBottlesChance = GameState.WillFindBottlesChanceGS
CanFindBottles = GameState.CanFindBottlesGS
MaxClickable = GameState.MaxClickableGS
MaxTrashCanValue = GameState.MaxTrashCanValueGS
查看有多少丑陋的代码?这是退出:
if ( event.type == "applicationExit" ) then
GameState = {
TotalPixoosGS = TotalPixoos,
PixoosQuantityGS = PixoosQuantity,
PixoosPerSecondGS = PixoosPerSecond,
BottlesQuantityGS = BottlesQuantity,
MaxBottlesFoundGS = MaxBottlesFound,
BottlesPriceGS = BottlesPrice,
WillFindBottlesChanceGS = WillFindBottlesChance,
CanFindBottlesGS = CanFindBottles,
MaxClickableGS = MaxClickable,
MaxTrashCanValueGS = MaxTrashCanValue,
}
loadsave.saveTable(GameState, "GameState.json")
end
任何人如果有更好的方法或想法如何解决这个问题?
答案 0 :(得分:2)
这里的问题是您将数据存储在需要存储在表中的独立全局变量中以进行保存,然后从表中提取以进行加载。
如果您只是将表本身用作通用代码中的全局变量,则可以避免执行所有这些操作。
因此,在检查值/ etc时,不要编写使用TotalPixoosGS
或PixoosQuantityGS
的代码。您编写的代码使用GameState.TotalPixoosGS
和GameState.PixoosQuantityGS
代替,然后直接从/向全局GameState
表保存和加载。