Button Lua:当通过按钮转换传回场景时,值为零

Button Lua:当通过按钮转换传回场景时,值为零,button,timer,lua,return-value,scene,Button,Timer,Lua,Return Value,Scene,我是编程新手——不到一年。 我使用两种类型的场景转换:一种带有按钮,另一种带有计时器。 我可以使用计时器将值传回场景,但无法使用按钮将值(在本例中为x)传回场景。该变量变得无效,并且该值完全消失,包括从模拟器输出中消失。X停止增加或发挥任何作用。我如何克服这个问题 --梅因·卢阿 display.setStatusBar( display.HiddenStatusBar ) x = 0 local composer = require "composer" composer.got

我是编程新手——不到一年。 我使用两种类型的场景转换:一种带有按钮,另一种带有计时器。 我可以使用计时器将值传回场景,但无法使用按钮将值(在本例中为x)传回场景。该变量变得无效,并且该值完全消失,包括从模拟器输出中消失。X停止增加或发挥任何作用。我如何克服这个问题

--梅因·卢阿

display.setStatusBar( display.HiddenStatusBar )

    x = 0

local composer = require "composer"

composer.gotoScene("test1")
--test1.lua

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

function scene:create(event)
    local screenGroup = self.view

    local widget = require "widget"
    local test2Btn
    local function onTest2BtnRelease()
            composer.gotoScene("test2")
            return true 
    end

            test2Btn = widget.newButton{
            defaultFile = "images/pic1.png",
            width= 480, height= 320,
            onRelease = onTest2BtnRelease 
    }

    screenGroup:insert(test2Btn)
end

    x = x + 1
    print("test1 x = "..x)  

scene:addEventListener("create", scene)

return scene
--test2.lua

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

function scene:create(event)
    local screenGroup = self.view

    local widget = require "widget"
    local test3Btn
    local function onTest3BtnRelease()
            composer.gotoScene("test3")
            return true 
    end

            test3Btn = widget.newButton{
            defaultFile = "images/pic2.png",
            width= 480, height= 320,
            onRelease = onTest3BtnRelease 
    }

    screenGroup:insert(test3Btn)
end

    x = x + 1
    print("test2 x = "..x)  

scene:addEventListener("create", scene)

return scene
--test3.lua

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

    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

           background = display.newImage( "images/pic3.png", 240, 160 )

                    sceneGroup:insert( background )

        elseif ( phase == "did") then                                                                   
              local function showTest4()
                   local options = {
                        effect = "slideLeft",
                        time = 30,
                   }
           composer.gotoScene( "test4", options )
        end

        timer.performWithDelay( 60000/40, showTest4 )
        end 
    end 

                    x = x + 1
                    print("test3 x = "..x)                                                          

    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
--test4.lua

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

    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
            background = display.newImage( "images/pic4.png", 240, 160 )
            sceneGroup:insert( background )

            elseif ( phase == "did") then                                                                   
                 local function showTest1()
                     local options = {
                         effect = "slideLeft",
                         time = 30,
                     }
            composer.gotoScene( "test1", options )
            end

    timer.performWithDelay( 60000/40, showTest1 )
    end

  end 

                    x = x + 1
                    print("test4 x = "..x)                                                          

    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

请尝试更详细地指定代码中哪些调用不能按预期工作。列出a)您的操作、b)程序输出以及与预期不同的注释Shello Ctx,在我的示例中,main.lua中的x设置为零。场景通过按钮或计时器从一个移动到另一个。在这个场景序列中,x每次递增:在test1.lua(通过按钮过渡到下一个场景)中,x=1。在test2.lua(通过按钮转换到下一个场景)中,x=2。在test3.lua(通过定时器转换到下一个场景)中,x=3。在test4.lua(通过定时器转换到下一个场景)中,x=4。但是在返回test1.lua(来自test4.lua)时,x=1。我需要x=5。输出模拟器不会打印出x的新值。谢谢。这真的是第二次转换到test1时的输出:“test1x=1”吗?与第一次转换完全一样?在深入研究之后,我无法相信test1.lua中的print命令会再次执行,因为框架只会对文件require()d执行一次,并在此之后重新使用。请更准确地描述该行为,您如何准确地看到test4.luaThe中composer.gotoScene(“test1”,options)后面的x=1该应用程序本质上是一个幻灯片放映,重复一系列场景,所有场景都有不同的数据。每次通过序列后,它都返回到起始位置–在本例中,这是test1.lua。为了在数据库中工作(示例中未显示),调用数据的变量必须每次递增。当场景更改是由(1)计时器对计时器场景更改中的计时器,(2)按钮对按钮场景更改中的按钮,(3)计时器对按钮对计时器场景更改中的计时器触发,但不是由(4)计时器对按钮场景更改中的计时器触发时,此功能正常。