If statement 导致不同场景的Lua if/elseif不工作

If statement 导致不同场景的Lua if/elseif不工作,if-statement,lua,coronasdk,If Statement,Lua,Coronasdk,此代码设计用于在场景1和场景2之间通过计时器从场景切换到场景。当currentBar变量计数器达到4时,它应该转到scene3,但不会。本例从场景2开始 local composer = require ( "composer") local scene = composer.newScene() local function showScene2() local options = { effect = "slideLeft",

此代码设计用于在场景1和场景2之间通过计时器从场景切换到场景。当currentBar变量计数器达到4时,它应该转到scene3,但不会。本例从场景2开始

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)

我错过了什么?谢谢。

我不知道在哪里创建了
tempo
currentBar
,所以我假设它们是全局变量

关于你的问题,我可能会重写一点并创建一个新文件(因为scene1和scene2都将调用此函数,将来可能还会调用更多场景,所以最好将其放在一个单独的文件中)

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

一些代码:

场景_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
enterFrame侦听器将每帧检查一次(每秒30或60次),因此当您更新
currentBar
值时,它将实际采取适当的操作

如果更改场景,也不要忘记删除enterFrame侦听器

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 
)