25 декабря 2010 г.

Action Script 3. Урок 3. Timer.

Привет всем, это 3-ий урок, посвященный обучению action script 3.
Сегодня мы рассмотрим такой класс как Timer. Как ясно из названия - таймер это какой-то счетчик времени, а именно метод, позволяющий совершать какие-то действия через заданные промежутки времени. Например, каждую минуту нам необходимо сменять, например, картинку. В этом случае удобнее всего использовать таймер.

Урок 3. Timer.
Каким способом мы пользовались, чтобы заставить объект двигаться? Да, Enterframe. А если перемещать наш объект необходимо через заданный промежуток времени, то необходимо воспользоваться таймером. Рассмотрим на том же примере.

Создадим объект, назовем его box.
var timer:Timer = new Timer(100);
timer.addEventListener(TimerEvent.TIMER, goF);
function goF(e:TimerEvent):void {
box.x += 10;
}

Первой строчкой мы вводим новую переменную, которая будет играть роль таймера. В скобках указываем, через какой промежуток времени, какая задержка будет происходить, между выполнением функции. Это число указывается в миллисекундах, то есть чтобы выполнять функцию, например, каждую секунду, нужно указать число 1000. Итак, указываем слушатель с типом события TimerEvent.TIMER и связываем его с названием таймера. Создаем функцию с необходимыми действиями и запускаем. Результата нет, ничего не движется. Потому что таймер необходимо запустить - эта особенность позволяет управлять действиями, можно останавливать и запускать таймер в любое время. Вставляем сразу после ввода новой переменной такую строчку:
timer.start(); // где timer - это имя переменной с типом Timer.

Запускаем, все работает. Можно поизменять задержку таймера, (то число, что в скобках) и посмотреть, как изменяется скорость.

А теперь посмотрим пример посложнее и разберем некоторые функции.
var speed:Number = 1000;
var timer:Timer = new Timer(speed);
var count:Number = 0;
timer.start();
timer.addEventListener(TimerEvent.TIMER, goF);
function goF(e:TimerEvent):void {
box.x = Math.random()*stage.stageWidth;
box.y = Math.random()*stage.stageHeight;
count++;
}
stage.addEventListener(Event.ENTER_FRAME, stopF);
function stopF(e:Event):void {
if (count==10) {
timer.stop();
}
}

Что в этом примере появилось для нас нового.
Функция Math.random() - эта функция возвращает случайные числа из диапазона от нуля до указанного числа. В нашем случае это ширина (stageWidth) и высота(stageHeight) сцены. Такие значения использовать довольно практично, потому что при изменении параметров сцены, нам уже не придется искать то значение в коде и менять его.
И timer.stop() - это аналогично start(), нужно, чтобы остановить таймер.

Итак, что  мы сделали в этом примере: мы запустили таймер с задержкой, заданной в переменной speed,  и при каждом выполнении функции мы увеличивали значение переменной count, и когда она достигла 10, мы остановили таймер.
Запускаем, проверяем, видим, что наш объект больше 10 раз не перемещается в случайные точки на сцене.

Вроде все просто, но этот пример можно записать в одну функцию. Для этого в свойствах таймера, в скобках при объявлении переменной, через запятую можно указать количество повторений, например 10. Тогда удалим вторую функцию, также нам не понадобится переменная count. Так будет выглядеть код:
var speed:Number = 1000;
var timer:Timer = new Timer(speed, 10);
timer.start();
timer.addEventListener(TimerEvent.TIMER, goF);
function goF(e:TimerEvent):void {
box.x = Math.random()*stage.stageWidth;
box.y = Math.random()*stage.stageHeight;
}

Согласитесь, так гораздо удобнее. Тут не будет лишним упомянуть еще об одном параметре таймера -  timer.reset(). Он как раз таки это количество (10 в нашем примере) и сбрасывает до нуля.

Итак, с таймером пока все, урок окончен.

Домашнее задание.

Осуществить перемещение объекта в случайные координаты 15 раз, причем при нажатии на сцену мышкой, перемещение останавливается, при нажатии на пробел - возобновляется.

1 коммент.:

Evgeny комментирует...

Этот сайт лучший,что есть по урокам ActionScript для начинающих! от всего сердца благодарю создателя-СПАСИБО!

Отправить комментарий