如何在Corona中实现“NSUserDefaults”功能?

时间:2012-02-15 20:47:01

标签: iphone lua nsuserdefaults corona

我想要的只是保存我的用户(播放器)高分,并且此信息在Corona SDK(Lua)中的应用程序(游戏)启动之间保持不变。我确实希望它能很好地适用于iOS和Android。我的高分数据实际上是两个包含数字的lua表。

最正确,最简单的方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以将分数保存到表格中,然后将其序列化为json格式的文本文件。

local json=require("json")
local savefile="scores.json"

scores= 
    {
        {
            level=1,
            status=0,
            highscore=0,
        },
        {
            level=2,
            status=0,
            highscore=0,
        },
    }

function getScore(filename, base)
    -- set default base dir if none specified
    if not base then 
        base = system.DocumentsDirectory 
    end

    -- create a file path for corona i/o
    local path = system.pathForFile(filename, base)

    -- will hold contents of file
    local contents

    -- io.open opens a file at path. returns nil if no file found
    local file = io.open(path, "r")
        local scores
    if file then
        -- read all contents of file into a string
        contents = file:read( "*a" )
            if content ~= nil then
            scores=json.decode(content)
            end
        io.close(file) -- close the file after using it
    end

    return scores
end

function saveScore(filename, base)
    -- set default base dir if none specified
    if not base then 
        base = system.DocumentsDirectory 
    end

    -- create a file path for corona i/o
    local path = system.pathForFile(filename, base)

    -- io.open opens a file at path. returns nil if no file found
    local file = io.open(path, "wb")
    if file then
        -- write all contents of file into a string
        file:write(json.encode(scores))
        io.close(file) -- close the file after using it
    end
end

全局scores变量可以像普通表一样进行操作,当您想要加载或保存scores表时,可以调用上面的函数。