I'm old to programming but new to Lua + the pd SDK, and I'm trying to wrap my head around how objects are handled with the Object API. I'm having no trouble creating and extending classes, adding methods and properties, or importing them. However, I'm having a weird issue where I instance and object and bind it to a variable, but that variable remains nil. For instance, I have a Bounds class (in a bounds.lua file) that looks like this:
class('Bounds').extends(gfx.sprite) function Bounds:init(yStartPosition) Bounds.super.init(self) local boundsImage = gfx.image.new(disp.getWidth(), disp.getHeight()/4) gfx.pushContext(boundsImage) gfx.fillRect(0, 0, disp.getWidth(), disp.getHeight()) --gfx.drawRect(0, 0, hashWidth, hashHeight) gfx.popContext(boundsImage) self:setImage(boundsImage) self:moveTo(0, yStartPosition) self:setCenter(0, 0.5) -- anchor sprite at left edge self:add() -- test self:shiftBounds() print(self) end function Bounds:shiftBounds() print('enter shiftBounds') end
Then back in main.lua, I have something like this:
boundaryTop = new Bounds(0) boundaryTop.name = "top" print(boundaryTop)
The object instance works fine, and it behaves properly in the game. However, any time I try to reference the boundaryTop variable, it's nil, so doing the dot assignment throws an error, and the print statement returns nil. It's almost the constructor doesn't return an object? (By the way, the three-line snippet above is scoped to a function, but even when I move it global scope, I have the same issue.)
There must be something obvious I'm missing.