OK there are many answers to this question, but I cant seem to get it to work. My buttons are created in function scene:createScene( event ) and when I move on to the next scene, I'm trying scenePurge and removing buttons individually but it does not seem to be working. On the next scene the button is not visible, but if I press where the button was on the previous scene it is still active. What is the best way to remove these objects?
local storyboard = require( "storyboard" )
local scene = storyboard.newScene()
--storyboard.removeScene( "login" )
---------------------------------------------------------------------------------
-- BEGINNING OF YOUR IMPLEMENTATION
---------------------------------------------------------------------------------
local image, image2
-- Called when the scene's view does not exist:
function scene:createScene( event )
local widget = require( "widget" )
local p1ButtonRelease = function( event )
storyboard.gotoScene( "maths_dif", "slideLeft", 1000 )
print("touch")
return true
end
local p2ButtonRelease = function( event )
storyboard.gotoScene( "words", "slideLeft", 1000 )
print("touch")
return true
end
local screenGroup = self.view
image = display.newImage( "images/Background(640x480).png", -20 ,0 )
image2 = display.newImage( "Logo_small.png", 170,0)
--screenGroup:insert( image )
print( "\n2: createScene event" )
local p1Button = widget.newButton{
default = "images/SinglePlayer_button.png",
over = "images/SinglePlayer_button.png",
--onPress = button1Press,
onRelease = p1ButtonRelease,
-- fontSize = 20,
-- labelColor = { default={ 255, 250, 250}, over={ 0, 0, 0,} },
-- label = "+",
-- emboss = true
}
local p2Button = widget.newButton{
default = "images/2Player_button.png",
over = "images/2Player_button.png",
--onPress = button1Press,
onRelease = p2ButtonRelease,
-- fontSize = 20,
-- labelColor = { default={ 255, 250, 250}, over={ 0, 0, 0,} },
-- label = "+",
-- emboss = true
}
p1Button.x = 240; p1Button.y = 180
p2Button.x = 240; p2Button.y = 260
end
-- Called immediately after scene has moved onscreen:
function scene:enterScene( event )
print( "2: enterScene event" )
-- remove previous scene's view
storyboard.purgeScene( "login" )
display.remove(p1Button)
-- -- Update Lua memory text display
-- local showMem = function()
image:addEventListener( "touch", image )
-- text3.isVisible = true
-- text2.text = text2.text .. collectgarbage("count")/1000 .. "MB"
-- text2.x = display.contentWidth * 0.5
-- end
-- memTimer = timer.performWithDelay( 1000, showMem, 1 )
end
-- Called when scene is about to move offscreen:
function scene:exitScene()
print( "2: exitScene event" )
storyboard.removeScene("login")
storyboard.removeScene("words")
storyboard.removeScene("guess_word")
storyboard.removeScene("maths_dif")
storyboard.removeScene("scene1")
display.remove(p1Button)
p1Button = nil
display.remove(p2Button)
p2Button = nil
-- remove touch listener for image
image:removeEventListener( "touch", image )
end
-- Called prior to the removal of scene's "view" (display group)
function scene:destroyScene( event )
print( "((destroying scene 2's view))" )
end
---------------------------------------------------------------------------------
-- END OF YOUR IMPLEMENTATION
---------------------------------------------------------------------------------
-- "createScene" event is dispatched if scene's view does not exist
scene:addEventListener( "createScene", scene )
-- "enterScene" event is dispatched whenever scene transition has finished
scene:addEventListener( "enterScene", scene )
-- "exitScene" event is dispatched before next scene's transition begins
scene:addEventListener( "exitScene", scene )
-- "destroyScene" event is dispatched before view is unloaded, which can be
-- automatically unloaded in low memory situations, or explicitly via a call to
-- storyboard.purgeScene() or storyboard.removeScene().
scene:addEventListener( "destroyScene", scene )
---------------------------------------------------------------------------------
return scene
I'm trying to remove objects, so that the won't affect the next scene, but cant seem to do it.
It has been suggested to use storyboard.removeAll() at the start of each scene, but the solution I have found personally is not to use widget button release function to change scene instead I'm creating an image object and giving it an EventListener e.g.
p1Button = display.newImage("images/SinglePlayer_button.png", 90, 140)
p1Button.touch = onSceneTouch
p1Button:addEventListener("touch", p1Button)
local function onSceneTouch( self, event )
if event.phase == "began" then
storyboard.gotoScene( "words", "slideLeft", 1000 )
return true
end
end
I then remove the objects event listener in the exitScene() function. On my next scene these previous buttons have no effect.