【发布时间】:2014-10-04 08:34:24
【问题描述】:
我的 Corona 游戏中的 JSON 文件有问题。基本上,当您达到某些点时,游戏会为您提供奖杯(卡片)。然后将卡片信息写入 JSON 文件。当您启动游戏时,它会检查文件“playerCards.json”是否已经存在,如果不存在,它会创建具有以下结构的文件:
{"common":[],"uncommon":[],"rare":[]}
在游戏后期,玩家最终收到一张牌。下面的(简化的)代码运行:
local category = "common"
local rdm = math.random(1,20)
array = loadFile("playerCards.json")
array[category][rdm] = collection[category][rdm]
writeFile("playerCards.json", array)
Collection 是一个预加载的 Lua 表,其结构如下:{"common" = {"001", "002", "003",..., "020"}}。为了这个问题,我将卡片限制在某个类别(普通)。假设玩家赢得了 3 号牌,那么代码应该是这样运行的:
array["common"][3] = collection["common"][3]
结果表数组将是:
array = {"common" = {nil, nil, "003"}}
当我使用函数 writeFile("playerCards.json", array) 时,我将上面的表格编码到文件 playerCards.json 中。目前,这段代码完美运行,生成的 JSON 文件如下:
{"common":[null,null,"003"],"uncommon":[],"rare":[]}
当玩家拿到一张9以上的卡,比如15时,问题就来了。写入的时候,JSON文件变成了这样:
{"common":{"3":"003","15":"015"},"uncommon":[],"rare":[]}
相同的代码怎么会产生如此不同的结果?你能帮我解决这个问题吗?如果需要,这里是加载和写入函数的代码:
local loadFile = function(name)
local data = nil
local path = system.pathForFile(name, system.DocumentsDirectory)
handle = io.open(path, "r")
if handle then
data = json.decode(handle:read("*a"))
io.close(handle)
end
return data
end
local writeFile = function(name, data)
local path = system.pathForFile(name, system.DocumentsDirectory)
local handle = io.open(path, "w+")
if handle then
handle:write(json.encode(data))
io.close(handle)
end
end
【问题讨论】: