I’m facing a challenge with eventListeners in several of my functions. Here is a simplified example:
local function exitOverlayMode( event ) composer.hideOverlay() -- Hides the overlay (re-enable underneath content) if( globalData.backgroundRectangleOverlay ~= nil ) then globalData.backgroundRectangleOverlay:removeSelf() globalData.backgroundRectangleOverlay = nil end -- Do some more stuff return true -- Prevents propagating the event to other objects end -- exitOverlayMode
local function upgradeLevel( event ) exitOverlayMode() -- Exiting the overlay and re-enable some in-game functions -- Do stuff to upgrade the building end
-- Overlay scene function create( event ) local upgradeBlockArea = display.newRoundedRect(100, 100, 400, 200, 60 ) upgradeBlockArea:addEventListener("tap", upgradeLevel) -- Starts listening to tap on the upgradeBlockArea end -- "scene:create()"
In my scene:create() I have a rectangle area acting as a button, which will call the upgradeLevel function when the user taps the area. For that I create the addEventListener on upgradeBlockArea.
In the upgradeLevel , I would like to remove the EventListener on upgradeBlockArea (because I have read that it is best practice) and the only way to do that is to change my code and using pseudo global variable. For that I would add the EventListenaer and remove it as follows:
-- In overlay scene globalData.upgradeBlockArea:addEventListener("tap", upgradeLevel)
-- In upgrade function globalData.upgradeBlockArea:removeEventListener("tap", upgradeLevel)
Is that the only/best way to do it? Any recommendation? Is it necessary to always remove event listeners, even in an overlay ?