Hello Nick
Thanks for your reply. The createScene function is called when the game scene is called from menu. I still couldn’t find whats causing this. I have posted all the files for your perusual. Any help would be really helpful. Thanks
– game.lua
--------------------------------------------------------------------------------------- -- Requires ----------------------------------------------------------------------------------------- local storyboard = require("storyboard") local scene = storyboard.newScene() local collectable = require("collectable") local physics = require "physics" physics.start(); physics.pause( ) ----------------------------------------------------------------------------------------- -- Globals Variables ----------------------------------------------------------------------------------------- local currentLevel = 1 local prevTime = 0 local collectables = {} local screenW = display.contentWidth local screenH = display.contentHeight local halfW = display.contentWidth\*0.5 ----------------------------------------------------------------------------------------- -- Local Functions for this scene ----------------------------------------------------------------------------------------- local function loadLevel(level) local group = scene.view local levelData = require("Levels.level" .. level) local items = levelData.collectables local obs = levelData.obstacles for i=1,#items do local item = collectable.new(i, items[i].x, items[i].y) table.insert(collectables, item) group:insert(collectables[i].renderObject) end end ----------------------------------------------------------------------------------------- -- Scene Functions ----------------------------------------------------------------------------------------- -- Called when the scene's view does not exist: function scene:createScene( event ) local group = self.view --loadLevel(currentLevel) -- Doesn't Work here end -- Called immediately after scene has moved onscreen: function scene:enterScene( event ) local group = self.view physics.start(); loadLevel(currentLevel) -- Workd here end local function enterFrame(event) print("enterFrame" ) local curTime = event.time local dt = (curTime - prevTime) /(1000) prevTime = curTime local i = 1 while i \<= #collectables do collectables[i]:update(dt) if(collectables[i]:checkwithinbounds()) then i = i + 1 else collectables[i]:destroy() table.remove(collectables,i) end end end function ChangeScene( event ) storyboard.gotoScene( "menu", "fade", 500 ) end -- Called when scene is about to move offscreen: function scene:exitScene( event ) local group = self.view Runtime:removeEventListener( "enterFrame", enterFrame ) Runtime:removeEventListener("tap", ChangeScene ) end -- If scene's view is removed, scene:destroyScene() will be called just prior to: function scene:destroyScene( event ) local group = self.view package.loaded[physics] = nil physics = nil end ----------------------------------------------------------------------------------------- -- Add Event Listners ----------------------------------------------------------------------------------------- scene:addEventListener( "createScene", scene ) scene:addEventListener( "enterScene", scene ) scene:addEventListener( "exitScene", scene ) scene:addEventListener( "destroyScene", scene ) Runtime:addEventListener( "enterFrame", enterFrame ) Runtime:addEventListener( "tap", ChangeScene ) ----------------------------------------------------------------------------------------- return scene
– menu.lua
local storyboard = require( "storyboard" ) local scene = storyboard.newScene() -- include Corona's "widget" library local widget = require "widget" -------------------------------------------- -- forward declarations and other locals local playBtn -- 'onRelease' event listener for playBtn local function onPlayBtnRelease() -- go to level1.lua scene --storyboard.removeScene( "game" ) storyboard.gotoScene( "game", "fade", 500 ) return true -- indicates successful touch end ----------------------------------------------------------------------------------------- -- BEGINNING OF YOUR IMPLEMENTATION -- -- NOTE: Code outside of listener functions (below) will only be executed once, -- unless storyboard.removeScene() is called. -- ----------------------------------------------------------------------------------------- -- Called when the scene's view does not exist: function scene:createScene( event ) local group = self.view -- display a background image local background = display.newImageRect( "background.jpg", display.contentWidth, display.contentHeight ) background.anchorX = 0 background.anchorY = 0 background.x, background.y = 0, 0 -- create/position logo/title image on upper-half of the screen local titleLogo = display.newImageRect( "logo.png", 264, 42 ) titleLogo.x = display.contentWidth \* 0.5 titleLogo.y = 100 -- create a widget button (which will loads level1.lua on release) playBtn = widget.newButton{ label="Play Now", labelColor = { default={255}, over={128} }, default="button.png", over="button-over.png", width=154, height=40, onRelease = onPlayBtnRelease -- event listener function } playBtn.x = display.contentWidth\*0.5 playBtn.y = display.contentHeight - 125 -- all display objects must be inserted into group group:insert( background ) group:insert( titleLogo ) group:insert( playBtn ) end -- Called immediately after scene has moved onscreen: function scene:enterScene( event ) local group = self.view local previous = storyboard.getPrevious() if previous ~= "main" and previous then storyboard.removeScene(previous) end -- INSERT code here (e.g. start timers, load audio, start listeners, etc.) end -- Called when scene is about to move offscreen: function scene:exitScene( event ) local group = self.view -- INSERT code here (e.g. stop timers, remove listenets, unload sounds, etc.) 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 playBtn = 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 ) -- "exitScene" event is dispatched whenever before next scene's transition begins scene:addEventListener( "exitScene", 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
– collectable.lua
local collectable = {} local collectable\_mt = {\_\_index = collectable} ----------------------------------------------------------------------------------------- -- Private Functions ----------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------- -- Public Functions ----------------------------------------------------------------------------------------- function collectable.new( \_id, \_x, \_y) local newCollectable = { renderObject = display.newImageRect("Assets/coin.png", 75, 75), } physics.addBody(newCollectable.renderObject, "static", { density=73.0, friction=0.3, bounce=0.3 }) newCollectable.renderObject.x = \_x newCollectable.renderObject.y = \_y newCollectable.renderObject.name = "collectable" newCollectable.renderObject.id = \_id newCollectable.renderObject.isSensor = true return setmetatable( newCollectable, collectable\_mt ) end function collectable:translate(\_x, \_y) self.renderObject.x = self.renderObject.x - \_x self.renderObject.y = self.renderObject.y - \_y end function collectable:update(\_dt) local speed = 100 self.renderObject:translate(-(speed \* \_dt), 0) end function collectable:checkwithinbounds(\_dt) if (self.renderObject.x + 75/2 \<= 0) then return false else return true end end function collectable:destroy() self.renderObject:removeSelf() self.renderObject = nil end return collectable
– level1.lua
local levelData = {}; levelData.collectables = { {x = 542, y = 262}, {x = 870, y = 262}, {x = 1030, y = 534}, {x = 1670, y = 166}, {x = 1878, y = 166}, } return levelData;
– main.lua
-- hide the status bar display.setStatusBar( display.HiddenStatusBar ) -- include the Corona "storyboard" module local storyboard = require "storyboard" -- load menu screen storyboard.gotoScene( "menu" )