如何在场景结束时删除这些DisplayObject?

时间:2017-04-01 16:03:19

标签: lua corona

我希望此场景中的气球(DisplayObjects)在场景结束时消失。我已将它们作为local sceneGroup = scene.view的第一个参数传递给display.newImageRect(),并假设这对于它们被删除是足够的,因为它们在底部的destroy.scene位中列出。然而,当它转换到下一个场景时,它们仍然存在。为什么不删除这些DisplayObject?

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

1 个答案:

答案 0 :(得分:2)

您需要将Balloon组(其中气球为儿童)添加到sceneGroup

scene:destroy中,确保删除所有侦听器并取消对要销毁的内容的任何转换。如果你有,当场景的视图被销毁时,Balloon组及其所有孩子也将被销毁。