Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как запустить таймер обратного отчета после нажатия клавиши (http://www.flasher.ru/forum/showthread.php?t=184178)

Freeman1st 12.09.2012 19:43

Как запустить таймер обратного отчета после нажатия клавиши
 
Как запустить обратный отчет после нажатия любой клавиши, затем после того как прошло 4 секунды запустить следующий таймер 3 мин

bav 13.09.2012 01:20

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.events.TimerEvent;
        import flash.utils.Timer;
 
        /**
        * ...
        * @author bav
        */

        public class Main extends Sprite
        {
                private var timer:Timer;
                private var rest:int = 4;
                private var flag:Boolean = false;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, startTimer);
                }
 
                private function startTimer(e:KeyboardEvent):void
                {
                        stage.removeEventListener(KeyboardEvent.KEY_DOWN, startTimer);
                        timer = new Timer(1000);
                        timer.addEventListener(TimerEvent.TIMER, timerHandler);
                        timer.start();
                }
 
                private function timerHandler(e:TimerEvent):void
                {
                        trace(rest);
                        if (--rest == 0)
                        {
                                trace("Booooom!");
                                if (flag)
                                {
                                        timer.stop();
                                        return;
                                }
                                else
                                {
                                        rest = 180;
                                        flag = true;
                                }
                        }
                }
 
        }
 
}

Еще вместо отдельной переменной rest можно воспользоваться свойством таймера currentCount.

in4core 13.09.2012 02:48

Код AS3:

if (--rest == 0)

Не советую так писать . Частая путаница из за этого возникает.

caseyryan 13.09.2012 07:42

Можно сделать подругому. Если известно, что изначальный интервал 1000 милисекунд, то по истечении 4 тиков можно просто поменять интервал на новый, а в условии просто проверять текущий интервал. При этом и другой таймер не нужен будет
Код AS3:

package  {
        import flash.display.Sprite;
        import flash.display.Stage;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.events.TimerEvent;
        import flash.utils.Timer;
 
        public class TimerTest extends Sprite {
 
 
                private const INITIAL_TIME:int = 1000;
                private const TIME:int = 180000;
                private var _timer:Timer;
 
                public function TimerTest() {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        _timer        = new Timer(INITIAL_TIME);
                        _timer.addEventListener(TimerEvent.TIMER, onTimer);
                        stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
                }
 
                private function onTimer(e:TimerEvent):void {
                        if (_timer.delay == INITIAL_TIME) {
                                if (_timer.currentCount >= 4) {
                                        _timer.reset();
                                        _timer.delay = TIME;
                                        _timer.start();
                                }
                        } else {
                                trace("NEW TIMER TICK");
                        }
                }
 
                private function onKeyUp(e:KeyboardEvent):void {
                        _timer.start();
                }
        }
}



Часовой пояс GMT +4, время: 05:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.