【问题标题】:Timer called twice in scene Corona SDK定时器在场景 Corona SDK 中调用了两次
【发布时间】:2015-11-13 00:42:57
【问题描述】:

我的代码中有一个计时器,它每 1 秒生成一次对象。 当一个物体与“deathObj”碰撞时,场景会从场景 2 变为场景 1。 但是当我从场景1返回场景2时,计时器被调用两次,如果我重试将被调用4次等等...... 如何调用一次计时器?

function scene:show( event )

local sceneGroup = self.view
local phase = event.phase

if ( phase == "will" ) then

    elseif ( phase == "did" ) then
        local function spawn()
            --things for spawn the object
        end

    end


    local function deathObjCollision(self, event)
        if (event.phase == "began" ) then
        composer.gotoScene("scene1")
        end
    end

    deathObj = display.newRect(300,1900,1600,100)
    physics.addBody(deathObj, "static", {density=1.0, friction=0.5, bounce=0.3})
    deathObj.collision = deathObjCollision
    deathObj:addEventListener( "collision", deathObj )


    spawnTimer = timer.performWithDelay(1000, spawn, -1)

    end
end   

【问题讨论】:

    标签: timer lua sdk coronasdk scene


    【解决方案1】:

    当您从场景 2 切换到场景 1 时,尝试暂停或取消计时器。

    【讨论】:

      【解决方案2】:

      我在游戏第二次结束时使用这个解决了。

      timer.cancel(spawnTimer)
      spawnTimer = timer.performWithDelay(seconds, spawn, -1)
      

      【讨论】:

        【解决方案3】:

        追踪你的代码,你似乎有太多的结局。为了您自己的理智以及帮助那些想要帮助您的人,让您的代码缩进正确非常重要。

        如果我正确阅读了您的代码,您的计时器不在“if - then - else”语句之外,该语句测试您是处于“will”阶段还是“did”阶段。 scene:show() 事件触发两次,一次在屏幕外(“will”),一次在屏幕上后(“did”)。由于您的计时器不在此范围内,因此它将执行两次。

        【讨论】:

        • 谢谢你的回答,你说的是对的,但问题出在另一个场景。在场景 1 中,有两个触摸事件侦听器用于将您带入场景 2 的按钮,现在我已修复它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-19
        相关资源
        最近更新 更多