Atrag
Atrag

Reputation: 743

How can I remove these DisplayObjects at end of a scene?

I want the balloons in this scene, which are DisplayObjects, to disappear when the scene ends. I have added them to the local sceneGroup = scene.view by passing this as the first argument to display.newImageRect() and assumed this would be enough for them to be removed as they are listed in the destroy.scene bit at the bottom. However when it transitions to the next scene they are still there. Why are these DisplayObjects not being removed?

local composer = require( "composer" )

local scene = composer.newScene()


local Balloons 

local positioninsheetOptions = 100


local sheetOptions =
{
    frames =
    {
        {   
            x = 0,
            y = 0,
            width = 71,
            height = 100
        },
        {   
            x = 0,
            y = positioninsheetOptions,
            width = 71,
            height = 100
        },
        {   
            x = 0,
            y = positioninsheetOptions*2,
            width = 71,
            height = 100
        },
        {  
            x = 0,
            y = positioninsheetOptions*3,
            width = 71,
            height = 100
        },
        {  
            x = 0,
            y = positioninsheetOptions*4,
            width = 71,
            height = 100
        },
         {  
            x = 0,
            y = positioninsheetOptions*5,
            width = 71,
            height = 100
        },
         {  
            x = 0,
            y = positioninsheetOptions*6,
            width = 71,
            height = 100
        },
         {  
            x = 0,
            y = positioninsheetOptions*7,
            width = 71,
            height = 100
        },
         {  
            x = 0,
            y = positioninsheetOptions*8,
            width = 71,
            height = 100
        },

         {  
            x = 0,
            y = positioninsheetOptions*9,
            width = 71,
            height = 100
        },

             {  
            x = 0,
            y = positioninsheetOptions*10,
            width = 71,
            height = 100
        },


             {  
            x = 0,
            y = positioninsheetOptions*11,
            width = 71,
            height = 100
        },

         },
        }
local objectSheet = graphics.newImageSheet( "gameObjects.png", sheetOptions )
Balloons = {}

-- -----------------------------------------------------------------------------------
-- Code outside of the scene event functions below will only be executed ONCE unless
-- the scene is removed entirely (not recycled) via "composer.removeScene()"
-- -----------------------------------------------------------------------------------

local function gotoGame()
    composer.gotoScene( "game" )
end




-- -----------------------------------------------------------------------------------
-- Scene event functions
-- -----------------------------------------------------------------------------------

-- create()
function scene:create( event )

    local sceneGroup = self.view
    -- Code here runs when the scene is first created but has not yet appeared on screen

    local background = display.newImageRect( sceneGroup, "background.png", 800, 1400 )
    background.x = display.contentCenterX
    background.y = display.contentCenterY





        local balloonBlue1 = display.newImageRect(sceneGroup, objectSheet, 6, 71, 100)
        local balloonYellow1 = display.newImageRect(sceneGroup, objectSheet, 8, 71, 100)
        local balloonRed1 = display.newImageRect(sceneGroup, objectSheet, 10, 71, 100)
        local balloonBlue2 = display.newImageRect(sceneGroup, objectSheet, 6, 71, 100)

        local Balloons = display.newGroup()

    Balloons:insert( balloonBlue1 )
    Balloons:insert( balloonYellow1 )
    Balloons:insert( balloonRed1 )
    Balloons:insert( balloonBlue2 )


    Balloons:addEventListener( "tap", gotoGame )

    balloonBlue1.x = (display.contentWidth/8)
    balloonBlue1.y = balloonBlue1.height 

        balloonYellow1.x = (display.contentWidth/8)*3
    balloonYellow1.y = balloonBlue1.height 

        balloonRed1.x = (display.contentWidth/8)*5
    balloonRed1.y = balloonBlue1.height 

    balloonBlue2.x = (display.contentWidth/8)*7
    balloonBlue2.y = balloonBlue1.height 

end


-- show()
function scene:show( event )

    local sceneGroup = self.view
    local phase = event.phase

    if ( phase == "will" ) then
        -- Code here runs when the scene is still off screen (but is about to come on screen)

    elseif ( phase == "did" ) then
        -- Code here runs when the scene is entirely on screen

    end
end


-- hide()
function scene:hide( event )

    local sceneGroup = self.view
    local phase = event.phase

    if ( phase == "will" ) then

    elseif ( phase == "did" ) then
        -- Code here runs immediately after the scene goes entirely off screen

    end
end


-- destroy()
function scene:destroy( event )

    local sceneGroup = self.view

    -- Code here runs prior to the removal of scene's view

end


-- -----------------------------------------------------------------------------------
-- Scene event function listeners
-- -----------------------------------------------------------------------------------
scene:addEventListener( "create", scene )
scene:addEventListener( "show", scene )
scene:addEventListener( "hide", scene )
scene:addEventListener( "destroy", scene )
-- -----------------------------------------------------------------------------------

return scene

Upvotes: 0

Views: 272

Answers (1)

GoojajiGreg
GoojajiGreg

Reputation: 1183

You need to add the Balloon group (of which the balloons are children) to your sceneGroup.

In scene:destroy, make sure you remove any listeners and cancel any transitions on the things you want destroyed. If you have, when the scene's view is destroyed, the Balloon group and all it's children will also be destroyed.

Upvotes: 2

Related Questions