Reputation: 9590
How come I get a attempt to call method 'insert' (a nil value)
error on the line containing insert
?
Changing it to instance.sprites = bg
does make it work, but I want to return all sprites in a separate table (sprites).
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
Edit: Trying instance.sprites.bg = bg
does not work either. Give this error:
bad argument #-2 to 'insert' (Proxy expected, got nil)
Upvotes: 1
Views: 4636
Reputation: 7944
instance.index = writingTool
Should be
instance.__index = writingTool
Though I would remove the above line and implement it in the one below like so:
setmetatable(instance,{__index=writingTool})
Also, t:insert()
or t.insert()
aren't defined by default, to insert elements into a table you use the table.insert
function as defined below:
table.insert (table, [pos,] value)
so you should have table.insert(instance.sprites,bg)
. So with these modifications your function should look like:
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
Upvotes: 3