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

前端之家收集整理的这篇文章主要介绍了【cocos2dx 3.3 lua】09 lua配置文件读写前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

  1. --[[
  2. lua配置处理类
  3. 读写lua格式配置文件
  4.  
  5. Load 读取lua配置文件
  6. Save 写入lua配置文件
  7. GetConfig 获取当前缓存的配置
  8. --]]
  9.  
  10. local LuaConfig = class("LuaConfig")
  11.  
  12. LuaConfig._instance = nil
  13.  
  14. -- 各种参数
  15. LuaConfig._config = nil
  16. LuaConfig._defFilePath = cc.FileUtils:getInstance():getWritablePath().."config.lua"
  17. LuaConfig._formatString = ""
  18.  
  19. function LuaConfig:GetInstance()
  20. if LuaConfig._instance == nil then
  21. LuaConfig._instance = LuaConfig.new()
  22. end
  23.  
  24. return LuaConfig._instance
  25. end
  26.  
  27. function LuaConfig:ReleaseInstance()
  28. if LuaConfig._instance ~= nil then
  29. LuaConfig._instance:Release()
  30. LuaConfig._instance = nil
  31. end
  32. end
  33.  
  34. function LuaConfig:ctor()
  35.  
  36. end
  37.  
  38. -- 设置格式化输出缩进
  39. function LuaConfig:SetFormatString(formatString)
  40. self._formatString = formatString
  41. end
  42.  
  43. -- 序列化 准备存储 返回序列化后的字符串 缩进暂时为1空格 参数为nil 处理_config
  44. function LuaConfig:Serialize(config,formatString)
  45. if config == nil then -- nil不处理
  46. return "nil"
  47. end
  48.  
  49. local serializedConfig = ""
  50. local formatString = formatString or self._formatString
  51. local tableFormatString = string.gsub(formatString,self._formatString,"",1) -- table去掉一个缩进
  52.  
  53. -- 序列化操作 number boolean string table
  54. local paramType = type(config)
  55. if paramType == "number" then
  56. serializedConfig = serializedConfig..tostring(config)
  57. elseif paramType == "boolean" then
  58. serializedConfig = serializedConfig..tostring(config)
  59. elseif paramType == "string" then
  60. serializedConfig = serializedConfig..string.format("%q",config) -- 接受一个字符串并将其转化为可安全被Lua编译器读入的格式 主要防止使用if或其他关键字之类的作为key的情况
  61. elseif paramType == "table" then
  62. serializedConfig = serializedConfig.."\n"
  63. serializedConfig = serializedConfig..tableFormatString.."{\n"
  64. for k,v in pairs(config) do
  65. serializedConfig = serializedConfig..formatString
  66. serializedConfig = serializedConfig.."["..self:Serialize(k).."]"
  67. serializedConfig = serializedConfig.." = "
  68. serializedConfig = serializedConfig..self:Serialize(v,formatString..self._formatString)
  69. serializedConfig = serializedConfig..",\n"
  70. end
  71. serializedConfig = serializedConfig..tableFormatString.."}"
  72. else
  73. print("can not handle this type:"..paramType)
  74. end
  75.  
  76. return serializedConfig
  77. end
  78.  
  79. -- 获取当前配置
  80. function LuaConfig:GetConfig()
  81. return self._config
  82. end
  83.  
  84. -- 读取配置 同时返回读取到的配置 方便外部操作
  85. function LuaConfig:Load(path)
  86. if path == nil then
  87. path = self._defFilePath
  88. end
  89.  
  90. local content = self:ReadFromFile(path)
  91. if content ~= nil then
  92. self._config = loadstring("return "..content)() -- loadstring载入后默认为function类型,需要加()以调用
  93. end
  94.  
  95. return self._config
  96. end
  97.  
  98. -- 保存配置 参数为nil 处理_config
  99. function LuaConfig:Save(path,config)
  100. -- 默认处理_config
  101. if config == nil then
  102. config = self._config
  103. end
  104. if path = nil then
  105. path = self._defFilePath
  106. end
  107.  
  108. local isSuccess = false
  109. -- 设置缩进
  110. self:SetFormatString(" ")
  111. -- 序列化
  112. local serializedConfig = self:Serialize(config)
  113. if serializedConfig ~= nil then
  114. -- 存储到文件
  115. isSuccess = self:SaveToFile(serializedConfig,path)
  116. end
  117.  
  118. return isSuccess
  119. end
  120.  
  121. -- 存储
  122. function LuaConfig:SaveToFile(content,path)
  123. local isSuccess = false
  124. local file = io.open(path,"w")
  125. if file ~= nil then
  126. file:wirte(content)
  127. file:flush()
  128. isSuccess = true
  129. end
  130. io.close() -- file:close() 参数可传file,或默认关闭当前打开的
  131.  
  132. return isSuccess
  133. end
  134.  
  135. -- 读取
  136. function LuaConfig:ReadFromFile(path)
  137. local content = nil
  138.  
  139. --[[ 调用lua本身接口 可能有文件大小限制 据说是最大9K 未验证
  140. local file = io.open(path,"r")
  141. if file ~= nil then
  142. content = file:read("*a") -- 读取所有内容
  143. end
  144. io.close() -- file:close() 参数可传file,或默认关闭当前打开的
  145. --]]
  146. ---[[ 调用cocos相关接口
  147. content = cc.FileUtils:getInstance():getStringFromFile(path)
  148. --]]
  149. return content
  150. end
  151.  
  152. return LuaConfig
主要是其中的序列化部分,其他都比较容易理解。

猜你在找的Cocos2d-x相关文章