使用 Lua 表作为二维数组
Posted
技术标签:
【中文标题】使用 Lua 表作为二维数组【英文标题】:Using Lua tables as 2-dimensional arrays 【发布时间】:2013-08-15 04:42:58 【问题描述】:我是 Lua 初学者,我尝试使用 Love2D 库在 Lua 中创建一些东西。
在加载函数中,我创建了一个表格并将其与元素(即数字)一起上传,以供以后用作多维数组。
function love.load()
Maximum_X = 32
Maximum_Y = 16
Start_X = 64
Start_Y = 32
MapTable = -- empty table
for i=1,Maximum_X*Maximum_Y do -- uploading table
table.insert(MapTable, 2)
end
end
然后我创建了一个函数来改变表格。因为我只是在试验表格,所以只有一个改变的值。至少,我想。
function KatamoriGen()
MapTable[4] = 3
end
function love.update(dt)
KatamoriGen()
end
之后,我将表格的元素打印在一个 32 列和 16 行的矩阵中。我看到这里不仅第1行的第4个元素改变了,而且第2行的第2个元素和第4行的第1个元素都变成了3。
这显然意味着Table[posX*posY]
也不起作用,因为乘法的结果是像4
这样的数字,并且操作会改变每个元素
X coordinate + Y coordinate = posX*posY
是真的。在示例代码中,这个等式的右边是 4。
一个小问题:为什么会这样?
主要问题是:如何准确识别MapTable
的元素?如何为 Lua 表实现 X 和 Y 维度?将它们用作二维数组?也许桌子?
编辑:这是绘图功能:
function love.draw()
for j=1,16 do
for i=1,32 do
love.graphics.draw(Tileset[MapTable[j*Maximum_X + i]], Start_X + 32*(i-1), Start_Y + 32*(j-1))
end
end
end
现在我很清楚这是错误的,正确的规则是MapTable[j*Maximum_X + i]
,但我得到一个错误:“预期的参数类型:预期的用户数据”
【问题讨论】:
你能把你所有的代码都发过来吗?特别是您进行打印的位置。就目前而言,加载和更新功能将按照您的预期工作,即仅更新单个值(尽管它会在更新循环中重复执行) 看来我搞砸了。抽签是下一个:function love.draw()
,然后在另一个循环中有一个循环来制作矩阵,这是最里面循环的主体:love.graphics.print(MapTable[i*j], Start_X + 32*(i-1), Start_Y + 32*(j-1))
之后是一个end
,ofc。现在我很清楚这是错误的,正确的规则是MapTable[j*Maximum_X + i]
,但我得到一个错误:“预期的参数类型:预期的用户数据”为了清楚起见,它也发布在 OP 中。
试试 MapTable[(j-1)*Maximum_X + i]。这样它从索引 1 开始,而不是 Maximum_X+1
哦,是的,就是这样。现在对我来说清楚。谢谢!
【参考方案1】:
您还可以使用多维度表。比如:
local MapTable =
local Maximum_X, Maximum_Y = 32, 16
local Start_X, Start_Y = 64, 32
function love.load()
for y = 1,Maximum_Y do
local row =
for x = 1,Maximum_X do
table.insert(row,2)
end
table.insert(MapTable,row)
end
end
function love.draw()
for y,row in ipairs(MapTable) do
for x,idx in ipairs(row) do
love.graphics.draw(Tileset[idx], Start_X + 32*(x-1), Start_Y + 32*(y-1))
end
end
end
【讨论】:
所以它实际上是一个表,如果我能看清楚的话,内部表包含每一行。相当聪明!我试图考虑在表中使用表,但没有考虑使用它们来存储每一行。 虽然这段代码没有显示出来,但是你可以使用MapTable[row][col]
访问元素。
你可以通过使用row[x]=2
和MapTable[y]=row
来避免table.insert
。【参考方案2】:
作为Alex shows it,问题不在于表格的工作方式,而在于我以错误的方式显示数字。表可以用作一维数组,然后一切都很好。
虽然这不是将它们用作二维数组的解决方案,但主要问题已经解决了。
【讨论】:
以上是关于使用 Lua 表作为二维数组的主要内容,如果未能解决你的问题,请参考以下文章