更短、更简单、更有效的数据保存方式?
Shorter, easier and more effective way of saving data?
感谢这个伟大的社区,我成功地为我的游戏制作了一个保存系统!但是,写起来有点漫长和痛苦。我需要有关如何(如果可能)使它更短和更容易的帮助。
所以,这就是我得到的(这个例子只使用 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 文件的 table 的声明。我使用了从这里获得的 .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")
再次使用上面 link 中的函数,它只是从 GameState
table 创建 .json 文件,并将其称为 GameState.json
.
TotalPixoos = GameState.TotalPixoosGS
最后,将GameState.TotalPixoosGS
的值赋值给我们的变量TotalPixoos
(如果GameState.json
不存在,就会赋值0
)。到目前为止,非常简单,对吧?
现在,打开应用程序时调用了这段代码。
以下代码是我在退出应用程序时使用的代码:
if ( event.type == "applicationExit" ) then
GameState = {
TotalPixoosGS = TotalPixoos,
}
loadsave.saveTable(GameState, "GameState.json")
end
基本上,它所做的是:当应用程序即将退出时,您只需将 TotalPixoosGS
的值更改为我们当前的 TotalPixoos
值(即随时间变化的变量).最后,我们将 GameState
table 保存为新的、更改后的 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
有没有人有更好的方法或想法来处理这个问题?
这里的问题是您将数据存储在独立的全局变量中,您需要将这些数据存储在 table 中以保存,然后从 table 中获取以进行加载。
如果您只是在通用代码中使用 table 本身作为全局变量,则可以避免所有这些操作。
因此,在检查 values/etc 时,不要编写使用 TotalPixoosGS
或 PixoosQuantityGS
的代码。您编写的代码使用 GameState.TotalPixoosGS
和 GameState.PixoosQuantityGS
,然后直接保存并加载 from/to 全局 GameState
table.
感谢这个伟大的社区,我成功地为我的游戏制作了一个保存系统!但是,写起来有点漫长和痛苦。我需要有关如何(如果可能)使它更短和更容易的帮助。
所以,这就是我得到的(这个例子只使用 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 文件的 table 的声明。我使用了从这里获得的 .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")
再次使用上面 link 中的函数,它只是从 GameState
table 创建 .json 文件,并将其称为 GameState.json
.
TotalPixoos = GameState.TotalPixoosGS
最后,将GameState.TotalPixoosGS
的值赋值给我们的变量TotalPixoos
(如果GameState.json
不存在,就会赋值0
)。到目前为止,非常简单,对吧?
现在,打开应用程序时调用了这段代码。
以下代码是我在退出应用程序时使用的代码:
if ( event.type == "applicationExit" ) then
GameState = {
TotalPixoosGS = TotalPixoos,
}
loadsave.saveTable(GameState, "GameState.json")
end
基本上,它所做的是:当应用程序即将退出时,您只需将 TotalPixoosGS
的值更改为我们当前的 TotalPixoos
值(即随时间变化的变量).最后,我们将 GameState
table 保存为新的、更改后的 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
有没有人有更好的方法或想法来处理这个问题?
这里的问题是您将数据存储在独立的全局变量中,您需要将这些数据存储在 table 中以保存,然后从 table 中获取以进行加载。
如果您只是在通用代码中使用 table 本身作为全局变量,则可以避免所有这些操作。
因此,在检查 values/etc 时,不要编写使用 TotalPixoosGS
或 PixoosQuantityGS
的代码。您编写的代码使用 GameState.TotalPixoosGS
和 GameState.PixoosQuantityGS
,然后直接保存并加载 from/to 全局 GameState
table.