game over screen issue

Ok my game is crashing when it goes into the game over screen. Below is what I’m getting from the terminal. But I can’t figure out what I need to fix. Any help or suggestions?

[lua]Runtime error
/Desktop/level1.lua:366: attempt to call field ‘Button’ (a nil value)
stack traceback:
[C]: in function ‘Button’
/Desktop/level1.lua:366: in function ‘displayGameOver’
/Desktop/level1.lua:330: in function ‘blankOutScreen’
/Desktop/level1.lua:311: in function
/Desktop//level1.lua:308>

[import]uid: 80826 topic_id: 15072 reply_id: 315072[/import]

The variable “Button” doesn’t exist or has been set to nil is what that message is telling you.

Post up some code and we can help further :slight_smile: [import]uid: 84637 topic_id: 15072 reply_id: 55796[/import]

The error says to me that you have an error in the file called level1.lua where from the function blankOutScreen, displayGameOver is called and that is attempting to display a button called Button which is either removed or not initialised.

If you can post the code from line 300 to 400, that will atleast give an idea of where the error is

cheers,

?:slight_smile: [import]uid: 3826 topic_id: 15072 reply_id: 55822[/import]

Ok below is the code. This is the parts of the code, that is giving me the error code in the terminal. When i have this code in another project file with the same UI.lua it works great. But in this project it keeps giving me errors. Ive been messing with this for about a week now and can’t seem to figure it out. Thanks in advance for any help.

[lua]
function explodeBomb(bomb, listener)

bomb:removeEventListener(“touch”, listener)

– The bomb should not move while exploding
bomb.bodyType = “kinematic”
bomb:setLinearVelocity(0, 0)
bomb.angularVelocity = 0

– Shake the stage
local stage = display.getCurrentStage()

local moveRightFunction
local moveLeftFunction
local rightTrans
local leftTrans
local shakeTime = 50
local shakeRange = {min = 1, max = 25}

moveRightFunction = function(event) rightTrans = transition.to(stage, {x = math.random(shakeRange.min,shakeRange.max), y = math.random(shakeRange.min, shakeRange.max), time = shakeTime, onComplete=moveLeftFunction}); end
moveLeftFunction = function(event) leftTrans = transition.to(stage, {x = math.random(shakeRange.min,shakeRange.max) * -1, y = math.random(shakeRange.min,shakeRange.max) * -1, time = shakeTime, onComplete=moveRightFunction}); end

moveRightFunction()

local linesGroup = display.newGroup()

– Generate a bunch of lines to simulate an explosion
local drawLine = function(event)

local line = display.newLine(bomb.x, bomb.y, display.contentWidth * 2, display.contentHeight * 2)
line.rotation = math.random(1,360)
line.width = math.random(4, 12)
linesGroup:insert(line)
end
local lineTimer = timer.performWithDelay(100, drawLine, 0)

– Function that is called after the pre explosion
local explode = function(event)

audio.play(explosion)
blankOutScreen(bomb, linesGroup);
timer.cancel(lineTimer)
stage.x = 0
stage.y = 0
transition.cancel(leftTrans)
transition.cancel(rightTrans)

end

– Play the preExplosion sound first followed by the end explosion
audio.play(preExplosion, {onComplete = explode})

timer.cancel(fruitTimer)
timer.cancel(bombTimer)

end

function blankOutScreen(bomb, linesGroup)

local gameOver = displayGameOver()
gameOver.alpha = 0 – Will reveal the game over screen after the explosion

– Create an explosion animation
local circle = display.newCircle( bomb.x, bomb.y, 5 )
local circleGrowthTime = 300
local dissolveDuration = 1000

local dissolve = function(event) transition.to(circle, {alpha = 0, time = dissolveDuration, delay = 0, onComplete=function(event) gameOver.alpha = 1 end}); gameOver.alpha = 1 end

circle.alpha = 0
transition.to(circle, {time=circleGrowthTime, alpha = 1, width = display.contentWidth * 3, height = display.contentWidth * 3, onComplete = dissolve})

– Vibrate the phone
system.vibrate()

bomb:removeSelf()
linesGroup:removeSelf()

end

function displayGameOver()

– Will return a group so that we can set the alpha of the entier menu
local group = display.newGroup()

– Dim the background with a transperent square
local back = display.newRect( 0,0, display.contentWidth, display.contentHeight )
back:setFillColor(0,0,0, 255 * .1)
group:insert(back)

local gameOver = display.newImage( “gameover.png”)
gameOver.x = display.contentWidth / 2
gameOver.y = display.contentHeight / 2
group:insert(gameOver)

local replayButton = ui.newButton{
default = “replayButton.png”,
over = “replayButton.png”,
onRelease = function(event) group:removeSelf(); startGame() end
}
group:insert(replayButton)

replayButton.x = display.contentWidth / 2
replayButton.y = gameOver.y + gameOver.height / 2 + replayButton.height / 2

return group
end
[import]uid: 80826 topic_id: 15072 reply_id: 55871[/import]