2017-04-01 1 views
0

Ich möchte, dass die Ballons in dieser Szene, die DisplayObjects sind, verschwinden, wenn die Szene endet. Ich habe sie der local sceneGroup = scene.view hinzugefügt, indem Sie dies als das erste Argument an display.newImageRect() übergeben und angenommen, dass dies genug wäre, um sie zu entfernen, da sie in dem Bit destroy.scene am unteren Rand aufgeführt sind. Wenn es jedoch zur nächsten Szene übergeht, sind sie immer noch da. Warum werden diese DisplayObjects nicht entfernt?Wie kann ich diese DisplayObjects am Ende einer Szene entfernen?

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 

Antwort

2

Sie benötigen die Balloon Gruppe hinzuzufügen (von denen die Ballons sind Kinder), um Ihre sceneGroup.

In scene:destroy, stellen Sie sicher, dass Sie alle Listener entfernen und alle Übergänge auf die Dinge, die Sie zerstören möchten, abbrechen. Wenn Sie die Ansicht der Szene zerstört haben, wird die Balloon Gruppe und alle ihre Kinder ebenfalls zerstört.

+0

Perfekt. Danke noch einmal. Ich dachte "display.newImageRect (sceneGroup, objectSheet, 6, 71, 100)" würde zur sceneGroup hinzufügen, aber vielleicht kann ein Objekt nicht zu zwei Gruppen gehören? – Atrag

+1

Das Objekt kann nur zu einer Gruppe gehören. Siehe [Dokumentation] (https://docs.coronalabs.com/api/type/GroupObject/insert.html) - Fehler. – ldurniat

Verwandte Themen