我是初学者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个coloumns和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]
但是我得到了一个错误:“预期的参数类型:期望的用户数据”
答案 0 :(得分:4)
您还可以使用多暗表。类似的东西:
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
答案 1 :(得分:0)
作为Alex shows it,问题不在于表的工作方式,而在于我以错误的方式显示数字。表可以用作一维数组,然后一切都很好。
尽管它不是将它们用作二维数组的解决方案,但主要问题已经解决。