storyboard gameover doenst work

Hey guys,

the problem i have right now is when i die 3 times i get an “game over” screen and when i click on return it goes back but the gamelevel still continues in the background. so here is the code below that causes my problem.

this is the ship.lua

– ship.lua

– Creates the ship the user will control

local storyboard = require(“storyboard”)

Bullets = require(“Classes.bullet”)

local shootSnd = audio.loadSound(‘Sound/shoot.wav’)

–local gameLayer    = display.newGroup()

local ship = {}

local ship_mt = { __index = ship }

local scene = scene  – make scene a local variable for quick reference

local gameover_returntomenu

local shipLives = 3

function ship:new() – constructor, just creates the class, nothing else

    local group = {}

   return setmetatable( group, ship_mt )

end

function ship:init(xloc, yloc) --initializer, add any variables or images here

        – create attributes

        self.spaceship = display.newGroup( )

        self.spaceship.name = “ship” – toegevoegd

        self.turret = display.newRect(self.spaceship,0,-10,15,15)

        self.turret:setFillColor ( 0, 255, 0  )

        self.image = display.newRect(self.spaceship,0,10,60,25)

        self.image:setFillColor ( 0, 255, 0  )

        self.spaceship.x = display.contentWidth / 2

        self.spaceship.y = display.contentHeight - 120

        self.bullet = require(“Classes.bullet”)

        self.direction = 4

        self.bulletFired = {}

        local borderCollisionFilter = { categoryBits = 4, maskBits = 6} 

        physics.addBody( self.spaceship, “dynamic”, {filter = borderCollisionFilter} )

        gui_lives = display.newText("Lives: "…shipLives,0,0,“Kemco Pixel”,35)

        gui_lives:setFillColor( 255 )

        gui_lives.x = 65

        gui_lives.y = 45

        

end

function ship:enterFrame()

    – body

    self.spaceship.x = self.spaceship.x + self.direction

end

function ship:buttonTouched(event)

    – body

    if  (event.id == “RightButtonTouched”) then

        self.direction = 4

        Runtime:addEventListener( “enterFrame”, self )

    elseif  (event.id == “RightButtonReleased”) then

        Runtime:removeEventListener( “enterFrame”, self )

    elseif  (event.id == “leftButtonTouched”) then

        self.direction = -4

        Runtime:addEventListener( “enterFrame”, self )

    elseif  (event.id == “leftButtonReleased”) then

        Runtime:removeEventListener( “enterFrame”, self )

    elseif  (event.id == “FireButtonTouched”) then

        --print(“fire!!!”)

        audio.play(shootSnd)

        local bullet = Bullets:new()

        bullet:init(self.spaceship.x -0)

        bullet:start( )        

    end

end

function ship.collision(self, event)

    – body

    print( “collision bomb” )

    if(shipLives > 1) then

        shipLives = shipLives - 1

        gui_lives.text = "Lives: "…shipLives

        gui_lives.x = 85

        gui_lives.y = 45

    elseif event.other.name == “bomb” then

        --display.remove( event.other )

        --ship.collision()

        --group:insert(bg)

        audio.stop( 1 )

        Runtime:removeEventListener( “enterFrame”, self )

        scene:removeEventListener(“buttonTouched”, self)

         self.spaceship:removeEventListener( “collision”, self ) – collided with another physics body

         self.spaceship:removeSelf()

        local gameover_message = display.newText(“Game Over!”,0,0,“Kemco Pixel”, 58)

            gameover_message.x = 400

            gameover_message.y = 500

            

        function returnToMenuTouch(event)

            if(event.phase == “began”) then

                storyboard.gotoScene(“menu”,“slideRight”,“1000”)

            end

        end

        gameover_returntomenu = display.newText(“Return To Menu”,0,0,“Kemco Pixel”, 48)

            gameover_returntomenu.x = 400

            gameover_returntomenu.y = 600

            gameover_returntomenu:addEventListener( “touch”, returnToMenuTouch)

            

    – if event.other.name == “bomb” then

    –     Runtime:removeEventListener( “enterFrame”, self )

    –     scene:removeEventListener(“buttonTouched”, self)

    –     self.spaceship:removeEventListener( “collision”, self ) – collided with another physics body

    –     self.spaceship:removeSelf()

    –     self = nil

    –     --local gameoverText = display.newText(“Game Over!”, 0, 0, native.systemFont, 35)

    –     --gameoverText.x = display.contentCenterX

    –     --gameoverText.y = display.contentCenterY

    –     --gameLayer:insert(gameoverText)

    –     message = { – toegevoegd

    –         name = “gameOver”

    –         }

    –     scene:dispatchEvent(message)

    end

end

function ship:start() —  Create Listeneres, start things that need to be ‘running’

    scene:addEventListener(“buttonTouched”, self)

    self.spaceship:addEventListener( “collision”, self ) – collided with another physics body

    scene:addEventListener(“returnToMenuTouch”,self)

end

return ship

my enemy.lua

– enemy.lua

– Create the Enemy’s and there functionality

local enemys = {}

local enemys_mt = { __index = enemys }

local scene = scene  – make scene a local variable for quick reference

local bomb = require(“Classes.bomb”)

function enemys:new() – constructor, just creates the class, nothing else

    local group = {}

    return setmetatable( group, enemys_mt )

end

function enemys:init(xloc, yloc) --initializer, add any variables or images here

        – create attributes

        self.image = display.newImage(“Assets/Enemy.png”)

        self.image.x = xloc

        self.image.y = yloc

        self.image.name = “enemy”

        self.movement = 2

        self.rightHit = 0

        self.leftHit = 0

        self.numberOfWallHits = 0

        local borderCollisionFilter = { categoryBits = 8, maskBits = 9} 

        physics.addBody( self.image, “dynamic”, {filter = borderCollisionFilter} )

end

local function dropBomb( event, self )

    timer.cancel( self.clock )

    local newBomb = bomb:new()

    newBomb:init(self.image.x - 10, self.image.y + 5)

    newBomb:start( )

    local delay = math.random(1000,10000)

    self.clock = timer.performWithDelay( delay, function (event) dropBomb(event,self) end, 1)

end

function enemys.enterFrame(self, event)

    self.image.x = self.image.x + self.movement

end

function enemys.collision( self, event )

–print( “in here” )

    --self.movement = self.movement * -1

    if event.other.name == “rightWall” then

        local message = {

                name=“hit_rightWall_event”

                }

        scene:dispatchEvent(message)

    elseif event.other.name == “leftWall” then

        local message = {

                name=“hit_leftWall_event”

                }

        scene:dispatchEvent(message)

    elseif event.other.name == “bullet” then

            message = {

                name = “enemyDead”

            }

        scene:dispatchEvent(message)        

        Runtime:removeEventListener( “enterFrame”, self )

        self.image:removeEventListener( “collision”, self ) – collided with another physics body

        scene:removeEventListener(‘hit_rightWall_event’, self)

        scene:removeEventListener(‘hit_leftWall_event’, self)

        self.image:removeSelf()

        timer.cancel(self.clock)

        self = nil

    – elseif event.other.name == “shipDead”  then

    –     print( “gameover” )

    –     scene:dispatchEvent(message)        

    –     Runtime:removeEventListener( “enterFrame”, self )

    –     self.image:removeEventListener( “collision”, self ) – collided with another physics body

    –     scene:removeEventListener(‘hit_rightWall_event’, self)

    –     scene:removeEventListener(‘hit_leftWall_event’, self)

    –     self.image:removeSelf()

    –     timer.cancel(self.clock)

    –     self = nil

    end

end

function enemys:start() —  Create Listeneres, start things that need to be ‘running’

    Runtime:addEventListener( “enterFrame”, self ) – runtime listener to move the enemy

    self.image:addEventListener( “collision”, self ) – collide with another physics body

    scene:addEventListener( “hit_rightWall_event”, self )

    scene:addEventListener( “hit_leftWall_event”, self )

– voor de bom

    local delay = math.random(1000, 10000)

    self.clock = timer.performWithDelay( delay, function (event) dropBomb(event, self) end, 1)

end

local function checkNumHits( self )

    --self.numberOfWallHits = self.numberOfWallHits + 1

    if self.numberOfWallHits == 4 then

        self.numberOfWallHits = 0 – toegevoegd

        self.movement = self.movement + 1 – toegevoegd

        timer.performWithDelay( 1, – 1 millisecond delay

                    function () – anonymous function to perform update

                        self.image.y = self.image.y + 30

                    end

                , 1)

        --self.numberOfWallHits = 0

    end

end

function enemys.hit_rightWall_event( self, event )

    self.rightHit = self.rightHit + 1

    if ( self.rightHit == 1 ) then

        self.movement = self.movement * (-1)

        self.leftHit = 0

        self.numberOfWallHits = self.numberOfWallHits + 1

    end

    checkNumHits(self)

    

end

function enemys.hit_leftWall_event( self, event )

    self.leftHit = self.leftHit + 1

    if ( self.leftHit == 1 ) then

        self.movement = self.movement * (-1)

        self.rightHit = 0

        self.numberOfWallHits = self.numberOfWallHits + 1

    end

    checkNumHits(self)

end

return enemys

and the menu.lua where it goes back to 

local storyboard = require( “storyboard” )

local scene = storyboard.newScene()

– include Corona’s “widget” library

local widget = require “widget”


– forward declarations and other locals

–local screenW, screenH, halfW, halfY = display.contentWidth, display.contentHeight, display.contentWidth*0.5, display.contentHeight*0.5

– Called when the scene’s view does not exist:

function scene:createScene( event )

    local group = self.view

    – display a background image

    local bg = display.newImageRect(“Assets/background.png”, 768, 1024)

        bg.x = display.contentWidth / 2

        bg.y = display.contentHeight / 2

        group:insert(bg)

    

    – place a game title on the screen

    local gametitle = display.newText(“Space Defender”,400,600,“Kemco Pixel”,80)        

        gametitle.x = display.contentWidth / 2

        gametitle.y = 100

        group:insert( gametitle )

    – ‘onRelease’ event listener for playBtn

    local function onPlayBtnRelease()

        – go to level1.lua scene

        storyboard.gotoScene( “storyboard-level1”, “slideLeft”)    

        --return true    – indicates successful touch

    end

    local function onInstructionBtnRelease()

        – go to Instruction.lua scene

        storyboard.gotoScene( “instruction”, “slideLeft”)

        --return true    – indicates successful touch

    end

    local function onCreditsBtnRelease()

        – go to Credits.lua scene

        storyboard.gotoScene( “credit”, “slideLeft”)    

        --return true    – indicates successful touch

    end

    – create a widget button (which will loads level1.lua on release)

    playBtn = widget.newButton{

        label=“Play Now”,

        labelColor = { default={255} },        

        defaultFile = “Assets/Button.png”,

        overFile = “Assets/Button_Purple.png”,

        width=150, height=60,

        left=300, top=250,

        font = “Kemco Pixel”,

        fontSize = 26,

        onRelease = onPlayBtnRelease – event listener function

    }        

    group:insert( playBtn )

    instructionBtn = widget.newButton{

        label=“Instruction”,

        labelColor = { default={255} },        

        defaultFile = “Assets/Button2.png”,

        overFile = “Assets/Button_Purple2.png”,

        width=150, height=60,

        left=300, top=350,

        font = “Kemco Pixel”,

        fontSize = 26,

        onRelease = onInstructionBtnRelease – event listener function

    }        

    group:insert( instructionBtn )

    creditsBtn = widget.newButton{

        label=“Credits”,

        labelColor = { default={255} },        

        defaultFile = “Assets/Button3.png”,

        overFile = “Assets/Button_Purple3.png”,

        width=150, height=60,

        left=300, top=450,

        font = “Kemco Pixel”,

        fontSize = 26,

        onRelease = onCreditsBtnRelease – event listener function

    }        

    group:insert( creditsBtn )

end

– Called immediately after scene has moved onscreen:

function scene:enterScene( event )

    local group = self.view

    

    if storyboard.getPrevious() ~= nil then

        storyboard.removeScene(storyboard.getPrevious())

    end

    

end

– If scene’s view is removed, scene:destroyScene() will be called just prior to:

function scene:destroyScene( event )

    local group = self.view

    

    if playBtn then

        playBtn:removeSelf()    – widgets must be manually removed

        instructionBtn:removeSelf( )

        creditsBtn:removeSelf( )

        playBtn = nil

    elseif instructionBtn then

        instructionBtn:removeSelf( )

        instructionBtn = nil

    elseif creditsBtn then

        creditsBtn:removeSelf( )

        creditsBtn = nil

    end

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 )

– “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

so the main problem lies in the ship.lua cuz i dont delete the scene i think, but to tell you the truth i really dont know how. 

hope that someone can help me out of this.