我正在做一个实验,看看我是否能够在 LÖVE 中使用自动生成种子,但我遇到了问题。当我尝试使用 ipairs 通过表格将图 block 添加到游戏中时,它崩溃了。 有人能看出这段代码的问题吗?:
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
,它只是创建另一个对其的引用。因此,当 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
次。
关于function - 在 ipairs() 中使用函数时,LÖVE 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28638705/