I have translated some rectangle blocks vertically which I want to be cleaned up when the scene is changed.I have tried scene.view as well as sceneGroup. But none of them is working and in both cases simulator tells about different errors.I have some other objects displayed but they are cleaned up as I want.
Here’s the code for first case where I tried scene.view…Here I get error as newRect number excepted got nil…
local composer = require( "composer" ) local scene = composer.newScene() local physics = require "physics" local gameLoopTimer -------------------------------------------- local function destroyScene() composer.gotoScene( "end", { time=800, effect="crossFade" } ) composer.removeScene("game") end local function endGame() timer.cancel(gameLoopTimer) --Stop spawning zypas, game over timer.performWithDelay(200,function() destroyScene() end) end -- collision function for plat1. local function onCollisionA( self, event ) local collideObject = event.other if ( collideObject.surfaceType == "Ecarrier") then -- blue plat self:removeSelf() endGame() end end local function Loadobst() local gold = display.newImageRect(scene.view,"gold1.png",70,70) gold.x = 4800 gold.y = 3700 gold.surfaceType = "gold" local Lgold = display.newImageRect(scene.view,"lockedgold.png",70,70) Lgold.x = 12300 Lgold.y = 3700 Lgold.surfaceType = "Lgold" local options = { -- width = 70, height = 70, numFrames = 5, -- The params below are optional (used for dynamic image sheet selection) sheetContentWidth = 140, -- width of original 1x size of entire sheet sheetContentHeight = 210 -- height of original 1x size of entire sheet } local imageSheet = graphics.newImageSheet( "obst.png", options ) local myImage = display.newImage( scene.view,imageSheet, 1 ) myImage.surfaceType = "instance2" physics.addBody( gold ) physics.addBody( Lgold ) physics.addBody( myImage ) gold.collision = onCollisionA gold:addEventListener("collision") Lgold.collision = onCollisionA Lgold:addEventListener("collision") myImage.collision = onCollisionA myImage:addEventListener("collision") local rand = math.random(10) if (rand \< 5) then gold.x = 48 gold.y = 370 Lgold.x = 270 Lgold.y = 370 myImage.x = 48 myImage.y = 570 elseif ( rand \< 10) then gold.x = 48 gold.y = 370 Lgold.x = 270 Lgold.y = 370 myImage.x = 48 myImage.y = 570 end end local function sideleft() local rect = display.newRect(scene.view,10,-100,10,10) rect:setFillColor(1) local rect1 = display.newRect(10,100,10,10) rect1:setFillColor(1) local rect2 = display.newRect(10,200,10,10) rect2:setFillColor(1) local rect3 = display.newRect(10,300,10,10) rect3:setFillColor(1) local rect4 = display.newRect(10,400,10,10) rect4:setFillColor(1) local rect5 = display.newRect(10,500,10,10) rect5:setFillColor(1) local rect6 = display.newRect(10,600,10,10) rect6:setFillColor(1) local rect7 = display.newRect(10,700,10,10) rect7:setFillColor(1) local rect8 = display.newRect(10,800,10,10) rect8:setFillColor(1) local rect9 = display.newRect(10,900,10,10) rect9:setFillColor(1) local rect10 = display.newRect(10,1000,10,10) rect10:setFillColor(1) local tPrevious = system.getTimer() local function move(event) local tDelta = event.time - tPrevious tPrevious = event.time local yOffset = ( 0.1 \* tDelta ) rect.y = rect.y - yOffset rect1.y = rect1.y - yOffset rect2.y = rect2.y - yOffset rect3.y = rect3.y - yOffset rect4.y = rect4.y - yOffset rect5.y = rect5.y - yOffset rect6.y = rect6.y - yOffset rect7.y = rect7.y - yOffset rect8.y = rect8.y - yOffset rect9.y = rect9.y - yOffset rect10.y = rect10.y - yOffset if (rect.y) \< 0 then rect:translate( 0,480\*2) end if (rect1.y) \< 0 then rect1:translate( 0,480\*2) end if (rect2.y) \< 0 then rect2:translate( 0,480\*2) end if (rect3.y) \< 0 then rect3:translate( 0,480\*2) end if (rect4.y) \< 0 then rect4:translate( 0,480\*2) end if (rect5.y) \< 0 then rect5:translate( 0,480\*2) end if (rect6.y) \< 0 then rect6:translate( 0,480\*2) end if (rect7.y) \< 0 then rect7:translate( 0,480\*2) end if (rect8.y) \< 0 then rect8:translate( 0,480\*2) end if (rect9.y) \< 0 then rect9:translate( 0,480\*2) end if (rect10.y) \< 0 then rect10:translate( 0,480\*2) end end Runtime:addEventListener( "enterFrame", move ); end sideleft() local function sideright() local rect = display.newRect(310,-100,10,10) rect:setFillColor(1) local rect1 = display.newRect(310,100,10,10) rect1:setFillColor(1) local rect2 = display.newRect(310,200,10,10) rect2:setFillColor(1) local rect3 = display.newRect(310,300,10,10) rect3:setFillColor(1) local rect4 = display.newRect(310,400,10,10) rect4:setFillColor(1) local rect5 = display.newRect(310,500,10,10) rect5:setFillColor(1) local rect6 = display.newRect(310,600,10,10) rect6:setFillColor(1) local rect7 = display.newRect(310,700,10,10) rect7:setFillColor(1) local rect8 = display.newRect(310,800,10,10) rect8:setFillColor(1) local rect9 = display.newRect(310,900,10,10) rect9:setFillColor(1) local rect10 = display.newRect(310,1000,10,10) rect10:setFillColor(1) local tPrevious = system.getTimer() local function move(event) local tDelta = event.time - tPrevious tPrevious = event.time local yOffset = ( 0.1 \* tDelta ) rect.y = rect.y - yOffset rect1.y = rect1.y - yOffset rect2.y = rect2.y - yOffset rect3.y = rect3.y - yOffset rect4.y = rect4.y - yOffset rect5.y = rect5.y - yOffset rect6.y = rect6.y - yOffset rect7.y = rect7.y - yOffset rect8.y = rect8.y - yOffset rect9.y = rect9.y - yOffset rect10.y = rect10.y - yOffset if (rect.y) \< 0 then rect:translate( 0,480\*2) end if (rect1.y) \< 0 then rect1:translate( 0,480\*2) end if (rect2.y) \< 0 then rect2:translate( 0,480\*2) end if (rect3.y) \< 0 then rect3:translate( 0,480\*2) end if (rect4.y) \< 0 then rect4:translate( 0,480\*2) end if (rect5.y) \< 0 then rect5:translate( 0,480\*2) end if (rect6.y) \< 0 then rect6:translate( 0,480\*2) end if (rect7.y) \< 0 then rect7:translate( 0,480\*2) end if (rect8.y) \< 0 then rect8:translate( 0,480\*2) end if (rect9.y) \< 0 then rect9:translate( 0,480\*2) end if (rect10.y) \< 0 then rect10:translate( 0,480\*2) end end Runtime:addEventListener( "enterFrame", move ); end sideright() local function gameLoop() Loadobst() gameLoopTimer = timer.performWithDelay( 2000, gameLoop, 1 ) end function scene:create( event ) math.randomseed(system.getTimer()) local sceneGroup = self.view physics.start() physics.setGravity(0,-1) local background = display.newImageRect(sceneGroup,"back.gif",800,800) background.x = display.contentCenterx background.y = display.contentCenterY local plate1 = display.newRect(sceneGroup,10,200,20,800) plate1:setFillColor(0,0,0) local plate2 = display.newRect(sceneGroup,310,200,20,800) plate2:setFillColor(0,0,0) local sheet = graphics.newImageSheet( "1545.png", { width=64, height=64,numFrames=14}) local Ecarrier = display.newSprite( sceneGroup,sheet,{start=1, count=14, time=500} ) Ecarrier.x = display.contentCenterX+110 Ecarrier.y = display.contentCenterY-250 Ecarrier:play() Ecarrier.surfaceType = "Ecarrier" physics.addBody( Ecarrier, "static") Loadobst() gameLoopTimer = timer.performWithDelay( 3000, gameLoop, 1 ) end function scene:show( event ) local sceneGroup = self.view local phase = event.phase if phase == "will" then -- Called when the scene is still off screen and is about to move on screen elseif phase == "did" then -- Called when the scene is now on screen -- -- INSERT code here to make the scene come alive -- e.g. start timers, begin animation, play audio, etc. physics.start() end end function scene:hide( event ) local sceneGroup = self.view local phase = event.phase if event.phase == "will" then physics.pause() elseif phase == "did" then -- Called when the scene is now off screen end end function scene:destroy( event ) -- Called prior to the removal of scene's "view" (sceneGroup) -- INSERT code here to cleanup the scene -- e.g. remove display objects, remove touch listeners, save state, etc. local sceneGroup = self.view if physics then package.loaded[physics] = nil end physics = nil end --------------------------------------------------------------------------------- -- Listener setup scene:addEventListener( "create", scene ) scene:addEventListener( "show", scene ) scene:addEventListener( "hide", scene ) scene:addEventListener( "destroy", scene ) ----------------------------------------------------------------------------------------- return scene
And here’s the code where I tried sceneGroup…The simulator finds error as
Attempt to perform arithmetic on field y a nil value…
-------------------------------------------------------------------------------------- -- -- level1.lua -- ----------------------------------------------------------------------------------------- local composer = require( "composer" ) local scene = composer.newScene() local physics = require "physics" local gameLoopTimer -------------------------------------------- local function destroyScene() composer.gotoScene( "end", { time=800, effect="crossFade" } ) composer.removeScene("game") end local function endGame() timer.cancel(gameLoopTimer) --Stop spawning zypas, game over timer.performWithDelay(200,function() destroyScene() end) end -- collision function for plat1. local function onCollisionA( self, event ) local collideObject = event.other if ( collideObject.surfaceType == "Ecarrier") then -- blue plat self:removeSelf() endGame() end end local function Loadobst() local gold = display.newImageRect(scene.view,"gold1.png",70,70) gold.x = 4800 gold.y = 3700 gold.surfaceType = "gold" local Lgold = display.newImageRect(scene.view,"lockedgold.png",70,70) Lgold.x = 12300 Lgold.y = 3700 Lgold.surfaceType = "Lgold" local options = { -- width = 70, height = 70, numFrames = 5, -- The params below are optional (used for dynamic image sheet selection) sheetContentWidth = 140, -- width of original 1x size of entire sheet sheetContentHeight = 210 -- height of original 1x size of entire sheet } local imageSheet = graphics.newImageSheet( "obst.png", options ) local myImage = display.newImage( scene.view,imageSheet, 1 ) myImage.surfaceType = "instance2" physics.addBody( gold ) physics.addBody( Lgold ) physics.addBody( myImage ) gold.collision = onCollisionA gold:addEventListener("collision") Lgold.collision = onCollisionA Lgold:addEventListener("collision") myImage.collision = onCollisionA myImage:addEventListener("collision") local rand = math.random(10) if (rand \< 5) then gold.x = 48 gold.y = 370 Lgold.x = 270 Lgold.y = 370 myImage.x = 48 myImage.y = 570 elseif ( rand \< 10) then gold.x = 48 gold.y = 370 Lgold.x = 270 Lgold.y = 370 myImage.x = 48 myImage.y = 570 end end local function gameLoop() Loadobst() gameLoopTimer = timer.performWithDelay( 2000, gameLoop, 1 ) end function scene:create( event ) math.randomseed(system.getTimer()) local sceneGroup = self.view physics.start() physics.setGravity(0,-1) local background = display.newImageRect(sceneGroup,"back.gif",800,800) background.x = display.contentCenterx background.y = display.contentCenterY local plate1 = display.newRect(sceneGroup,10,200,20,800) plate1:setFillColor(0,0,0) local plate2 = display.newRect(sceneGroup,310,200,20,800) plate2:setFillColor(0,0,0) local sheet = graphics.newImageSheet( "1545.png", { width=64, height=64,numFrames=14}) local Ecarrier = display.newSprite( sceneGroup,sheet,{start=1, count=14, time=500} ) Ecarrier.x = display.contentCenterX+110 Ecarrier.y = display.contentCenterY-250 Ecarrier:play() Ecarrier.surfaceType = "Ecarrier" physics.addBody( Ecarrier, "static") local function sideleft() local rect = display.newRect(sceneGroup,10,-100,10,10) rect:setFillColor(1) local rect1 = display.newRect(10,100,10,10) rect1:setFillColor(1) local rect2 = display.newRect(10,200,10,10) rect2:setFillColor(1) local rect3 = display.newRect(10,300,10,10) rect3:setFillColor(1) local rect4 = display.newRect(10,400,10,10) rect4:setFillColor(1) local rect5 = display.newRect(10,500,10,10) rect5:setFillColor(1) local rect6 = display.newRect(10,600,10,10) rect6:setFillColor(1) local rect7 = display.newRect(10,700,10,10) rect7:setFillColor(1) local rect8 = display.newRect(10,800,10,10) rect8:setFillColor(1) local rect9 = display.newRect(10,900,10,10) rect9:setFillColor(1) local rect10 = display.newRect(10,1000,10,10) rect10:setFillColor(1) local tPrevious = system.getTimer() local function move(event) local tDelta = event.time - tPrevious tPrevious = event.time local yOffset = ( 0.1 \* tDelta ) rect.y = rect.y - yOffset rect1.y = rect1.y - yOffset rect2.y = rect2.y - yOffset rect3.y = rect3.y - yOffset rect4.y = rect4.y - yOffset rect5.y = rect5.y - yOffset rect6.y = rect6.y - yOffset rect7.y = rect7.y - yOffset rect8.y = rect8.y - yOffset rect9.y = rect9.y - yOffset rect10.y = rect10.y - yOffset if (rect.y) \< 0 then rect:translate( 0,480\*2) end if (rect1.y) \< 0 then rect1:translate( 0,480\*2) end if (rect2.y) \< 0 then rect2:translate( 0,480\*2) end if (rect3.y) \< 0 then rect3:translate( 0,480\*2) end if (rect4.y) \< 0 then rect4:translate( 0,480\*2) end if (rect5.y) \< 0 then rect5:translate( 0,480\*2) end if (rect6.y) \< 0 then rect6:translate( 0,480\*2) end if (rect7.y) \< 0 then rect7:translate( 0,480\*2) end if (rect8.y) \< 0 then rect8:translate( 0,480\*2) end if (rect9.y) \< 0 then rect9:translate( 0,480\*2) end if (rect10.y) \< 0 then rect10:translate( 0,480\*2) end end Runtime:addEventListener( "enterFrame", move ); end sideleft() local function sideright() local rect = display.newRect(310,-100,10,10) rect:setFillColor(1) local rect1 = display.newRect(310,100,10,10) rect1:setFillColor(1) local rect2 = display.newRect(310,200,10,10) rect2:setFillColor(1) local rect3 = display.newRect(310,300,10,10) rect3:setFillColor(1) local rect4 = display.newRect(310,400,10,10) rect4:setFillColor(1) local rect5 = display.newRect(310,500,10,10) rect5:setFillColor(1) local rect6 = display.newRect(310,600,10,10) rect6:setFillColor(1) local rect7 = display.newRect(310,700,10,10) rect7:setFillColor(1) local rect8 = display.newRect(310,800,10,10) rect8:setFillColor(1) local rect9 = display.newRect(310,900,10,10) rect9:setFillColor(1) local rect10 = display.newRect(310,1000,10,10) rect10:setFillColor(1) local tPrevious = system.getTimer() local function move(event) local tDelta = event.time - tPrevious tPrevious = event.time local yOffset = ( 0.1 \* tDelta ) rect.y = rect.y - yOffset rect1.y = rect1.y - yOffset rect2.y = rect2.y - yOffset rect3.y = rect3.y - yOffset rect4.y = rect4.y - yOffset rect5.y = rect5.y - yOffset rect6.y = rect6.y - yOffset rect7.y = rect7.y - yOffset rect8.y = rect8.y - yOffset rect9.y = rect9.y - yOffset rect10.y = rect10.y - yOffset if (rect.y) \< 0 then rect:translate( 0,480\*2) end if (rect1.y) \< 0 then rect1:translate( 0,480\*2) end if (rect2.y) \< 0 then rect2:translate( 0,480\*2) end if (rect3.y) \< 0 then rect3:translate( 0,480\*2) end if (rect4.y) \< 0 then rect4:translate( 0,480\*2) end if (rect5.y) \< 0 then rect5:translate( 0,480\*2) end if (rect6.y) \< 0 then rect6:translate( 0,480\*2) end if (rect7.y) \< 0 then rect7:translate( 0,480\*2) end if (rect8.y) \< 0 then rect8:translate( 0,480\*2) end if (rect9.y) \< 0 then rect9:translate( 0,480\*2) end if (rect10.y) \< 0 then rect10:translate( 0,480\*2) end end Runtime:addEventListener( "enterFrame", move ); end sideright() Loadobst() gameLoopTimer = timer.performWithDelay( 3000, gameLoop, 1 ) end function scene:show( event ) local sceneGroup = self.view local phase = event.phase if phase == "will" then -- Called when the scene is still off screen and is about to move on screen elseif phase == "did" then -- Called when the scene is now on screen -- -- INSERT code here to make the scene come alive -- e.g. start timers, begin animation, play audio, etc. physics.start() end end function scene:hide( event ) local sceneGroup = self.view local phase = event.phase if event.phase == "will" then physics.pause() elseif phase == "did" then -- Called when the scene is now off screen end end function scene:destroy( event ) -- Called prior to the removal of scene's "view" (sceneGroup) -- INSERT code here to cleanup the scene -- e.g. remove display objects, remove touch listeners, save state, etc. local sceneGroup = self.view if physics then package.loaded[physics] = nil end physics = nil end --------------------------------------------------------------------------------- -- Listener setup scene:addEventListener( "create", scene ) scene:addEventListener( "show", scene ) scene:addEventListener( "hide", scene ) scene:addEventListener( "destroy", scene ) ----------------------------------------------------------------------------------------- return scene