If statement 导致不同场景的Lua if/elseif不工作
此代码设计用于在场景1和场景2之间通过计时器从场景切换到场景。当currentBar变量计数器达到4时,它应该转到scene3,但不会。本例从场景2开始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",
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
)