Kilik Sky
Kilik Sky

Reputation: 161

Corona SDK timer countUp speeds up when button is touch?

Corona SDK timer countUp speeds up when button is touch? I do have 15 question in my game and everytime the answer is being touch the timer countUp speeds up everytime it goes to the another question..

Here is my button touch event

  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

            -- Check that touch finished in the button.
            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

                    -- Show some text that we can transition
                    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 = "Correct!"
                        label_result:setFillColor(0,0.6,0)
                        utils.playSound("score")
                        updateScore(1)

                    else
                        label_result.text = "Incorrect..."
                        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})

                    -- Now create the next quesiton
                    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

Upvotes: 0

Views: 121

Answers (1)

Stackoverflowuser123
Stackoverflowuser123

Reputation: 38

The timer is "speeding up" because instead of resetting the current timer you are creating a new timer when you click the question.

You call startTimer() every time you create a new question (assuming you set countUpText.text = "-1" in createQuestion(). Every time you touch the answer you create another timer to update the countUpText.text. You have multiple timers updating the text because you don't delete the previously created timers you are just creating new ones.

The easiest way to fix this is to cancel the timer and start a new one if a timer has been created:

local clockTimer

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

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

So update your startTimer() function to the above and then add local clockTimer to the top of your Lua file.

Upvotes: 1

Related Questions