Corona SDK 计时器 countUp 在按钮触摸时加速?

Corona SDK 计时器 countUp 在按钮触摸时加速?我在我的游戏中有15个问题,每次回答被触摸时,计时器 countUp 就会加速,每次转到另一个问题时都会加速..

这是我的按钮触摸事件

  buttonTouched = function(event)
    local t = event.target
    local id = t.id

    if event.phase == "began" and touchEnabled == true then
        display.getCurrentStage():setFocus( t )
        t.isFocus = true

        if id == "answer" then
            t.alpha = 0.6
        else
            t.xScale = 0.9
            t.yScale = 0.9
        end

    elseif t.isFocus then
        if event.phase == "ended" then
            display.getCurrentStage():setFocus( nil )
            t.isFocus = false

            if id == "answer" then
                t.alpha = 1
            else
                t.xScale = 1
                t.yScale = 1
            end

            -- 检查触摸是否完成在按钮内部。
            local b = t.contentBounds
            if event.x >= b.xMin and event.x <= b.xMax and event.y >= b.yMin and event.y <= b.yMax then
                utils.playSound("select")

                if id == "answer" then
                    if timer_trans ~= nil then
                        transition.cancel(timer_trans)
                        timer_trans = nil
                    end

                    if result_trans ~= nil then
                        transition.cancel(result_trans)
                        result_trans = nil
                    end

                    if label_result ~= nil then
                        display.remove(label_result)
                        label_result = nil
                    end

                    -- 显示一些我们可以转换的文本
                    label_result = display.newText({parent=uiGroup, text="", font=easyFont, fontSize=75})
                    label_result.anchorX = 0
                    label_result.x = label_question.x - 540
                    label_result.y = label_question.y + 400

                    if t.index == questions[onQuestion].answer then
                        label_result.text = "正确!"
                        label_result:setFillColor(0,0.6,0)
                        utils.playSound("score")
                        updateScore(1)

                    else
                        label_result.text = "错误。。。"
                        label_result:setFillColor(0.8,0,0)
                        utils.playSound("incorrect")
                    end

                    result_trans = transition.to(label_result, {time=1600, alpha=0.1, y=label_result.y-18,tag="transTag", onComplete=function()
                        display.remove(label_result)
                        label_result = nil
                    end})

                    -- 现在创建下一个问题
                    createQuestion()
                end
            end
        end
    end
    return true
end

function startTimer()
    clockTimer = timer.performWithDelay(1000,doCountUp,gameTime)
end

function doCountUp()

    currentTime = countUpText.text
    currentTime = currentTime +1
    countUpText.text = currentTime
     if(currentTime == 0) then
        countUpText.text = currentTime
        startTimer()
    end
end
点赞
用户7507804
用户7507804

计时器正在“加速”,因为您点击问题时不是重置当前计时器,而是创建一个新计时器。

您每次创建新问题时都会调用 startTimer()(假设您在 createQuestion()中设置countUpText.text =“-1”)。每次触摸答案时,您都要创建另一个计时器来更新 countUpText.text。您有多个计时器更新该文本,因为您没有删除先前创建的计时器,而只是创建新的计时器。

修复这个问题最简单的方法是,如果已经创建了计时器,则取消计时器并开始一个新的计时器:

local clockTimer

function startTimer()
    if (clockTimer ~= nil) then
        timer.cancel(clockTimer)
        clockTimer = nil
    end

    clockTimer = timer.performWithDelay(1000,doCountUp,gameTime)
end

因此,请将您的startTimer()函数更新为上面的内容,然后将local clockTimer添加到您的Lua文件的顶部。

2017-02-02 20:04:00