2015-09-14 85 views
0

此代码旨在在场景1和场景2之间的定时器之间切换场景。当currentBar变量计数器达到4时,它应该去scene3但是不会。这个例子从scene2开始。Lua if/elseif导致不同场景不起作用

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

    local function showScene2() 
     local options = { 
      effect = "slideLeft", 
      time = 30, 
     } 
    composer.gotoScene("scene2", options) 

    end 

-- create scene 

function scene:createScene (event) 
local sceneGroup = self.view 

end 

function scene:show(event) 
local sceneGroup = self.view 
local phase = event.phase 
    if (phase == "will") then 
     local background = display.newImage("images/staveBlankgrey2.png", 240, 160) 
     note1 = display.newImage("images/crDown.png", 130, 171) 
     note2 = display.newImage("images/crUp.png", 320, 144) 

     sceneGroup:insert(background) 
     sceneGroup:insert(note1) 
     sceneGroup:insert(note2) 

    elseif (phase == "did") then 
     currentBar = currentBar + 1 

这部分工作得很好:

  if currentBar < 4 then 
       local function showScene2() 
        local options = { 
         effect = "slideLeft", 
         time = 30, 
        } 
       composer.gotoScene("evenBars", options) 
      end 
       timer.performWithDelay(tempo, showEvenBars) 

本节不工作:

  elseif currentBar == 4 then  
       local function showEndBar() 
        local options = { 
         effect = "slideLeft", 
         time = 30, 
        } 
       composer.gotoScene("endBar", options) 
      end 
       timer.performWithDelay(tempo, showEndBar) 

      end 
    end 
end 

function scene:hide(event) 
    local sceneGroup = self.view 
    local phase = event.phase 
end 

function scene:destroy(event) 
    local sceneGroup = self.view 
end 

scene:addEventListener("create", scene) 
scene:addEventListener("show", scene) 
scene:addEventListener("hide", scene) 
scene:addEventListener("destroy", scene) 

return scene 

我缺少什么?谢谢。

回答

0

我看不到在哪里创建了tempocurrentBar,所以我会假设它们是全局变量。

关于你的问题,我可能会重写它一点点,并创建一个新文件(因为scene1和scene2都将调用这个功能,未来可能会有更多的场景,所以最好把它放在一个单独的文件中)。

然后在场景中我会添加一个enterFrame事件监听器。

一些代码:

scene_swapper.lua

local M = {} 

function M.returnSceneName(val) 
    if val == nil then return nil 
    elseif val == 4 then return "scene1" 
    elseif val < 4 then return "scene2" 
    end 
end 

return M 

事件监听我的场景:

local sw = require("scene_swapper") 
Runtime:addEventListener("enterFrame", 
    function() 
     local swap_to_scene = sw.returnSceneName(currentBar) 
     if swap_to_scene ~= nil and swap_to_scene ~= composer.getSceneName("current") then 
      composer.gotoScene(swap_to_scene) 
     end 
    end 
) 

的enterFrame事件侦听器将每帧进行检查(30或60次每秒),所以当你更新currentBar值时,它实际上会采取适当的行动。

如果你改变场景,也别忘了删除enterFrame监听器。