1

为什么我attempt to call method 'insert' (a nil value)在包含的行上出现错误insert

将其更改为instance.sprites = bg确实可以使其工作,但我想将所有精灵返回一个单独的表(精灵)中。

local writingTool = {}

local _W, _H = display.contentWidth, display.contentHeight

function writingTool:new()
    local instance = {}
    instance.index = writingTool
    setmetatable(instance, self)

    instance.sprites = {}

    local bg = display.newImage("images/backgrounds/wooden_bg.png")
    bg.x = _W/2
    bg.y = _H/2
    instance.sprites:insert(bg)
    return instance
end

return writingTool

编辑:尝试instance.sprites.bg = bg也不起作用。给出这个错误:

bad argument #-2 to 'insert' (Proxy expected, got nil)
4

1 回答 1

3
instance.index = writingTool

应该

instance.__index = writingTool

虽然我会删除上面的行并在下面的行中实现它,如下所示:

setmetatable(instance,{__index=writingTool})

此外,t:insert()或者默认情况下t.insert()未定义,要将元素插入表中,请使用如下定义的函数:table.insert

table.insert (table, [pos,] 值)

所以你应该有table.insert(instance.sprites,bg)。因此,通过这些修改,您的函数应如下所示:

function writingTool:new()
    local instance = { sprites = {} }
    setmetatable(instance, {__index = wirtingTool})
    local bg = display.newImage("images/backgrounds/wooden_bg.png")
    bg.x = _W/2
    bg.y = _H/2
    table.insert(instance.sprites,bg)
    return instance
end
于 2013-05-16T12:11:39.270 回答