pizza0502
pizza0502

Reputation: 333

Add or remove time from a countdown

I have a timer script:

import flash.utils.Timer;
import flash.events.TimerEvent;

var secs:Number = 30;//second
var mins:Number = 2;//minute
var sec_t:String;
var min_t:String;

var my_timer:Timer = new Timer(1000);
my_timer.addEventListener(TimerEvent.TIMER, timerHandler);
my_timer.start();
showTimer.text = "02:30";

function timerHandler(event:TimerEvent):void
{
    if (secs == 0)
    {
        if (mins == 0)
        {
            my_timer.stop();
            trace("Countdown is finished.");
            showTimer.text =String(min_t+sec_t)+" Times Up";
            return;
        }
        else
        {
            --mins;
            secs = 59;
        }
    }
    else
    {
        --secs;
    }
    sec_t = (secs < 10) ? "0" + String(secs):String(secs);
    min_t = (mins < 10) ? "0" + String(mins) + ":":String(mins) + ":";
    trace(min_t+sec_t);
    showTimer.text =String(min_t+sec_t);
}

wrongBtn.addEventListener(MouseEvent.CLICK, wrongClick);
function wrongClick(event:MouseEvent):void
{
    secs = secs - 10;
}

correctBtn.addEventListener(MouseEvent.CLICK, correctClick);
function correctClick(event:MouseEvent):void
{
    secs = secs + 10;
}

There are two buttons, wrongBtn and correctBtn. wrongBtn will decrease time by 10 seconds, correctBtn will increase time by adding 10 seconds. But when the timer second is around 2:05 and I press wrongBtn, the time is displayed incorrectly, like this: "2:0-5". Likewise, when the time is around 2:55 and I press the correctBtn, the time will be displayed as "2:65"...

How can I get this working, so that the output is displayed correctly?

Upvotes: 0

Views: 1049

Answers (1)

weltraumpirat
weltraumpirat

Reputation: 22604

Keep one timer count instead of separate minutes and seconds. You can safely increase and decrease it, and always keep the correct time. To make it readable, just format the output:

import flash.events.TimerEvent;
import flash.utils.Timer;


var timeRemaining:int = 150; // 150 seconds => 2:30 mins

showTime.text = formatTimeRemaining();

var timer : Timer = new Timer (1000);
timer.addEventListener (TimerEvent.TIMER, onTimer);
timer.start();


function onTimer ( ev:TimerEvent ) : void {
    timeRemaining--;
    if (timeRemaining < 0) {
        timeRemaining = 0;
        loseGame();
    }
    else 
        showTime.text = formatTimeRemaining ();
}

function formatTimeRemaining () : String {
    var mins : int = int (timeRemaining / 60);
    var minstr : String = mins < 10 ? "0"+mins : ""+mins;
    var secs : int = timeRemaining % 60;
    var secstr : String = secs < 10 ? "0"+secs : ""+secs;

    return minstr+":"+secstr;
}

function loseGame () : void {
    timer.stop();
    trace("Countdown is finished.");
    showTime.text = formatTimeRemaining() + (" Time's Up!");
}

wrongBtn.addEventListener(MouseEvent.CLICK, wrongClick);
function wrongClick(event:MouseEvent):void
{
    timeRemaining -= 10;
}

correctBtn.addEventListener(MouseEvent.CLICK, correctClick);
function correctClick(event:MouseEvent):void
{
    timeRemaining += 10;
}

Upvotes: 5

Related Questions