We need to set up the game over screen and have it display the final score that the player has achieved at the end of the round:
callGameOver()
:local callGameOver = function()
gameIsActive
as false
and pause the physics engine. Remove the panda
and stars
objects from the stage:gameIsActive = false physics.pause() panda:removeSelf() panda = nil stars:removeSelf() stars = nil
hudGroup
group. Use the transition.to
method to display the game over objects on the screen:local shade = display.newRect( 0, 0, 480, 320 ) shade:setFillColor( 0, 0, 0, 0.5) shade.x = display.contentCenterX shade.y = display.contentCenterY gameOverDisplay = display.newImage( "gameOverScreen.png") gameOverDisplay.x = 240; gameOverDisplay.y = 160 gameOverDisplay.alpha = 0 hudGroup:insert( shade ) hudGroup:insert( gameOverDisplay ) transition.to( shade, { time=200 } ) transition.to( gameOverDisplay, { time=500, alpha=1 } )
newScore
. Set isVisible
to false
for the counter
and scoreText
. Introduce scoreText
again to display the final score in a different location on the device screen. Close the function:local newScore = gameScore setScore( newScore ) counter.isVisible = false scoreText.isVisible = false scoreText.text = "Score: " .. gameScore scoreText.xScale = 0.5; scoreText.yScale = 0.5 scoreText.x = 280 scoreText.y = 160 scoreText:toFront() timer.performWithDelay( 1000, function() scoreText.isVisible = true; end, 1 ) end
The callGameOver()
method displays the game over screen when time runs out or if all the stars are collected. We have set gameIsActive
to false
and paused all the physics so the panda cannot be moved with any other screen touches. The panda and stars are then removed from the scene. The shade
and gameOverDisplay
objects are visible through transition.to
, so it notifies the player that the round is over. The final score will display at the end of the round in front of the gameOverDisplay
object.