3

我是 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],但我得到一个错误:“预期的参数类型:预期的用户数据”

4

2 回答 2

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
于 2013-08-13T15:17:06.770 回答
0

正如亚历克斯所展示的那样,问题不在于表格的工作方式,而在于我以错误的方式显示数字。表可以用作一维数组,然后一切都很好。

尽管这不是将它们用作二维数组的解决方案,但主要问题已解决。

于 2013-08-13T14:57:18.363 回答