【发布时间】: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
-
哦,是的,就是这样。现在对我来说清楚。谢谢!
标签: arrays lua lua-table love2d