2015-08-23 1 views
0

У меня есть небольшая проблема с короной SDK composer API. У меня есть 3 файла .lua - main.lua, character.lua и job.lua. Проблема в том, что когда я запускаю игру, она автоматически переходит к character.lua, и все в порядке. Затем я перехожу на job.lua, и это работает так же хорошо, но когда я пытаюсь вернуться к character.lua- ничего не происходит (фон не меняется). Вот как это выглядит:Corona SDK композитор - смена сцен не работает

main.lua:

local composer = require("composer") 
composer.gotoScene("character") 

character.lua:

local composer = require("composer") 
 

 
local scene = composer.newScene() 
 

 
-- ----------------------------------------------------------------------------------------------------------------- 
 
-- All code outside of the listener functions will only be executed ONCE unless "composer.removeScene()" is called. 
 
-- ----------------------------------------------------------------------------------------------------------------- 
 

 
-- local forward references should go here 
 

 
-- ------------------------------------------------------------------------------- 
 

 

 
-- "scene:create()" 
 
function scene:create(event) 
 

 
    local sceneGroup = self.view 
 

 
    -- Initialize the scene here. 
 
    -- Example: add display objects to "sceneGroup", add touch listeners, etc. 
 
    
 
local widget = require("widget") 
 

 

 
local bottomTabButtons ={ 
 
    { width=32, height=32, defaultFile="character.png", overFile="character_active.png", selected="true"}, 
 
    { width=32, height=32, defaultFile="job.png", overFile="job_active.png", onPress=function() composer.gotoScene("job")end}, 
 
} 
 
local bottomBar = widget.newTabBar{ 
 
    top = display.contentHeight-40, 
 

 
    buttons = bottomTabButtons 
 
} 
 

 

 

 

 
end 
 

 

 
-- "scene:show()" 
 
function scene:show(event) 
 

 
    local sceneGroup = self.view 
 
    local phase = event.phase 
 

 
    if (phase == "will") then 
 
     -- Called when the scene is still off screen (but is about to come on screen). 
 
    elseif (phase == "did") then 
 
     -- Called when the scene is now on screen. 
 
     -- Insert code here to make the scene come alive. 
 
     -- Example: start timers, begin animation, play audio, etc. 
 
    end 
 
end 
 

 

 
-- "scene:hide()" 
 
function scene:hide(event) 
 

 
    local sceneGroup = self.view 
 
    local phase = event.phase 
 

 
    if (phase == "will") then 
 
     -- Called when the scene is on screen (but is about to go off screen). 
 
     -- Insert code here to "pause" the scene. 
 
     -- Example: stop timers, stop animation, stop audio, etc. 
 
    elseif (phase == "did") then 
 
     -- Called immediately after scene goes off screen. 
 
    end 
 
end 
 

 

 
-- "scene:destroy()" 
 
function scene:destroy(event) 
 

 
    local sceneGroup = self.view 
 

 
    -- Called prior to the removal of scene's view ("sceneGroup"). 
 
    -- Insert code here to clean up the scene. 
 
    -- Example: remove display objects, save state, etc. 
 
end 
 

 

 
-- ------------------------------------------------------------------------------- 
 

 
-- Listener setup 
 
scene:addEventListener("create", scene) 
 
scene:addEventListener("show", scene) 
 
scene:addEventListener("hide", scene) 
 
scene:addEventListener("destroy", scene) 
 

 
-- ------------------------------------------------------------------------------- 
 

 
return scene

job.lua:

local composer = require("composer") 
 
local widget = require("widget") 
 
local scene = composer.newScene() 
 

 
-- ----------------------------------------------------------------------------------------------------------------- 
 
-- All code outside of the listener functions will only be executed ONCE unless "composer.removeScene()" is called. 
 
-- ----------------------------------------------------------------------------------------------------------------- 
 

 
-- local forward references should go here 
 

 
-- ------------------------------------------------------------------------------- 
 

 

 
-- "scene:create()" 
 
function scene:create(event) 
 

 
    local sceneGroup = self.view 
 

 
    -- Initialize the scene here. 
 
    -- Example: add display objects to "sceneGroup", add touch listeners, etc. 
 
    local background = display.newImage("background.png") 
 
    background.x=display.contentCenterX 
 
    background.y=display.contentCenterY 
 
    background.height=display.contentHeight 
 
    background.width=display.contentWidth 
 

 
     local function gotoCharacter(event) 
 
     composer.gotoScene("character") 
 
     print('asd') 
 
    end 
 

 
    local bottomTabButtons ={ 
 
    { width=32, height=32, defaultFile="character.png", overFile="character_active.png", onPress=function() composer.gotoScene("character") end}, 
 
    { width=32, height=32, defaultFile="job.png", overFile="job_active.png", selected="true"}, 
 
    } 
 
     
 

 
    local bottomBar = widget.newTabBar{ 
 
     top = display.contentHeight-40, 
 

 
     buttons = bottomTabButtons 
 
    } 
 

 
    
 
end 
 

 

 
-- "scene:show()" 
 
function scene:show(event) 
 

 
    local sceneGroup = self.view 
 
    local phase = event.phase 
 

 
    if (phase == "will") then 
 
     -- Called when the scene is still off screen (but is about to come on screen). 
 

 

 
    elseif (phase == "did") then 
 
     -- Called when the scene is now on screen. 
 
     -- Insert code here to make the scene come alive. 
 
     -- Example: start timers, begin animation, play audio, etc. 
 

 
    end 
 
end 
 

 

 
-- "scene:hide()" 
 
function scene:hide(event) 
 

 
    local sceneGroup = self.view 
 
    local phase = event.phase 
 

 
    if (phase == "will") then 
 
     -- Called when the scene is on screen (but is about to go off screen). 
 
     -- Insert code here to "pause" the scene. 
 
     -- Example: stop timers, stop animation, stop audio, etc. 
 

 
    elseif (phase == "did") then 
 
     -- Called immediately after scene goes off screen. 
 

 
    end 
 
end 
 

 

 
-- "scene:destroy()" 
 
function scene:destroy(event) 
 

 
    local sceneGroup = self.view 
 

 
    -- Called prior to the removal of scene's view ("sceneGroup"). 
 
    -- Insert code here to clean up the scene. 
 
    -- Example: remove display objects, save state, etc. 
 
end 
 

 

 
-- ------------------------------------------------------------------------------- 
 

 
-- Listener setup 
 
scene:addEventListener("create", scene) 
 
scene:addEventListener("show", scene) 
 
scene:addEventListener("hide", scene) 
 
scene:addEventListener("destroy", scene) 
 

 
-- ------------------------------------------------------------------------------- 
 

 
return scene

Заранее спасибо!

ответ

3

Проблема заключается в том, что вы не вставляете свои экранные объекты в сценарную группу. Вот почему его не удаляют. Вставьте все свои объекты в сценарную группу.

Например,

local background = display.newImage("background.png") 
background.x=display.contentCenterX 
background.y=display.contentCenterY 
background.height=display.contentHeight 
background.width=display.contentWidth 

sceneGroup:insert(background) 

--- Это изменение. Таким же образом вставьте все объекты в эту группу.