2017-04-01 15 views
0

DisplayObjectsであるこのシーンのバルーンを、シーンの終了時に消しておきたいです。私はこれを最初の引数としてdisplay.newImageRect()に渡してlocal sceneGroup = scene.viewに追加しました。これは、下のdestroy.sceneビットにリストされているので、これを削除するのに十分であると想定しています。しかし、それが次のシーンに移行するとき、まだそこにいる。これらのDisplayObjectが削除されないのはなぜですか?シーンの最後でこれらの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 

答えて

2

あなたのsceneGroupに(バルーンが子供であるの)Balloonグループを追加する必要があります。

scene:destroyには、リスナーを削除して、破棄したいもののトランジションをすべてキャンセルしてください。あなたが持っている場合、シーンのビューが破壊されると、Balloonグループとそのすべての子も破壊されます。

+0

パーフェクト。再度、感謝します。私は "display.newImageRect(sceneGroup、objectSheet、6、71、100)"がsceneGroupに追加されると考えましたが、おそらく1つのオブジェクトは2つのグループに属していませんか? – Atrag

+1

オブジェクトは1つのグループにしか属しません。 [documentation](https://docs.coronalabs.com/api/type/GroupObject/insert.html) - gotchasを参照してください。 – ldurniat

関連する問題