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

标签 function lua lua-table

我正在做一个实验,看看我是否能够在 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/

相关文章:

c# - 尝试使用 LuaInterface 时出现 BadImageFormatException

for-loop - 使用 for 循环搜索表(字符串名称)(在 Lua 中)

indexing - 检查表中索引是否存在

string - Lua将字符串拆分为表的键和值

php - 使用 array_walk_recursive 从类中调用函数

匿名函数中的 PHP 变量

c++ - 将模板化类型初始化为 "zero"

string - 如何使用 string.find 查找最后一次出现的模式?

c++ - LLVM Callinst函数如何获取(真实)名称?

Lua:对象内的表