在 ipairs() 中使用函数时,LÖVE 崩溃

LÖVE crashes, when using a function in ipairs()

我是 运行 一个关于我是否能够在 LÖVE 中使用自动生成种子的实验,但我 运行 遇到了问题。当我尝试使用 ipairs 通过 table 将图块添加到游戏中时,它崩溃了。 有人能看出这段代码的问题吗?:

    world = {}

function world.generate()
        for i = 1, 100 do
                world.addTile(i, love.math.random(1, 3), 1)
        end
        local tempWorld = world
        for i,v in ipairs(tempWorld) do
                world.addTile(v.x, v.y+1, 1)
        end
end

function world.addTile(x, y, id)
        for i,v in ipairs(tile) do
                if v.id == id then
                        table.insert(world, {id = id, x = x*tile.w, y = y*tile.h})
                else
                        print("The following id was not recognised: "..id)
                end
        end
end

function world.draw()
        for i,v in ipairs(world) do
                love.graphics.draw(tile.getImage(v.id), v.x, v.y)
        end
end

你有一个无限循环。

local tempWorld = world 不会复制 world,它只是创建另一个对它的引用。因此,当 worldworld.addTile 添加另一个项目时,for 循环:

for i,v in ipairs(tempWorld) do
   world.addTile(v.x, v.y+1, 1)
end

有一个新的停止点,因为 ipairs 还有一项要迭代。重复此操作,直到您 运行 内存不足。您可能想要保存旧列表的大小:

local oldsize = #world
for i=1, oldsize do
   local v = world[i]
   world.addTile(v.x, v.y+1, 1)
end

现在它不会迭代超过 oldsize 次。