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

Lua if/elseif leading to different scenes is not working

此代码旨在在场景 1 和场景 2 之间的计时器上从一个场景切换到另一个场景。当 currentBar 变量计数器达到 4 时,它应该转到 scene3 但没有。这个例子从 scene2 开始。

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

我错过了什么?谢谢。

我看不到 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 侦听器。