【问题标题】:Lua error making 16x16 gridLua 错误制作 16x16 网格
【发布时间】:2016-07-28 03:00:26
【问题描述】:

以下代码给了我以下错误:

尝试索引一个 nil 值

    -- Making grid
grid = {}
local i = 1
local ii = 1
mainx, mainy = love.graphics.getDimensions()
while(i<=mainx) do
    if(i%16==0) then
        while(ii<=mainy) do
            if(ii%16==0) then
                grid[i][ii] = nil
            end
            ii = ii + 1
        end
    end
    i = i+1
end

我知道 lua 是基于 1 的,但我真的不知道这里出了什么问题。

我们很乐意提供修复:)

注意:mainx,mainy 应该是 800 和 600。

【问题讨论】:

  • 听说过for 循环吗?
  • 是的。但我觉得在这种情况下它没有用,因为网格的大小没有完全预定义。
  • 您应该先创建一个空数组grid[i] = {},然后再使用grid[i][ii]对其进行索引
  • 随时在答案中发表该评论,我很乐意接受。谢谢!
  • @HåvardNygård - 您还在错误的位置初始化ii(将其移到外循环内)。不好意思,懒得写答案了。

标签: lua


【解决方案1】:

在执行grid[i][ii] = nil 之前,您忘记将grid[i] 分配给{}。第二次取消引用 [ii] 失败,因为 grid[i] == nil

我在下面稍微重构了你的代码。

-- Making grid
local grid = {}
local mainx, mainy = love.graphics.getDimensions()
for i = 16,mainx,16 do  -- syntax: for i = <start_value>, <max value (included)> [, <step>]
    grid[i] = {};
    for ii = 16,mainy,16 do
        grid[i][ii] = i*ii  -- some value
    end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多