加载保存模块- Corona SDK

我在我的 Corona SDK 游戏中使用了 Rob Miracle 的 loadsave 模块。

我对此有一个小问题:

如果我将一个 json 表保存在 mydata.lua 中,例如:

M={}
M.highScore = 0
M.levels=1

loadsave.saveTable(M,"settings.json")

return M

接下来,如果我在 game.lua 文件中执行以下操作:

function gameOver
    If gamewin == false then
    mydata.level = mydata.level + 1

gamewin = true

loadsave.saveTable(mydata,"settings.json")

end

这样做会导致 loadsave 模块覆盖整个 json 文件,因此将其中的高分参数移除吗?

请帮助。

点赞
用户1190388
用户1190388

是的。从 saveTable 函数的 源代码 可以看出:

function saveTable(t, filename)
    local path = system.pathForFile( filename, system.DocumentsDirectory)
    local file = io.open(path, "w")
    if file then
        local contents = json.encode(t)
        file:write( contents )
        io.close( file )
        return true
    else
        return false
    end
end

正如你所看到的,该函数使用 io.open(path, "w") 来写入文件。由于在写入模式下(w 参数)使用 io.open 会创建一个全新的文件,因此旧文件将被覆盖。

你可以在写入新值之前先从 JSON 文件中加载内容:

function gameOver()
    local mydata = loadsave.loadTable "settings.json"
    if gamewin == false then
        mydata.level = mydata.level + 1
        gamewin = true
    .
    .
    .
    loadsave.saveTable(mydata,"settings.json")
end
2015-09-14 12:19:35