简体   繁体   中英

as3 countdown timer with setting a different starting amount

Hey guys i am a newbie in action script 3 this is my code can anyone help me figure out how i can get it to reset back to the original starting set time each round or level.

this is my variables

private var seconds:int = 60;
private var minutes:int = 10;
private var myTimer:Timer = new Timer(10);
private var secString = "00";
private var minString = Number(minutes);

this is the levels information i am grabbing to display.

private var levels:Array = [
["01", "25", "50", "No Ante", "25", "50", "100", "500", "1000"],
["02", "50", "100", "No Ante", "25", "50", "100", "500", "1000"],
["03", "75", "150", "No Ante", "25", "50", "100", "500", "1000"],
["04", "100", "200", "No Ante", "25", "50", "100", "500", "1000"],
["05", "150", "300", "No Ante", "25", "50", "100", "500", "1000"],
["06", "200", "400", "No Ante", "25", "50", "100", "500", "1000"],
["07", "250", "500", "No Ante", "25", "50", "100", "500", "1000"],
["08", "300", "600", "No Ante", "100", "500", "1000", "5000", "10000"],
["09", "400", "800", "No Ante", "100", "500", "1000", "5000", "10000"],
["10", "500", "1000", "100", "100", "500", "1000", "5000", "10000"],
["11", "600", "1200", "200", "100", "500", "1000", "5000", "10000"],
["12", "700", "1400", "300", "100", "500", "1000", "5000", "10000"],
["13", "800", "1600", "400", "100", "500", "1000", "5000", "10000"],
["14", "900", "1800", "500", "500", "1000", "5000", "10000", "25000"],
["15", "1000", "2000", "1000", "500", "1000", "5000", "10000", "25000"],
["16", "3000", "6000", "2000", "500", "1000", "5000", "10000", "25000"],
["17", "5000", "10000", "5000", "500", "1000", "5000", "10000", "25000"]
];

this is my levels or round for each level the timer needs to be reset back to the starting time and countdown

private var levelindex:int = 0;

this is my timer functions with is not working well

private function countTimer(e:TimerEvent):void {
if (seconds > 60) {
} else {
    seconds--;
    // minus one minus every 59 sec
    if (seconds == 59) {
        minutes--;
    }
    secString = String(seconds);
    minString = String(minutes);

    // sec under 10 gets a 0 in front
    if (seconds < 10) {
        secString = String("0" + seconds);
    }

    // minutes under 10 gets a zero in front like 00:09
    if (minutes < 10) {
        minString = String("0" + minutes);
    }

    // reset seconds back to 60
    if (seconds == 0 && minutes >= 1) {
        seconds = 60;
        if (minutes == 0) {
            minuteStored = minutes;
            nextRound();

        }
    }

    if (seconds == 0 && minutes == 0) {
        if (levelindex == 17) {
            trace("Game Over")
            myTimer.stop();
        }
        trace("Round Over now reset and move to next round")
        minuteStored = minutes;
        nextRound()

    }

}

// this is to convert it to a string text
master.pages.timerMc.timerTextMc.goldTextMask.numberField.text = minString + ":" +    secString;
}

Often I'll use a CountdownTimer class that extends Timer.

This timer can be instantiated by specifying total time and interval in milliseconds.

For example, to countdown from 5-minutes at 1-second intervals:

var countdownTimer:CountdownTimer = new CountdownTimer(5 * 60 * 1000, 1000);

At the start of each level, instantiate a new countdown timer for the desired total time:

protected function startLevel():void
{
    countdownTimer = new CountdownTimer(5 * 1000 * 60);
    countdownTimer.addEventListener(TimerEvent.TIMER, timerHandler);
    countdownTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
    countdownTimer.start();
}

On each timer event, obtain the remaining time applying your formatting:

protected function timerHandler(event:TimerEvent):void
{
    var minutes:int = countdownTimer.time / 60000;
    var seconds:int = (countdownTimer.time / 1000) % 60;

    trace((minutes < 10 ? "0" + minutes.toString() : minutes.toString()) + ":" +
          (seconds < 10 ? "0" + seconds.toString() : seconds.toString()));
}

When the timer counts down to zero, use the TimerEvent.TIMER_COMPLETE handler:

protected function timerCompleteHandler(event:TimerEvent):void
{
    trace("time's up!");
}

At the end of your level, reset the timer:

protected function endLevel():void
{
    countdownTimer.removeEventListener(TimerEvent.TIMER, timerHandler);
    countdownTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
    countdownTimer.reset();
}

CountdownTimer class implementation:

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

    public class CountdownTimer extends Timer
    {

        public var time:Number = 0;

        public function CountdownTimer(time:Number=Number.NEGATIVE_INFINITY, delay:Number=1000)
        {
            super(delay, repeatCount);

            if (isNaN(time))
                this.time = 0;
            else
                this.time = time;

            repeatCount = Math.ceil(time / delay);
        }

        override public function start():void
        {
            super.start();

            addEventListener(TimerEvent.TIMER, timerHandler);
            addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
        }

        protected function timerHandler(event:TimerEvent):void
        {
            time -= delay;
        }

        protected function timerCompleteHandler(event:TimerEvent):void
        {
        }

        override public function stop():void
        {
            super.stop();

            removeEventListener(TimerEvent.TIMER, timerHandler);
            removeEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
        }

    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM