我正在进行一项关于我是否能够在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
答案 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
次。