Love2d Lua 报错 bad argument #1 to 'insert' (table expected, got nil)

在运行我的 Lua 脚本时,我一直收到报错信息。 错误信息为: bad argument #1 to 'insert' (table expected, got nil)

这里是我的游戏循环代码:

local GameLoop = {}

local insert = table.insert
local remove = table.remove

function GameLoop:create()

    local gameLoop = {}

    function gameLoop:addLoop(obj)

        insert(self.clocks,obj)

    end

    function gameLoop:update(dt)

        for clocks = 0,#self.clocks do
            local obj = self.clocks[clocks]
            if obj ~= nil then
                obj:tick(dt)
            end
        end

    end

return gameLoop

end

return GameLoop
点赞
用户2505965
用户2505965

从您展示的代码中可以看出,您的 gameLoop 表不包含一个 clocks 成员,所以实际上您将 nil 传递给了 insert(self.clocks, obj) 的第一个参数。

简单解决方法是添加该成员。

local gameLoop = { clocks = {} }

附带地,使用元表编写这种结构通常更好,因为它减少了函数重复。

local insert, remove =
    table.insert, table.remove

local GameLoop = {}
GameLoop.__index = GameLoop

function GameLoop:create ()
    return setmetatable({
        clocks = {}
    }, self)
end

function GameLoop:addLoop (obj)
    insert(self.clocks, obj)
end

function GameLoop:update (dt)
    for _, clock in ipairs(self.clocks) do
        obj:tick(dt)
    end
end

return GameLoop
2016-11-23 22:57:39