
6 Л абораторная работа №5
Лабораторная работа №5
«Функции работы со временем»
Методические указания
Повторное выполнение действий
Допустим, какие-то действия над клипом нужно выполнять через определенные промежутки времени. Раннее мы познакомились с событием Event.ENTER_FRAME, которое срабатывает каждый раз при смене кадра фильма или клипа (если для фильма установлена частота смены кадров 12 штук в секунду, то это событие будет срабатывать ровно 12 раз за секунду). Однако часто необходимо циклически повторять какое либо действие или группу действий с другой частотой, отличной от частоты смены кадров фильма. В этом случае нужно воспользоваться интервальной функцией.
Интервальная функция – это функция, которую Flash будет вызывать с установленной пользователем частотой. Частота указывается в миллисекундах. Например, частота 1000 будет означать, что интервальная функция будет вызываться раз в 1000 миллисекунд.
В одной секунде (с) 1000 миллисекунд (мс)
1 минута (мин) = 60 с = 60 000 мс
1 час (ч) = 60 мин = 3 600 с = 3 600 000 мс
Порядок использования интервальной функции:
1. Импортировать библиотеку flash.utils, которая содержит функции работы со временем.
2. Все действия, которые необходимо выполнять через определенные промежутки времени, нужно оформить в отдельную пользовательскую функцию, которая и является интервальной.
2. Вызвать глобальную функцию setInterval:
setInterval (<Имя_функции>, <кол-во миллисекунд>);
Здесь <Имя_функции> - это имя интервальной функции.
Вместо <кол-во миллисекунд> нужно подставить число, равное количеству миллисекунд между повторами функции.
Пример 1. Пусть необходимо раз в секунду увеличивать прозрачность клипа с именем clip.
import flash.utils.*; // импорт всей библиотеки flash.utils
// Вызов функции setInterval. Функция intFunction()
// будет вызываться раз в секунду
setInterval(intFunction, 1000);
// Это интервальная функция.
function intFunction():void {
clip.alpha -= 0.1;
}
Замечание: Интервальная функция оформляется как обычная пользовательская функция.
Вызов интервальной функции с параметрами
Иногда возникают ситуация, когда одна и та же интервальная функция должна вызываться с разными параметрами в зависимости от ситуации (например, можно написать интервальную функцию, перемещающую клип в нужную точку или функцию. позволяющую вращать клип по или против часовой стрелки на заданный угол).
Пример 2. Пусть при нажатии на клип butRight клип с именем clip будет поворачиваться каждую секунду на 5 градусов по часовой стрелке, а при нажатии клипа butLeft – на 5 градусов против часовой стрелки каждые полсекунды.
Замечание. На рабочем листе находятся символы-кнопки, которым были даны имена butRight и butLeft. onPress – событие, возникающее при нажатии кнопки.
import flash.utils.*;
// Интервальная функция. а – угол поворота
// обратите внимание, что ссылка на клип передается
// в качестве параметра
function intRotateClip(mClip: MovieClip, a: Number):void{
mClip.rotation += a;
}
// Добавление листенеров
butLeft.addEventListener(MouseEvent.CLICK, leftClick);
butRight.addEventListener(MouseEvent.CLICK, rightClick);
// Обработчик события нажатия клипа butRight
// Клип будет поворачиваться на 5 градусов по часовой
// стрелке каждую секунду
function rightClick(_event:MouseEvent) {
setInterval(intRotateClip, 1000, clip, 5);
}
// Обработчик события нажатия клипа butLeft
// Клип будет поворачиваться на 5 градусов против часовой
// стрелки каждую секунду
// в этом случае угол поворота должен быть отрицательным
function leftClick(_event:MouseEvent) {
setInterval(intRotateClip, 500, clip, -5);
}