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);
}
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);
Затем просто добавьте методы вашего обработчика. Вам не нужно использовать оба. Часто события ТАЙМЕРА достаточно. Что-то вроде этого:
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.
}