LUA中的二维数组在循环中无法使用?

由于某种原因,我已经卡在这个问题上很久了。我无法弄清楚如何定义 grid[i],而不重置它的所有值。我想让程序检查2D数组中的点是否已经被占据,如果是,则不会放置块。

radius = 10

grid = {}

while true do
    for i = -radius,radius do
        grid[i] = {}
        for j = -radius,radius do
            if math.sqrt(math.pow(i,2)+math.pow(j,2))<radius and (not grid[i][j] or grid[i][j] == 0) then
                print("放置..")
            else
                part:销毁()
                grid[i][j] = 0
            end
        end
    end
end
点赞
用户4984564
用户4984564
radius = 10

grid = {}

while true do
    for i = -radius,radius do
        grid[i] = {}
--      ^ 这一行是关键!
        for j = -radius,radius do
            if math.sqrt(math.pow(i,2)+math.pow(j,2))<radius and (not grid[i][j] or grid[i][j] == 0) then
                print("放置中...")
            else
                part:Destroy()
                grid[i][j] = 0
            end
        end
    end
end

你的代码重置了网格,因为这正是你告诉它要做的事情。每当你迭代外部表时,你将其每个值重置为一个新的(空)表。

我猜你只想在没有表的情况下添加一个新表;可以通过以下方式实现:

grid[i] = grid[i] or {}

换句话说,“如果grid[i]有值,则将其设置为grid[i],否则将其设置为{}”。第一个什么也不做,第二个只在没有行存在时创建一个新行。这是Lua中很常见的习惯用法。

应该指出的是,该代码有很大的优化潜力。这里是一个详细介绍如何提高Lua代码速度的PDF,这里是一个适合初学者的更简单的列表,如果你不想读整篇的论文 : )

2018-06-05 12:22:38