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

时间:2015-02-20 21:40:44

标签: function lua lua-table

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

    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

1 个答案:

答案 0 :(得分:2)

你有一个无限循环。

local tempWorld = world不会复制world,它只会创建另一个引用。因此,当world通过world.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次。

相关问题