AS3 Как отправить событие таймера другому классу?

Я пытаюсь каждую секунду отправлять событие из класса Mytimer и перехватывать событие из основного класса. Я объявил переменную "sus" как целое число = 10. У меня пока ничего нет, ни вывода, ничего. Пожалуйста, помогите!

Это Mytimer.as

    private function onUpdateTime(event:Event):void
    {

        nCount--;
        dispatchEvent(new Event("tickTack", true));
        //Stop timer when it reaches 0
        if (nCount == 0)
        {
            _timer.reset();
            _timer.stop();
            _timer.removeEventListener(TimerEvent.TIMER, onUpdateTime);
            //Do something
        }
    }    

А в Main.as у меня:

    public function Main()
    {
        // constructor code
        _timer = new MyTimer  ;
        stage.addEventListener("tickTack", ontickTack);
    }

    function ontickTack(e:Event)
    {
        sus--;
        trace(sus);
    }    

person irnik    schedule 15.04.2013    source источник


Ответы (1)


В вашем Main.as вы добавили на сцену слушателя, а не таймер. Эта строка:

stage.addEventListener("tickTack", ontickTack);

должно быть так:

_timer.addEventListener("tickTack", ontickTack);

Но в ActionScript уже есть класс Timer, который, похоже, обладает всеми необходимыми функциями. Не нужно изобретать велосипед. Ознакомьтесь с документацией по классу Timer.

В вашем основном вы могли бы просто сказать:

var count:int = 10; // the number of times the timer will repeat.
_timer = new Timer(1000, count); // Creates timer of one second, with repeat.
_timer.addEventListener(TimerEvent.TIMER, handleTimerTimer);
_timer.addEventListener(TimerEvent.TIMER_COMPLETE, handleTimerTimerComplete);

Затем просто добавьте свои методы обработчика. Вам не нужно использовать оба. Часто достаточно события TIMER. Что-то вроде этого:

private function handleTimerTimerComplete(e:TimerEvent):void 
{
    // Fires each time the timer reaches the interval.
}

private function handleTimerTimer(e:TimerEvent):void 
{
    // Fired when all repeat have finished.
}
person Adam Harte    schedule 15.04.2013
comment
Спасибо-спасибо. Это то, что я искал. Спасибо за быстрый ответ. Я делаю это, потому что хочу держать свой таймер в отдельном классе, чтобы я мог получить доступ к его времени в любое время. Этот способ мне показался очень удобным. Спасибо Адам - person irnik; 15.04.2013
comment
Не беспокойтесь, @irnik, не забудьте отметить ответ как правильный, если вы нашли то, что хотите. - person Adam Harte; 15.04.2013