【问题标题】:2D Arrays in LUA not possible in loop?LUA 中的二维数组无法循环使用?
【发布时间】:2018-11-14 09:52:15
【问题描述】:

出于某种原因,我多年来一直被困在这个问题上。我无法弄清楚如何在不重置所有值的情况下定义 grid[i] 。我想让程序检查二维数组中的点是否已经被占用,然后它不会放置块。

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("Placing..")
            else
                part:Destroy()
                grid[i][j] = 0
            end
        end
    end
end

【问题讨论】:

  • print("Placing..")后应该有grid[i][j] = 1
  • 我还是没能解决这个问题。
  • grid[i] = grid[i] or {}
  • math.pow(i,2)+math.pow(j,2)&lt;math.pow(radius, 2) 幂比平方根更容易计算,因此计算速度更快 :)
  • 还可以考虑在开头添加local pow = math.pow,然后只使用pow。与您经常使用的其他功能相同。这减少了表查找并使代码更快。

标签: arrays loops lua nested 2d


【解决方案1】:
radius = 10

grid = {}

while true do
    for i = -radius,radius do
        grid[i] = {}
--      ^ This line here!
        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("Placing..")
            else
                part:Destroy()
                grid[i][j] = 0
            end
        end
    end
end

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

我假设您只想添加一个新表(如果还没有的话);这可以通过

来实现
grid[i] = grid[i] or {}

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

应该注意的是,这段代码有很大的优化潜力。 Here'sa PDF 深入描述了提高 Lua 代码速度的最常用方法,如果您不想阅读有关该主题的整篇论文,here 是一个更适合初学者的列表:)

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    相关资源
    最近更新 更多