更短,更简单,更有效的数据保存方式?

时间:2016-03-15 22:08:58

标签: lua corona

感谢这个伟大的社区,我设法为我的游戏制作了一个保存系统!然而,写作有点漫长而且痛苦。我需要帮助,如何(如果可能的话)使这一点变得更短更容易。

所以,这就是我得到的(这个例子只使用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

任何人如果有更好的方法或想法如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

这里的问题是您将数据存储在需要存储在表中的独立全局变量中以进行保存,然后从表中提取以进行加载。

如果您只是将表本身用作通用代码中的全局变量,则可以避免执行所有这些操作。

因此,在检查值/ etc时,不要编写使用TotalPixoosGSPixoosQuantityGS的代码。您编写的代码使用GameState.TotalPixoosGSGameState.PixoosQuantityGS代替,然后直接从/向全局GameState表保存和加载。