black screen after numerous losses .

In my app you lose if a certain figure touches the ground . After a certain amount of losses in my app there is a black screen that pops up and stays there . Why is this happening ?

level1.lua:

local composer = require( "composer" ) local scene = composer.newScene() local physics = require( "physics" ) physics.start() physics.setGravity(0, 40) local myObject local wall local wall2 local wall3 local block local block2 local background local ground local mAbs = math.abs local mRand = math.random local mDeg = math.deg local mRad = math.rad local mCos = math.cos local mSin = math.sin local mAcos = math.acos local mAsin = math.asin local mSqrt = math.sqrt local mCeil = math.ceil local mFloor = math.floor local mAtan2 = math.atan2 local mPi = math.pi local getInfo = system.getInfo local getTimer = system.getTimer local strMatch = string.match local strFormat = string.format local pairs = pairs function scene:create( event ) local sceneGroup = self.view physics.start() physics.pause() background = display.newImage( "background.png" ) sceneGroup:insert( background ) ground = display.newImage( "ground.png" ) sceneGroup:insert( ground ) ground.isGround = true physics.addBody( ground, "static" , { friction=0.5, bounce=0.1 } ) myObject = display.newRect( 0, 0, 100, 30 ) sceneGroup:insert( myObject ) myObject.isMyObject = true myObject:setFillColor( 0 ) physics.addBody( myObject, "kinematic" , { myObject, friction=0.5, bounce=2 } ) function myObject:touch( event ) if( event.phase == "moved" ) then self.x = event.x self.y = event.y end return true end myObject:addEventListener( "touch", myObject ) wall = display.newImageRect( "wall.png", 600, 300 ) sceneGroup:insert( wall ) wall.rotation = 90 physics.addBody( wall, "static" , { wall, friction=0.5, bounce=0.5 } ) wall2 = display.newImageRect( "wall2.png", 500, 300 ) sceneGroup:insert( wall2 ) wall.rotation = 90 physics.addBody( wall2, "static" , { wall2, friction=0.5, bounce=0.5 } ) wall3 = display.newImageRect( "wall3.png", 600, 300 ) sceneGroup:insert( wall3 ) wall3.rotation = 90 physics.addBody( wall3, "static" , { wall3, friction=0.5, bounce=0.5 } ) block = display.newImage( "block.png" ) sceneGroup:insert( block ) block.isBlock = true block.rotation = 8 physics.addBody( block, "dynamic" , { block, friction=0.5, bounce=0.5 } ) block.collision = onCollision block:addEventListener( "collision" ) block2 = display.newImage( "block2.png" ) sceneGroup:insert( block2 ) block2.isBlock = true block2.rotation = 8 physics.addBody( block2, "dynamic" , { block2, friction=0.5, bounce=0.5 } ) block2.collision = onCollision end onCollision = function( self, event ) local other = event.other if( event.phase == "began" and self.isBlock and other.isGround ) then timer.performWithDelay( 30, function() composer.gotoScene ( "restart", "fade", 0 ) end ) self:removeEventListener( "collision" ) end return true end function scene:show( event ) local sceneGroup = self.view local phase = event.phase if ( phase == "will" ) then background.x = 10 background.y = 308 ground.x = 145 ground.y = 480 myObject.x = 145 myObject.y = 400 wall.x = -150 wall.y = 250 wall2.x = 210 wall2.y = -194 wall3.x = 470 wall3.y = 250 block.x = 200 block.y = 35 block2.x = 100 block2.y = 35 elseif ( phase == "did" ) then physics.start() block2:addEventListener( "collision" ) block:addEventListener( "collision" ) -- Called when the scene is now on screen. -- Insert code here to make the scene come alive. -- Example: start timers, begin animation, play audio, etc. end end function scene:hide( event ) local sceneGroup = self.view local phase = event.phase if ( phase == "will" ) then -- Called when the scene is on screen (but is about to go off screen). -- Insert code here to "pause" the scene. -- Example: stop timers, stop animation, stop audio, etc. elseif ( phase == "did" ) then -- Called immediately after scene goes off screen. end end -- "scene:destroy()" function scene:destroy( event ) local sceneGroup = self.view -- Called prior to the removal of scene's view ("sceneGroup"). -- Insert code here to clean up the scene. -- Example: remove display objects, save state, etc. end -- ------------------------------------------------------------------------------- -- Listener setup scene:addEventListener( "create", scene ) scene:addEventListener( "show", scene ) scene:addEventListener( "hide", scene ) scene:addEventListener( "destroy", scene ) -- ------------------------------------------------------------------------------- return scene

restart.lua:

local composer = require( "composer" ) local scene = composer.newScene() local mAbs = math.abs local mRand = math.random local mDeg = math.deg local mRad = math.rad local mCos = math.cos local mSin = math.sin local mAcos = math.acos local mAsin = math.asin local mSqrt = math.sqrt local mCeil = math.ceil local mFloor = math.floor local mAtan2 = math.atan2 local mPi = math.pi local getInfo = system.getInfo local getTimer = system.getTimer local strMatch = string.match local strFormat = string.format local pairs = pairs local button -- "scene:create()" function scene:create( event ) local sceneGroup = self.view background = display.newImage( "background.png" ) sceneGroup:insert( background ) ground = display.newImage( "ground.png" ) sceneGroup:insert( ground ) button = display.newImageRect( "button.png", 110, 80 ) sceneGroup:insert( button ) function button:touch(event) if event.phase == "ended" then composer.gotoScene("level1", "fade", 200) end return true end button:addEventListener("touch", button) end -- "scene:show()" function scene:show( event ) local sceneGroup = self.view local phase = event.phase if ( phase == "will" ) then background.x = 10 background.y = 308 button.x = 160 button.y = 300 ground.x = 145 ground.y = 480 elseif ( phase == "did" ) then -- Called when the scene is now on screen. -- Insert code here to make the scene come alive. -- Example: start timers, begin animation, play audio, etc. end end -- "scene:hide()" function scene:hide( event ) local sceneGroup = self.view local phase = event.phase if ( phase == "will" ) then -- Called when the scene is on screen (but is about to go off screen). -- Insert code here to "pause" the scene. -- Example: stop timers, stop animation, stop audio, etc. elseif ( phase == "did" ) then -- Called immediately after scene goes off screen. end end -- "scene:destroy()" function scene:destroy( event ) local sceneGroup = self.view -- Called prior to the removal of scene's view ("sceneGroup"). -- Insert code here to clean up the scene. -- Example: remove display objects, save state, etc. end -- ------------------------------------------------------------------------------- -- Listener setup scene:addEventListener( "create", scene ) scene:addEventListener( "show", scene ) scene:addEventListener( "hide", scene ) scene:addEventListener( "destroy", scene ) -- ------------------------------------------------------------------------------- return scene

Thank you.

Hi @trueisawesome,

You say a black screen “pops up”, but does it really “pop up” or does the app just go blank (black) without crashing? If so, it might be an issue where you’re not properly cleaning up your memory between losses, so eventually you exceed the device’s memory and Composer recognizes that and kills the scene (internally it will do so).

Brent

How do i fix this . How do i make it so that the game goes on as long as the player wants?

Thank you

Have you looked at your console log looking for errors??

Rob

No errors just whats Normally there. Please help i dont know what to do.

This might not be the issue or reason for the black screen, but you’re not implementing collision listeners properly.

This is not correct:

[lua]

block.collision = onCollision

block:addEventListener( “collision” )

[/lua]

This is also not correct:

[lua]

block2.collision = onCollision

[/lua]

This IS correct:

[lua]

block.collision = onCollision

block:addEventListener( “collision”, block )

[/lua]

Please, please follow the guide on this topic carefully. I have seen dozens (hundreds?) of posts over the years where developers struggle with collisions, simply because they did not follow the examples outlined very clearly in the guide:

https://docs.coronalabs.com/guide/physics/collisionDetection/index.html

Best regards,

Brent

Hi @trueisawesome,

You say a black screen “pops up”, but does it really “pop up” or does the app just go blank (black) without crashing? If so, it might be an issue where you’re not properly cleaning up your memory between losses, so eventually you exceed the device’s memory and Composer recognizes that and kills the scene (internally it will do so).

Brent

How do i fix this . How do i make it so that the game goes on as long as the player wants?

Thank you

Have you looked at your console log looking for errors??

Rob

No errors just whats Normally there. Please help i dont know what to do.

This might not be the issue or reason for the black screen, but you’re not implementing collision listeners properly.

This is not correct:

[lua]

block.collision = onCollision

block:addEventListener( “collision” )

[/lua]

This is also not correct:

[lua]

block2.collision = onCollision

[/lua]

This IS correct:

[lua]

block.collision = onCollision

block:addEventListener( “collision”, block )

[/lua]

Please, please follow the guide on this topic carefully. I have seen dozens (hundreds?) of posts over the years where developers struggle with collisions, simply because they did not follow the examples outlined very clearly in the guide:

https://docs.coronalabs.com/guide/physics/collisionDetection/index.html

Best regards,

Brent