Hi all,
I am trying to run a very very basic game, but I am struggling to make the gotoScene respond.
Main. lua file is:
local storyboard = require "storyboard" storyboard.purgeOnScreenChange = true -- hide status bar display.setStatusBar(display.HiddenStatusBar) -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- common variables centerX = display.contentCenterX centerY = display.contentCenterY screenLeft = display.screenOriginX screenWidth = display.contentWidth - screenLeft \* 2 screenRight = screenLeft + screenWidth screenTop = display.screenOriginY screenHeight = display.contentHeight - screenTop \* 2 screenBottom = screenTop + screenHeight display.contentWidth = screenWidth display.contentHeight = screenHeight storyboard.gotoScene ("menu", {effect = "slideDown"})
menu code is
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-- common variables centerX = display.contentCenterX centerY = display.contentCenterY screenLeft = display.screenOriginX screenWidth = display.contentWidth - screenLeft \* 2 screenRight = screenLeft + screenWidth screenTop = display.screenOriginY screenHeight = display.contentHeight - screenTop \* 2 screenBottom = screenTop + screenHeight display.contentWidth = screenWidth display.contentHeight = screenHeight -------------- forward refs local background local myPic local text local backgroundMusicChannel ----~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- loading sound volumes local startGameSound = audio.loadSound("sound/startTrack.mp3") local tahaRunSound = audio.loadSound("sound/zoom.wav") local storyboard = require "storyboard" local scene = storyboard.newScene() local function playSc (event) storyboard.gotoScene ("Game") return true -- print ("go to Game Mode") end function scene: createScene(event) local group = self.view -- background = display.newText( "test" , 0, 0, "Arial", 40 ) -- background background = display.newImage("background.png") background.width = screenWidth background.height= screenHeight background:scale (1.4,1.4) background.x = centerX background.y = centerY -- group:insert (background) transition.to( background, { time=4000, alpha=1, xScale = 1, yScale =1} ) -- background music backgroundMusicChannel = audio.play( startGameSound, { loops=-1 } ) -- group.insert (backgroundMusicChannel) function showTitle() gameTitle = display.newImage("gametitle.png") gameTitle.x = centerX gameTitle.y = screenTop +90 gameTitle:scale (1,1) gameTitle.alpha = 0 gameTitle:scale(4, 4) scoreTxt = display.newText( "0", 0, 0, "Arial", 400 ) scoreTxt.x = centerX scoreTxt.y = centerY scoreTxt.alpha = 0.5 scoreTxt: setTextColor (0.56, 0.56, 0.56) transition.to( gameTitle, {time=500, alpha=1, xScale=3, yScale=3} ) end -- taha image myPic = display.newImage( "happy.png") myPic:scale (1,1) myPic.x = centerX myPic.y = centerY + 60 -- group:insert (myPic) transition.to( myPic, { time=2000, alpha=1, xScale = 3, yScale =3, rotation = 360, y=centerY, onComplete=showTitle } ) -- instruction text local text = display.newText( "Tap me to start", 0, 0, "Arial", 60 ) text.x = centerX text.y = display.contentHeight -30 text:setTextColor(230, 250, 12) -- group:insert (text) local function goAway(event) display.remove(event.target) audio.stop( ) display.remove(myPic) display.remove(gameTitle) display.remove( text ) playSc() text = nil return true end function fancy() transition.to ( myPic, {time = 1000, xScale = 5, yScale =5, onComplete = goAway} ) end myPic:addEventListener ( "tap", fancy ) end --------------------------------------------eneter scene function scene:enterScene( event ) local group = self.view end function scene:exitScene( event ) local group = self.view end function scene:destroyScene( event ) local group = self.view end -- "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 ) --- scene:addEventListener( "destroyScene", scene ) return scene
Game code is
local storyboard = require "storyboard" local scene = storyboard.newScene() --~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-- hidding the status bar display.setStatusBar(display.HiddenStatusBar) --~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- common variables centerX = display.contentCenterX centerY = display.contentCenterY screenLeft = display.screenOriginX screenWidth = display.contentWidth - screenLeft \* 2 screenRight = screenLeft + screenWidth screenTop = display.screenOriginY screenHeight = display.contentHeight - screenTop \* 2 screenBottom = screenTop + screenHeight display.contentWidth = screenWidth display.contentHeight = screenHeight -------------- forward refs local happy local angry local angry2 local angry3 local angry4 local angry5 local score = 0 function gameOverAndReset(event) -- print(event.name.." occurred") storyboard.gotoScene("menu", "fade", 400) print ("collideds") end ------- function scene: createScene(event) local group = self.view local physics = require "physics" physics.start() physics.setGravity(0,0) -- SETUP GRAPHICS background = display.newImage("background.png") background.alpha = 0 background.width = screenWidth background.height= screenHeight --background: scale (screenWidth,screenHeight) happy = display.newImage("happy.png") happy.x = screenTop + 80 happy.y = screenLeft + 80 physics.addBody(happy, "dynamic") happy:scale(2,2) happy.type = "player" angry = display.newImage("rat.png") angry.x = centerX angry.y = centerY physics.addBody(angry, "static") angry.type = "bad" angry2 = display.newImage("dragon.png") angry2.x = centerX angry2.y = centerY physics.addBody(angry2, "static") angry2.type = "bad" angry3 = display.newImage("dog.png") angry3.x = centerX angry3.y = centerY physics.addBody(angry3, "static") angry3.type = "bad" angry4 = display.newImage("bear.png") angry4.x = centerX angry4.y = centerY physics.addBody(angry4, "static") angry4.type = "bad" angry5 = display.newImage("monkey.png") angry5.x = centerX angry5.y = centerY angry5: scale(0.5,0.5) physics.addBody(angry5, "static") angry5.type = "bad" function touchScreen(event) if event.phase == "ended" then transition.to(happy,{time=300, x=event.x, y=event.y}) end -- audio.play(mySnd) end Runtime:addEventListener("touch", touchScreen) function createGoodies() local goodiePics = {"eyecandy\_1.png","eyecandy\_2.png", "eyecandy\_3.png", "eyecandy\_4.png"} goodie = display.newImage(goodiePics[math.random (#goodiePics)]) goodie.x=math.random(120,screenWidth-100) goodie.y=math.random(120,screenHeight-100) goodie: scale(3,3) physics.addBody(goodie, "static") goodie.type = "goodie" end createGoodies() -- CREATE ANGRY MOVEMENT function moveAngry() transition.to(angry,{time=1500, x=math.random(80,screenWidth), y=math.random(60,screenHeight), onComplete=moveAngry}) transition.to(angry2,{time=1500, x=math.random(80,screenWidth), y=math.random(60,screenHeight)}) transition.to(angry3,{time=1500, x=math.random(80,screenWidth), y=math.random(60,screenHeight)}) transition.to(angry4,{time=1500, x=math.random(80,screenWidth), y=math.random(60,screenHeight)}) transition.to(angry5,{time=1500, x=math.random(80,screenWidth), y=math.random(60,screenHeight)}) end moveAngry() function onCollision( event) local agro = event.object1 local hit = event.object2 if ( event.phase == "began" ) then if (agro.type == "player" and hit.type == "goodie") then print( agro.type .. hit.type) display.remove (goodie) score = score + 1 scoreTxt.text = score timer.performWithDelay ( 100, createGoodies ) else -- print( agro.type .. hit.type) -- display.remove (goodie) -- score = score + 1 -- scoreTxt.text = score timer.performWithDelay(500, function()director:changeScene("Game")) end end end Runtime:addEventListener("collision", onCollision) end --------------------------------------------eneter scene function scene:enterScene( event ) local group = self.view end function scene:exitScene( event ) local group = self.view end function scene:destroyScene( event ) local group = self.view end -- "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 ) --- scene:addEventListener( "destroyScene", scene ) return scene
When I go to the Game module, everything works as expected but on the following line when I ask it to go to a function (which basically asks the code to go back to the menu page) does not work.
it print the collided but does not respond to the gotoScene
-- scoreTxt.text = score gameOverAndReset ()
could you please suggest, what is missing from the above code.
The desired result is to when collision happens between player and bad, the scene should be changed to Menu.
please suggest,
Thanks in advance.
Sh3i7141