Game hangs during restart

I have 3 screens in my game

  1. Start
  2. Game
  3. Restart

When game over occurs, I go to “Restart” story board. From restart story board I navigate back to game story board.

My problem is game works just fine without issues. But after some time, game just hangs both on mobile and simulator.

I tried purgeScene and removeScene methods but no luck yet. What could be the possible reason for the game to hang?

Thanks for your time in advance

This is how my game logic looks like in the game storyboard

---------------------------------------------------------------------------------- -- -- scenetemplate.lua -- ---------------------------------------------------------------------------------- local physics = require "physics" physics.start() require "sprite" local storyboard = require( "storyboard" ) local scene = storyboard.newScene() local jungleFirstFrame local jungleScndFrame local dangerPost local dangerScndPost local hero local invisibleTile local heroDies local score local scoreText local pinkMonster local greenMonster ---------------------------------------------------------------------------------- --&nbsp; --&nbsp;&nbsp;&nbsp;&nbsp;NOTE: --&nbsp;&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp;&nbsp;Code outside of listener functions (below) will only be executed once, --&nbsp;&nbsp;&nbsp;&nbsp;unless storyboard.removeScene() is called. --&nbsp; --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- -- BEGINNING OF YOUR IMPLEMENTATION --------------------------------------------------------------------------------- -- Called when the scene's view does not exist: function scene:createScene( event ) &nbsp;&nbsp;&nbsp;&nbsp;local group = self.view &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame = display.newImage("images/bg.png") &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame:setReferencePoint(display.BottomLeftReferencePoint) &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame.x = -50 &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame.y = 290 &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame.myName = "jungleFirstFrame" &nbsp;&nbsp;&nbsp;&nbsp;group:insert(jungleFirstFrame) &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame = display.newImage("images/bg.png") &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame:setReferencePoint(display.BottomLeftReferencePoint) &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame.x = 550 &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame.y = 290 &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame.myName = "jungleScndFrame" &nbsp;&nbsp;&nbsp;&nbsp;group:insert(jungleScndFrame) &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame = display.newImage("images/bg.png") &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame:setReferencePoint(display.BottomLeftReferencePoint) &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame.x = 1150 &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame.y = 290 &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame.myName = "jungleThrdFrame" &nbsp;&nbsp;&nbsp;&nbsp;group:insert(jungleThrdFrame) &nbsp;&nbsp;&nbsp;&nbsp;dangerPostSpriteSheet = sprite.newSpriteSheet("images/danger\_post.png", 64, 64) &nbsp;&nbsp;&nbsp;&nbsp;dangerPostSprites = sprite.newSpriteSet(dangerPostSpriteSheet, 1, 4) &nbsp;&nbsp;&nbsp;&nbsp;sprite.add(dangerPostSprites, "dangerPosts", 1, 4, 200, 0) &nbsp;&nbsp;&nbsp;&nbsp;dangerPost = sprite.newSprite(dangerPostSprites) &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.x = 500 &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.y = 260 &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.collided = false &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.myName = "dangerPost" &nbsp;&nbsp;&nbsp;&nbsp;dangerPost:prepare("dangerPosts") &nbsp;&nbsp;&nbsp;&nbsp;dangerPost:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(dangerPost, "static",{density=.1, bounce=0, friction=.2, radius=30}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(dangerPost) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost = sprite.newSprite(dangerPostSprites) &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.x = 700 &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.y = 260 &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.collided = false &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost:prepare("dangerPosts") &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost:play() &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.myName = "dangerScndPost" &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(dangerScndPost, "static", {density=.1, bounce=0, friction=.2, radius=30}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(dangerScndPost) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile = display.newImage("images/jet.png") &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile:setReferencePoint(display.BottomLeftReferencePoint) &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile.x = 0 &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile.y = 320 &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile:scale(1,3) &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(invisibleTile, "static", { bounce=0.1, friction=.2, radius=50}) &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile.isVisible=false &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile.myName = "invisibleTile" &nbsp;&nbsp;&nbsp;&nbsp;group:insert(invisibleTile) &nbsp;&nbsp;&nbsp;&nbsp;ceiling = display.newImage("images/jet.png") &nbsp;&nbsp;&nbsp;&nbsp;ceiling:setReferencePoint(display.BottomLeftReferencePoint) &nbsp;&nbsp;&nbsp;&nbsp;ceiling.x = 0 &nbsp;&nbsp;&nbsp;&nbsp;ceiling.y = 20 &nbsp;&nbsp;&nbsp;&nbsp;ceiling.isVisible=false &nbsp;&nbsp;&nbsp;&nbsp;ceiling.myName = "ceiling" &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(ceiling, "static", { bounce=0.1, friction=.2, radius=10}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(ceiling) &nbsp;&nbsp;&nbsp;&nbsp;heroSpriteSheet = sprite.newSpriteSheet("images/Hero\_run\_sprite2.png", 62, 64) &nbsp;&nbsp;&nbsp;&nbsp;heroSprites = sprite.newSpriteSet(heroSpriteSheet, 1, 12) &nbsp;&nbsp;&nbsp;&nbsp;sprite.add(heroSprites, "heroSprite", 1, 4, 200, 0) &nbsp;&nbsp;&nbsp;&nbsp;hero = sprite.newSprite(heroSprites) &nbsp;&nbsp;&nbsp;&nbsp;hero.x = 100 &nbsp;&nbsp;&nbsp;&nbsp;hero.y = 100 &nbsp;&nbsp;&nbsp;&nbsp;hero.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;hero.collided = false &nbsp;&nbsp;&nbsp;&nbsp;hero.myName = "hero" &nbsp;&nbsp;&nbsp;&nbsp;hero:prepare("heroSprite") &nbsp;&nbsp;&nbsp;&nbsp;hero:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(hero, {density=0.1, bounce=0.1, friction=.2, radius=15}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(hero) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonsterSpriteSheet = sprite.newSpriteSheet("images/pink\_monster2.png",64, 64) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonsterSprites = sprite.newSpriteSet(pinkMonsterSpriteSheet, 1, 6) &nbsp;&nbsp;&nbsp;&nbsp;sprite.add(pinkMonsterSprites, "pinkMOnsterSprite", 1, 4, 1000, 0) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster = sprite.newSprite(pinkMonsterSprites) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.x = 600 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.y = 100 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.initY = pinkMonster.y &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.speed = 5 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.amp &nbsp;= math.random(20, 100) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.angle = math.random(1,360) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.speed = math.random(2,6) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.collided = false &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.myName = "pinkMonster" &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster:prepare("pinkMOnsterSprite") &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(pinkMonster, "static", {density=0.1, bounce=0.1, friction=.2, radius=20}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(pinkMonster) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2 = sprite.newSprite(pinkMonsterSprites) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.x = 700 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.y = 100 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.initY = pinkMonster2.y &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.speed = 4 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.amp &nbsp;= math.random(20, 100) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.angle = math.random(1,360) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.speed = math.random(2,6) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.collided = false &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.myName = "pinkMonster2" &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2:prepare("pinkMOnsterSprite") &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(pinkMonster2, "static", {density=0.1, bounce=0.1, friction=.2, radius=20}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(pinkMonster2) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3 = sprite.newSprite(pinkMonsterSprites) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.x = 700 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.y = 100 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.initY = pinkMonster3.y &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.speed = 1 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.amp &nbsp;= math.random(20, 100) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.angle = math.random(1,360) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.speed = math.random(2,6) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.collided = false &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.myName = "pinkMonster2" &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3:prepare("pinkMOnsterSprite") &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(pinkMonster3, "static", {density=0.1, bounce=0.1, friction=.2, radius=20}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(pinkMonster3) &nbsp;&nbsp;&nbsp;&nbsp;greenMonsterSpriteSheet = sprite.newSpriteSheet("images/green\_monster.png",64, 64) &nbsp;&nbsp;&nbsp;&nbsp;greenMonsterSprites = sprite.newSpriteSet(greenMonsterSpriteSheet, 1, 5) &nbsp;&nbsp;&nbsp;&nbsp;sprite.add(greenMonsterSprites, "greenMOnsterSprite", 1, 4, 1000, 0) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster = sprite.newSprite(greenMonsterSprites) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.x = 400 &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.y = 260 &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.initY = greenMonster.y &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.speed = 10 &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.amp &nbsp;= math.random(20, 100) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.angle = math.random(1,360) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.speed = math.random(2,6) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.collided = false &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.myName = "greenMonster" &nbsp;&nbsp;&nbsp;&nbsp;greenMonster:prepare("greenMOnsterSprite") &nbsp;&nbsp;&nbsp;&nbsp;greenMonster:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(greenMonster, "static", {density=0.1, bounce=0.1, friction=.2, radius=20}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(greenMonster) &nbsp;&nbsp;&nbsp;&nbsp;heroDiesSpriteSheet = sprite.newSpriteSheet("images/hero\_dies\_sprite4.png", 64, 64) &nbsp;&nbsp;&nbsp;&nbsp;heroDiesSprites = sprite.newSpriteSet(heroDiesSpriteSheet, 1, 6) &nbsp;&nbsp;&nbsp;&nbsp;sprite.add(heroDiesSprites, "heroDiesSprite", 1, 4, 2000, 1) &nbsp;&nbsp;&nbsp;&nbsp;heroDies = sprite.newSprite(heroDiesSprites) &nbsp;&nbsp;&nbsp;&nbsp;heroDies.x = 100 &nbsp;&nbsp;&nbsp;&nbsp;heroDies.y = 100 &nbsp;&nbsp;&nbsp;&nbsp;heroDies.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;heroDies.collided = false &nbsp;&nbsp;&nbsp;&nbsp;heroDies:prepare("heroDiesSprite") &nbsp;&nbsp;&nbsp;&nbsp;heroDies.isVisible = false &nbsp;&nbsp;&nbsp;&nbsp;group:insert(heroDies) &nbsp;&nbsp;&nbsp;&nbsp;--setting up score &nbsp;&nbsp;&nbsp;&nbsp;score = 0 &nbsp;&nbsp;&nbsp;&nbsp;scoreText = display.newText("Score : 0", 0, 0, "Helvetica", 15 ) &nbsp;&nbsp;&nbsp;&nbsp;--scoreText.x = 10 + centerX &nbsp;&nbsp;&nbsp;&nbsp;scoreText.y = 10 &nbsp;&nbsp;&nbsp;&nbsp;group:insert(scoreText) &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;CREATE display objects and add them to 'group' here. &nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;Example use-case: Restore 'group' from previously saved state. &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; end ---------------------------------------------------------------------------------- ------------ CUSTOM FUNCTIONS ---------------------------------------------------- ---------------------------------------------------------------------------------- function moveGreenMonster(self, event) &nbsp;&nbsp;&nbsp;&nbsp;if self.x \< -50 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x = math.random(600, 800) &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x &nbsp;= self.x - math.random(2,6) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(self.speed) &nbsp;&nbsp;&nbsp;&nbsp;end end function scrollJungle(self, event) &nbsp;&nbsp;&nbsp;&nbsp;if self.x \< -1195 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x = 600 &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x &nbsp;= self.x - self.speed &nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;score = score + 1 &nbsp;&nbsp;&nbsp;&nbsp;scoreText.text = "Score : "..score end function placeDangerPost(self, event) &nbsp;&nbsp;&nbsp;&nbsp;if self.x \< -50 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x = math.random(600, 1100) &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x &nbsp;= self.x - self.speed &nbsp;&nbsp;&nbsp;&nbsp;end end function placeMonster(self, event) &nbsp;&nbsp;&nbsp;&nbsp;if self.x \< -50 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x = math.random(600, 1100) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.amp &nbsp;= math.random(30, 100) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.angle = math.random(1,90) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.speed = math.random(1,5) &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x &nbsp;= self.x - self.speed &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.angle = self.angle + .1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.y = self.amp \* math.sin(self.angle) + self.initY &nbsp;&nbsp;&nbsp;&nbsp;end end function jumpHero(self, event) &nbsp;&nbsp;&nbsp;&nbsp;self:applyForce(0,-1.5, self.x, self.y) end function touchScreen(event) &nbsp;&nbsp;&nbsp;&nbsp;if event.phase == "began" then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hero.enterFrame = jumpHero &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", hero) &nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;if event.phase == "ended" then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", hero) &nbsp;&nbsp;&nbsp;&nbsp;end end function gameOver() &nbsp;&nbsp;&nbsp;&nbsp;storyboard.gotoScene("restart", "fade", 400) end local function onCollision(event) &nbsp;&nbsp;&nbsp;&nbsp;if ( event.phase == "began" ) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(event.object1.myName~="invisibleTile" and event.object2.myName~="invisibleTile") then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleFirstFrame) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleScndFrame) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleThrdFrame) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerPost) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerScndPost) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster2) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster3) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", greenMonster) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("touch", touchScreen) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("collision", onCollison) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hero.bodyType="static" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hero.isVisible=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heroDies.x = hero.x &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heroDies.y = hero.y &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heroDies.isVisible = true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heroDies:play() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer.performWithDelay(2000, gameOver, 1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end &nbsp; &nbsp; end end -- Called immediately after scene has moved onscreen: function scene:enterScene( event ) &nbsp;&nbsp;&nbsp;&nbsp;storyboard.removeScene("restart") &nbsp;&nbsp;&nbsp;&nbsp;storyboard.removeScene("start") &nbsp;&nbsp;&nbsp;&nbsp;local group = self.view&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleFirstFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleScndFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleThrdFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerPost) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerScndPost) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster2) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster3) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", greenMonster) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("touch", touchScreen) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("collision", onCollison) &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame.enterFrame = scrollJungle &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", jungleFirstFrame) &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame.enterFrame = scrollJungle &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", jungleScndFrame) &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame.enterFrame = scrollJungle &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", jungleThrdFrame) &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.enterFrame = placeDangerPost &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", dangerPost) &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.enterFrame = placeDangerPost &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", dangerScndPost) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.enterFrame = placeMonster &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", pinkMonster) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.enterFrame = placeMonster &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", pinkMonster2) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.enterFrame = placeMonster &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", pinkMonster3) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.enterFrame = moveGreenMonster &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", greenMonster) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("touch", touchScreen) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("collision", onCollision) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; end -- Called when scene is about to move offscreen: function scene:exitScene( event ) &nbsp;&nbsp;&nbsp;&nbsp;local group = self.view &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleFirstFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleScndFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleThrdFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerPost) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerScndPost) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster2) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster3) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", greenMonster) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("touch", touchScreen) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("collision", onCollison) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; end -- Called prior to the removal of scene's "view" (display group) function scene:destroyScene( event ) &nbsp;&nbsp;&nbsp;&nbsp;local group = self.view &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;INSERT code here (e.g. remove listeners, widgets, save state, etc.) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; end --------------------------------------------------------------------------------- -- END OF YOUR IMPLEMENTATION --------------------------------------------------------------------------------- -- "createScene" event is dispatched if scene's view does not exist scene:addEventListener( "createScene", scene ) -- "enterScene" event is dispatched whenever scene transition has finished scene:addEventListener( "enterScene", scene ) -- "exitScene" event is dispatched before next scene's transition begins scene:addEventListener( "exitScene", scene ) -- "destroyScene" event is dispatched before view is unloaded, which can be -- automatically unloaded in low memory situations, or explicitly via a call to -- storyboard.purgeScene() or storyboard.removeScene(). scene:addEventListener( "destroyScene", scene ) --------------------------------------------------------------------------------- return scene &nbsp;

I couldn’t really discern the problem from all that code. 

Some things that might help other programmers help:
–Posting code only relevant to storyboard

–Give the exact error. How does it hang?

Some things you could try:
–Make sure all objects are somehow stored in the in local group = self.view. Even if it is a nest of groups, all display objects should end up in that group.

–Place storyboard.removeAll() in different storyboard functions as a guess and check (This usually works for me.) What I mean by this is, in restart put the removeAll in createScene. Doesn’t work, so remove that and put removeAll in enterScene. Test. Continue until you can rule out any scripting or concurrency issues. 

Maybe someone else more experienced can give you an exact fix, but for now going through those steps should help.

Are you getting any errors in your console log?

If you’re not sure how to see that log, please read this blog post:  http://www.coronalabs.com/blog/2013/07/09/tutorial-basic-debugging/

I’m not getting anything in the logs but I figured out the issue.

The even for starting new storyboard is not removed in the screen. As the result the same story board called multiple times as I hit restart over and over again. I just placed removeEvent stuff and it worked. 

Thanks alot for your time. Really appreciate it. Corona rocks.

This is how my game logic looks like in the game storyboard

---------------------------------------------------------------------------------- -- -- scenetemplate.lua -- ---------------------------------------------------------------------------------- local physics = require "physics" physics.start() require "sprite" local storyboard = require( "storyboard" ) local scene = storyboard.newScene() local jungleFirstFrame local jungleScndFrame local dangerPost local dangerScndPost local hero local invisibleTile local heroDies local score local scoreText local pinkMonster local greenMonster ---------------------------------------------------------------------------------- --&nbsp; --&nbsp;&nbsp;&nbsp;&nbsp;NOTE: --&nbsp;&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp;&nbsp;Code outside of listener functions (below) will only be executed once, --&nbsp;&nbsp;&nbsp;&nbsp;unless storyboard.removeScene() is called. --&nbsp; --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- -- BEGINNING OF YOUR IMPLEMENTATION --------------------------------------------------------------------------------- -- Called when the scene's view does not exist: function scene:createScene( event ) &nbsp;&nbsp;&nbsp;&nbsp;local group = self.view &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame = display.newImage("images/bg.png") &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame:setReferencePoint(display.BottomLeftReferencePoint) &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame.x = -50 &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame.y = 290 &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame.myName = "jungleFirstFrame" &nbsp;&nbsp;&nbsp;&nbsp;group:insert(jungleFirstFrame) &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame = display.newImage("images/bg.png") &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame:setReferencePoint(display.BottomLeftReferencePoint) &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame.x = 550 &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame.y = 290 &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame.myName = "jungleScndFrame" &nbsp;&nbsp;&nbsp;&nbsp;group:insert(jungleScndFrame) &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame = display.newImage("images/bg.png") &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame:setReferencePoint(display.BottomLeftReferencePoint) &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame.x = 1150 &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame.y = 290 &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame.myName = "jungleThrdFrame" &nbsp;&nbsp;&nbsp;&nbsp;group:insert(jungleThrdFrame) &nbsp;&nbsp;&nbsp;&nbsp;dangerPostSpriteSheet = sprite.newSpriteSheet("images/danger\_post.png", 64, 64) &nbsp;&nbsp;&nbsp;&nbsp;dangerPostSprites = sprite.newSpriteSet(dangerPostSpriteSheet, 1, 4) &nbsp;&nbsp;&nbsp;&nbsp;sprite.add(dangerPostSprites, "dangerPosts", 1, 4, 200, 0) &nbsp;&nbsp;&nbsp;&nbsp;dangerPost = sprite.newSprite(dangerPostSprites) &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.x = 500 &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.y = 260 &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.collided = false &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.myName = "dangerPost" &nbsp;&nbsp;&nbsp;&nbsp;dangerPost:prepare("dangerPosts") &nbsp;&nbsp;&nbsp;&nbsp;dangerPost:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(dangerPost, "static",{density=.1, bounce=0, friction=.2, radius=30}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(dangerPost) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost = sprite.newSprite(dangerPostSprites) &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.x = 700 &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.y = 260 &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.collided = false &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost:prepare("dangerPosts") &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost:play() &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.myName = "dangerScndPost" &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(dangerScndPost, "static", {density=.1, bounce=0, friction=.2, radius=30}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(dangerScndPost) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile = display.newImage("images/jet.png") &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile:setReferencePoint(display.BottomLeftReferencePoint) &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile.x = 0 &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile.y = 320 &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile:scale(1,3) &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(invisibleTile, "static", { bounce=0.1, friction=.2, radius=50}) &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile.isVisible=false &nbsp;&nbsp;&nbsp;&nbsp;invisibleTile.myName = "invisibleTile" &nbsp;&nbsp;&nbsp;&nbsp;group:insert(invisibleTile) &nbsp;&nbsp;&nbsp;&nbsp;ceiling = display.newImage("images/jet.png") &nbsp;&nbsp;&nbsp;&nbsp;ceiling:setReferencePoint(display.BottomLeftReferencePoint) &nbsp;&nbsp;&nbsp;&nbsp;ceiling.x = 0 &nbsp;&nbsp;&nbsp;&nbsp;ceiling.y = 20 &nbsp;&nbsp;&nbsp;&nbsp;ceiling.isVisible=false &nbsp;&nbsp;&nbsp;&nbsp;ceiling.myName = "ceiling" &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(ceiling, "static", { bounce=0.1, friction=.2, radius=10}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(ceiling) &nbsp;&nbsp;&nbsp;&nbsp;heroSpriteSheet = sprite.newSpriteSheet("images/Hero\_run\_sprite2.png", 62, 64) &nbsp;&nbsp;&nbsp;&nbsp;heroSprites = sprite.newSpriteSet(heroSpriteSheet, 1, 12) &nbsp;&nbsp;&nbsp;&nbsp;sprite.add(heroSprites, "heroSprite", 1, 4, 200, 0) &nbsp;&nbsp;&nbsp;&nbsp;hero = sprite.newSprite(heroSprites) &nbsp;&nbsp;&nbsp;&nbsp;hero.x = 100 &nbsp;&nbsp;&nbsp;&nbsp;hero.y = 100 &nbsp;&nbsp;&nbsp;&nbsp;hero.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;hero.collided = false &nbsp;&nbsp;&nbsp;&nbsp;hero.myName = "hero" &nbsp;&nbsp;&nbsp;&nbsp;hero:prepare("heroSprite") &nbsp;&nbsp;&nbsp;&nbsp;hero:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(hero, {density=0.1, bounce=0.1, friction=.2, radius=15}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(hero) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonsterSpriteSheet = sprite.newSpriteSheet("images/pink\_monster2.png",64, 64) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonsterSprites = sprite.newSpriteSet(pinkMonsterSpriteSheet, 1, 6) &nbsp;&nbsp;&nbsp;&nbsp;sprite.add(pinkMonsterSprites, "pinkMOnsterSprite", 1, 4, 1000, 0) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster = sprite.newSprite(pinkMonsterSprites) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.x = 600 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.y = 100 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.initY = pinkMonster.y &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.speed = 5 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.amp &nbsp;= math.random(20, 100) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.angle = math.random(1,360) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.speed = math.random(2,6) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.collided = false &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.myName = "pinkMonster" &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster:prepare("pinkMOnsterSprite") &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(pinkMonster, "static", {density=0.1, bounce=0.1, friction=.2, radius=20}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(pinkMonster) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2 = sprite.newSprite(pinkMonsterSprites) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.x = 700 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.y = 100 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.initY = pinkMonster2.y &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.speed = 4 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.amp &nbsp;= math.random(20, 100) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.angle = math.random(1,360) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.speed = math.random(2,6) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.collided = false &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.myName = "pinkMonster2" &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2:prepare("pinkMOnsterSprite") &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(pinkMonster2, "static", {density=0.1, bounce=0.1, friction=.2, radius=20}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(pinkMonster2) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3 = sprite.newSprite(pinkMonsterSprites) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.x = 700 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.y = 100 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.initY = pinkMonster3.y &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.speed = 1 &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.amp &nbsp;= math.random(20, 100) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.angle = math.random(1,360) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.speed = math.random(2,6) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.collided = false &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.myName = "pinkMonster2" &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3:prepare("pinkMOnsterSprite") &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(pinkMonster3, "static", {density=0.1, bounce=0.1, friction=.2, radius=20}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(pinkMonster3) &nbsp;&nbsp;&nbsp;&nbsp;greenMonsterSpriteSheet = sprite.newSpriteSheet("images/green\_monster.png",64, 64) &nbsp;&nbsp;&nbsp;&nbsp;greenMonsterSprites = sprite.newSpriteSet(greenMonsterSpriteSheet, 1, 5) &nbsp;&nbsp;&nbsp;&nbsp;sprite.add(greenMonsterSprites, "greenMOnsterSprite", 1, 4, 1000, 0) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster = sprite.newSprite(greenMonsterSprites) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.x = 400 &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.y = 260 &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.initY = greenMonster.y &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.speed = 10 &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.amp &nbsp;= math.random(20, 100) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.angle = math.random(1,360) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.speed = math.random(2,6) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.collided = false &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.myName = "greenMonster" &nbsp;&nbsp;&nbsp;&nbsp;greenMonster:prepare("greenMOnsterSprite") &nbsp;&nbsp;&nbsp;&nbsp;greenMonster:play() &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody(greenMonster, "static", {density=0.1, bounce=0.1, friction=.2, radius=20}) &nbsp;&nbsp;&nbsp;&nbsp;group:insert(greenMonster) &nbsp;&nbsp;&nbsp;&nbsp;heroDiesSpriteSheet = sprite.newSpriteSheet("images/hero\_dies\_sprite4.png", 64, 64) &nbsp;&nbsp;&nbsp;&nbsp;heroDiesSprites = sprite.newSpriteSet(heroDiesSpriteSheet, 1, 6) &nbsp;&nbsp;&nbsp;&nbsp;sprite.add(heroDiesSprites, "heroDiesSprite", 1, 4, 2000, 1) &nbsp;&nbsp;&nbsp;&nbsp;heroDies = sprite.newSprite(heroDiesSprites) &nbsp;&nbsp;&nbsp;&nbsp;heroDies.x = 100 &nbsp;&nbsp;&nbsp;&nbsp;heroDies.y = 100 &nbsp;&nbsp;&nbsp;&nbsp;heroDies.speed = 3 &nbsp;&nbsp;&nbsp;&nbsp;heroDies.collided = false &nbsp;&nbsp;&nbsp;&nbsp;heroDies:prepare("heroDiesSprite") &nbsp;&nbsp;&nbsp;&nbsp;heroDies.isVisible = false &nbsp;&nbsp;&nbsp;&nbsp;group:insert(heroDies) &nbsp;&nbsp;&nbsp;&nbsp;--setting up score &nbsp;&nbsp;&nbsp;&nbsp;score = 0 &nbsp;&nbsp;&nbsp;&nbsp;scoreText = display.newText("Score : 0", 0, 0, "Helvetica", 15 ) &nbsp;&nbsp;&nbsp;&nbsp;--scoreText.x = 10 + centerX &nbsp;&nbsp;&nbsp;&nbsp;scoreText.y = 10 &nbsp;&nbsp;&nbsp;&nbsp;group:insert(scoreText) &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;CREATE display objects and add them to 'group' here. &nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;Example use-case: Restore 'group' from previously saved state. &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; end ---------------------------------------------------------------------------------- ------------ CUSTOM FUNCTIONS ---------------------------------------------------- ---------------------------------------------------------------------------------- function moveGreenMonster(self, event) &nbsp;&nbsp;&nbsp;&nbsp;if self.x \< -50 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x = math.random(600, 800) &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x &nbsp;= self.x - math.random(2,6) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(self.speed) &nbsp;&nbsp;&nbsp;&nbsp;end end function scrollJungle(self, event) &nbsp;&nbsp;&nbsp;&nbsp;if self.x \< -1195 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x = 600 &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x &nbsp;= self.x - self.speed &nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;score = score + 1 &nbsp;&nbsp;&nbsp;&nbsp;scoreText.text = "Score : "..score end function placeDangerPost(self, event) &nbsp;&nbsp;&nbsp;&nbsp;if self.x \< -50 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x = math.random(600, 1100) &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x &nbsp;= self.x - self.speed &nbsp;&nbsp;&nbsp;&nbsp;end end function placeMonster(self, event) &nbsp;&nbsp;&nbsp;&nbsp;if self.x \< -50 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x = math.random(600, 1100) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.amp &nbsp;= math.random(30, 100) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.angle = math.random(1,90) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.speed = math.random(1,5) &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x &nbsp;= self.x - self.speed &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.angle = self.angle + .1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.y = self.amp \* math.sin(self.angle) + self.initY &nbsp;&nbsp;&nbsp;&nbsp;end end function jumpHero(self, event) &nbsp;&nbsp;&nbsp;&nbsp;self:applyForce(0,-1.5, self.x, self.y) end function touchScreen(event) &nbsp;&nbsp;&nbsp;&nbsp;if event.phase == "began" then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hero.enterFrame = jumpHero &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", hero) &nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;if event.phase == "ended" then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", hero) &nbsp;&nbsp;&nbsp;&nbsp;end end function gameOver() &nbsp;&nbsp;&nbsp;&nbsp;storyboard.gotoScene("restart", "fade", 400) end local function onCollision(event) &nbsp;&nbsp;&nbsp;&nbsp;if ( event.phase == "began" ) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(event.object1.myName~="invisibleTile" and event.object2.myName~="invisibleTile") then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleFirstFrame) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleScndFrame) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleThrdFrame) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerPost) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerScndPost) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster2) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster3) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", greenMonster) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("touch", touchScreen) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("collision", onCollison) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hero.bodyType="static" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hero.isVisible=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heroDies.x = hero.x &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heroDies.y = hero.y &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heroDies.isVisible = true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heroDies:play() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer.performWithDelay(2000, gameOver, 1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end &nbsp; &nbsp; end end -- Called immediately after scene has moved onscreen: function scene:enterScene( event ) &nbsp;&nbsp;&nbsp;&nbsp;storyboard.removeScene("restart") &nbsp;&nbsp;&nbsp;&nbsp;storyboard.removeScene("start") &nbsp;&nbsp;&nbsp;&nbsp;local group = self.view&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleFirstFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleScndFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleThrdFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerPost) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerScndPost) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster2) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster3) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", greenMonster) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("touch", touchScreen) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("collision", onCollison) &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;jungleFirstFrame.enterFrame = scrollJungle &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", jungleFirstFrame) &nbsp;&nbsp;&nbsp;&nbsp;jungleScndFrame.enterFrame = scrollJungle &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", jungleScndFrame) &nbsp;&nbsp;&nbsp;&nbsp;jungleThrdFrame.enterFrame = scrollJungle &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", jungleThrdFrame) &nbsp;&nbsp;&nbsp;&nbsp;dangerPost.enterFrame = placeDangerPost &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", dangerPost) &nbsp;&nbsp;&nbsp;&nbsp;dangerScndPost.enterFrame = placeDangerPost &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", dangerScndPost) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster.enterFrame = placeMonster &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", pinkMonster) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster2.enterFrame = placeMonster &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", pinkMonster2) &nbsp;&nbsp;&nbsp;&nbsp;pinkMonster3.enterFrame = placeMonster &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", pinkMonster3) &nbsp;&nbsp;&nbsp;&nbsp;greenMonster.enterFrame = moveGreenMonster &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("enterFrame", greenMonster) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("touch", touchScreen) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:addEventListener("collision", onCollision) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; end -- Called when scene is about to move offscreen: function scene:exitScene( event ) &nbsp;&nbsp;&nbsp;&nbsp;local group = self.view &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleFirstFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleScndFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", jungleThrdFrame) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerPost) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", dangerScndPost) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster2) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", pinkMonster3) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("enterFrame", greenMonster) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("touch", touchScreen) &nbsp;&nbsp;&nbsp;&nbsp;Runtime:removeEventListener("collision", onCollison) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; end -- Called prior to the removal of scene's "view" (display group) function scene:destroyScene( event ) &nbsp;&nbsp;&nbsp;&nbsp;local group = self.view &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;INSERT code here (e.g. remove listeners, widgets, save state, etc.) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------- &nbsp;&nbsp;&nbsp;&nbsp; end --------------------------------------------------------------------------------- -- END OF YOUR IMPLEMENTATION --------------------------------------------------------------------------------- -- "createScene" event is dispatched if scene's view does not exist scene:addEventListener( "createScene", scene ) -- "enterScene" event is dispatched whenever scene transition has finished scene:addEventListener( "enterScene", scene ) -- "exitScene" event is dispatched before next scene's transition begins scene:addEventListener( "exitScene", scene ) -- "destroyScene" event is dispatched before view is unloaded, which can be -- automatically unloaded in low memory situations, or explicitly via a call to -- storyboard.purgeScene() or storyboard.removeScene(). scene:addEventListener( "destroyScene", scene ) --------------------------------------------------------------------------------- return scene &nbsp;

I couldn’t really discern the problem from all that code. 

Some things that might help other programmers help:
–Posting code only relevant to storyboard

–Give the exact error. How does it hang?

Some things you could try:
–Make sure all objects are somehow stored in the in local group = self.view. Even if it is a nest of groups, all display objects should end up in that group.

–Place storyboard.removeAll() in different storyboard functions as a guess and check (This usually works for me.) What I mean by this is, in restart put the removeAll in createScene. Doesn’t work, so remove that and put removeAll in enterScene. Test. Continue until you can rule out any scripting or concurrency issues. 

Maybe someone else more experienced can give you an exact fix, but for now going through those steps should help.

Are you getting any errors in your console log?

If you’re not sure how to see that log, please read this blog post:  http://www.coronalabs.com/blog/2013/07/09/tutorial-basic-debugging/

I’m not getting anything in the logs but I figured out the issue.

The even for starting new storyboard is not removed in the screen. As the result the same story board called multiple times as I hit restart over and over again. I just placed removeEvent stuff and it worked. 

Thanks alot for your time. Really appreciate it. Corona rocks.