【cocos2dx 3.3 lua】09 lua配置文件读写

来源:互联网 发布:淘宝 店招 代码 编辑:程序博客网 时间:2024/06/06 02:22

用lua格式做配置文件或记录文件,代码如下:

--[[lua配置处理类读写lua格式配置文件Load 读取lua配置文件Save 写入lua配置文件GetConfig 获取当前缓存的配置--]]local LuaConfig = class("LuaConfig")LuaConfig._instance = nil-- 各种参数LuaConfig._config = nilLuaConfig._defFilePath = cc.FileUtils:getInstance():getWritablePath().."config.lua"LuaConfig._formatString = ""function LuaConfig:GetInstance()    if LuaConfig._instance == nil then        LuaConfig._instance = LuaConfig.new()    end    return LuaConfig._instanceendfunction LuaConfig:ReleaseInstance()    if LuaConfig._instance ~= nil then        LuaConfig._instance:Release()        LuaConfig._instance = nil    endendfunction LuaConfig:ctor()end-- 设置格式化输出缩进function LuaConfig:SetFormatString(formatString)    self._formatString = formatStringend-- 序列化 准备存储 返回序列化后的字符串 缩进暂时为1空格 参数为nil时 处理_configfunction LuaConfig:Serialize(config, formatString)    if config == nil then -- nil不处理        return "nil"    end    local serializedConfig = ""    local formatString = formatString or self._formatString    local tableFormatString = string.gsub(formatString, self._formatString, "", 1) -- table去掉一个缩进    -- 序列化操作 number boolean string table      local paramType = type(config)    if paramType == "number" then        serializedConfig = serializedConfig..tostring(config)    elseif paramType == "boolean" then        serializedConfig = serializedConfig..tostring(config)    elseif paramType == "string" then        serializedConfig = serializedConfig..string.format("%q", config) -- 接受一个字符串并将其转化为可安全被Lua编译器读入的格式 主要防止使用if或其他关键字之类的作为key的情况    elseif paramType == "table" then        serializedConfig = serializedConfig.."\n"        serializedConfig = serializedConfig..tableFormatString.."{\n"        for k,v in pairs(config) do            serializedConfig = serializedConfig..formatString            serializedConfig = serializedConfig.."["..self:Serialize(k).."]"            serializedConfig = serializedConfig.." = "            serializedConfig = serializedConfig..self:Serialize(v, formatString..self._formatString)            serializedConfig = serializedConfig..",\n"        end        serializedConfig = serializedConfig..tableFormatString.."}"    else        print("can not handle this type:"..paramType)    end    return serializedConfigend-- 获取当前配置function LuaConfig:GetConfig()    return self._configend-- 读取配置 同时返回读取到的配置 方便外部操作function LuaConfig:Load(path)    if path == nil then        path = self._defFilePath    end    local content = self:ReadFromFile(path)    if content ~= nil then        self._config = loadstring("return "..content)() -- loadstring载入后默认为function类型,需要加()以调用    end    return self._configend-- 保存配置 参数为nil时 处理_configfunction LuaConfig:Save(path, config)    -- 默认处理_config    if config == nil then        config = self._config    end    if path = nil then        path = self._defFilePath    end    local isSuccess = false    -- 设置缩进    self:SetFormatString("  ")    -- 序列化    local serializedConfig = self:Serialize(config)    if serializedConfig ~= nil then        -- 存储到文件        isSuccess = self:SaveToFile(serializedConfig, path)    end    return isSuccessend-- 存储function LuaConfig:SaveToFile(content, path)    local isSuccess = false    local file = io.open(path, "w")    if file ~= nil then        file:wirte(content)        file:flush()        isSuccess = true    end    io.close() -- 同file:close() 参数可传file,或默认关闭当前打开的    return isSuccessend-- 读取function LuaConfig:ReadFromFile(path)    local content = nil    --[[ 调用lua本身接口 可能有文件大小限制 据说是最大9K 未验证    local file = io.open(path, "r")    if file ~= nil then        content = file:read("*a") -- 读取所有内容    end    io.close() -- 同file:close() 参数可传file,或默认关闭当前打开的    --]]    ---[[ 调用cocos相关接口    content = cc.FileUtils:getInstance():getStringFromFile(path)    --]]    return contentendreturn LuaConfig

主要是其中的序列化部分,其他都比较容易理解。




原创粉丝点击