Corona SDK JSON 用法

Corona SDK JSON usage

我有一个正在运行的 JSON 库,我用它来加载一组图块 ID。当我直接从文件资源管理器双击 main.lua 时,它 运行 很好,但是当我打开 Corona Simulator 并从那里打开我的项目或构建我的项目并 运行 它在我的测试设备上时,当我尝试使用我加载的数据时,它给了我一个空引用错误。

这是从 JSON 文件加载 table 的函数:

function fileIO.loadJSONFile (fileName)
    local path = fileName
    local contents = ""
    local loadingTable = {}
    local file = io.open (path, "r")
    print (file)
    if file then
        local contents = file:read ("*a")
        loadingTable = json.decode (contents)
        io.close (file)

        return loadingTable
    end

    return nil
end

用法如下:

function wr:renderChunkFile (path)
    local data = fileIO.loadJSONFile (path)

    self:renderChunk (data)
end

function wr:renderChunk (data)
    local a, b = 1

    if (self.img ~= nil) then
        a = #self.img + 1
        self.img[a] = {}
    else
        self.img[1] = {}
    end

    if (self.chunks ~= nil) then
        b = #self.chunks + 1
        self.chunks[b] = display.newGroup ()
    else
        self.chunks[1] = display.newGroup ()
    end

    for i = 1, #data do  -- Y axis                       ERROR IS HERE
        self.img[a][i] = {}
        for j = 1, #data[i] do  -- Z axis
            self.img[a][i][j] = {}
            for k = 1, #data[i][j] do  -- X axis
                if (data[i + 1] ~= nil) then
                    if (data[i + 1][j][k] < self.transparentLimit) then
                        self.img[a][i][j][k] = display.newImage ("images/tiles/"..data[i][j][k]..".png", k*self.tileWidth, display.contentHeight -j*self.tileDepth - i*self.tileThickness)
                        self.chunks[b]:insert (self.img[a][i][j][k])

                    elseif(data[i + 1] == nil) then
                        self.img[a][i][j][k] = display.newImage ("images/tiles/"..data[i][j][k]..".png", k*self.tileWidth, display.contentHeight -j*self.tileDepth - i*self.tileThickness)
                        self.chunks[b]:insert (self.img[a][i][j][k])
                    end
                end
            end
        end
    end
end

当它到达行 for i = 1, #data do 时,它告诉我它正在尝试访问 nil 字段的长度。我哪里错了?

编辑: 我觉得有必要更清楚地解释我的问题所在。我从这个程序中得到不一致的结果。当我在文件资源管理器中 select main.lua 并使用 Corona Simulator 打开它时,它可以工作。当我打开 Corona Simulator 并在内部导航到 main.lua 时,它不起作用。当我构建项目并在我的设备上测试它时,它不起作用。我真正需要的是深入了解 Corona 的 JSON 库和 APK 内部目录结构要求(目录嵌套限制、命名限制等)。如果有人想到其他可能导致我遇到的问题,请提出来!我对任何事情都持开放态度。

如果没有看到整个错误消息并且不知道 "path" 的值是什么,则很难推测。但是 Corona SDK 使用四个基本目录:

system.ResourceDirectory -- 与 main.lua 相同的文件夹并且是只读的 system.DocumentsDirectory -- 您的数据所在的可写文件夹 system.CachesDirectory -- 对于下载的文件 system.TemporaryDirectory -- 用于临时文件。

最后三个在模拟器中位于项目的 Sandbox master 文件夹中。在知道文件夹实际位置的设备上。

在您的情况下,如果您的 JSON 文件将包含在您的可下载应用程序中,您的 .json 文件应该与您的 main.lua (或子文件夹)并在 system.ResourceDirectory 中引用。