程序运行时,代码将加到内存上运行,代码运行到需要存储数据时,内存将要存储的数据储存到磁盘上,当代码运行到需要读取数据时,内存将磁盘上的数据读取出来。
Json数据:
一种数据交换格式,可将数据转换成字符串或者表。
local table_my = {a=1,[5]=3}
local str = json.encode(table_my) --编码,将Lua table数据编码为JSON字符串
local table_old = json.decode(str) --解码,将JSON字符串解码为Lua table数据
以上例子,编码后得到字符串,str = "{"a":1,"5":3}",一般存储数据时,可转换成Json字符串后存储。
当读取数据后,获得的是字符串,此时再将数据转换成table数据,以便于数据的提取。
数据的存取:
方法一:
io.writefile(configFile,str) --configFile为存取路径
io.readfile(configFile)
例子:
local configFile = device.writablePath.."hxgame.config" --存放路径
local str = string.format("do local grid,bestScore,totalScore,WINSTR,isOver \
=%s,%d,%d,\'%s\',%s return grid,bestScore,totalScore,WINSTR,isOver end",
gridstr,bestScore,totalScore,WINSTR,isOverstr)
io.writefile(configFile,str) --将str以代码块的形式存储
end
function MainScene:loadStatus()
if io.exists(configFile) then
local str = io.readfile(configFile)
if str then
local f = loadstring(str)
local _grid,_bestScore,_totalScore,_WINSTR,_isOver = f() --运行此代码块
if _grid and _bestScore and _totalScore and _WINSTR then
grid,bestScore,totalScore,WINSTR,isOver = _grid,_bestScore,_totalScore,_WINSTR,_isOver
end
end
end
end
方法二:
cc.UserDefault:getInstance():getStringForKey(key,value) --value为字符串
cc.UserDefault:getInstance():setIntegerForKey(key,value) --value为整数
例子:
local table = {
id = 55,
name = "david",
score = 100,
}
local str_table = json.encode(table) --将table转换为字符串
cc.UserDefault:getInstance():setStringForKey("str_table",str_table) --存储此字符串
local str2 = cc.UserDefault:getInstance():getStringForKey("str_table") --读取此字符串
local table2 = json.decode(str2) --将字符串再转换table