Использование таймеров
Использование таймеров
Во многих случаях нужно выполнять какое-либо действие через равные промежутки времени. Это может понадобиться, например, для создания анимации с помощью сценариев ActionScript или для обновления информации, взятой с удаленного сервера. Для таких задач во Flash предусмотрены таймеры. Поговорим о них.
Таймер создается с помощью действия setinterval. Оно имеет два формата вызова. Вот первый из них:
<Переменная> = setinterval(<Функция>, <Значение интервала>
[, <Список параметров функции, разделенных запятыми>]);
Здесь в качестве параметров передается функция, которая будет вызываться по истечении интервала времени, и само значение этого интервала в миллисекундах. Также в выражении вызова могут присутствовать необязательные параметры, задающие значения параметров вызываемой функции; их должно быть столько, сколько параметров принимает эта функция.
А вот второй формат вызова действия setinterval:
<Переменная> = setintervai(<Экземпляр объекта>, <Метод объекта>,
<Значение интервала>
[, <Список параметров метода, разделенных запятыми>]);
Он отличается тем, что вместо функции здесь передается экземпляр какого-либо объекта и его метод.
В любом случае действие setinterval возвращает особый идентификатор таймера, который в дальнейшем будет использован для его уничтожения.
Приведем примеры выражений, создающих таймеры:
timerlDl = setintervai(tick, 1000);
timerID2 = setintervai(car, moveBy, 100, d);
Первое выражение создает таймер, вызывающий функцию tick каждую секунду (1000 миллисекунд). Второе же создает таймер, вызывающий каждые 100 миллисекунд метод moveBy экземпляра объекта car и передающий ему параметр d. Разумеется, и функция tick, и метод moveBy должны быть объявлены прежде, чем будут использованы.
При использовании таймеров нужно иметь в виду следующее. Дело в том, что Flash отмеряет интервалы не очень точно. Он пытается привязать каждый интервал к частоте кадров фильма, если, конечно, это возможно. Если интервал меньше частоты кадров, то он обрабатывается с максимальной точностью, и код вызывается вовремя. Если же интервал больше частоты кадров, то код, связанный с таймером, исполняется только тогда, когда Flash воспроизводит очередной кадр фильма. Это сделано для того, чтобы лишний раз не перерисовывать экран, если код что-то изменит в изображении.
Если же нужно обновить экран прямо сейчас, следует вызвать не принимающее параметров действие updateAfterEvent. Оно часто используется при выполнении сценариев, изменяющих содержимое рабочего листа.
После того как нужда в таймере отпадет, его следует уничтожить, чтобы освободить системные ресурсы. Для этого используется действие clearinterval, которое имеет такой формат вызова:
clearinterval(<Идентификатор таймера>);
Например:
clearinterval(timerID2);
А теперь рассмотрим пример, показывающий, как можно использовать таймер для создания так называемого "ленивого" курсора мыши. Обычный курсор мыши нигде надолго не задерживается — он спешит за ней сразу после малейшего ее перемещения. "Ленивый" же курсор отличается от обычного тем, что никогда не торопится за мышью. Давайте же сделаем такой курсор.
Прежде всего, создадим новый образец-клип и нарисуем в нем желаемый курсор. Постараемся нарисовать его так, чтобы точка отсчета пришлась как раз на "острие" этого курсора. Поместим экземпляр этого образца-клипа на рабочий лист и назовем его cursor.
Теперь напишем код сценария, который будет привязан к первому кадру фильма. Давайте рассмотрим его по частям.
function tick() {
if (_root.cursor._x!= _root._xmouse) {
if (_root.cursor._x < _root._xmouse) {
if (_root._xmouse — _root.cursor._x < d) {
_root.cursor._x = _root._xmouse;
} else {
_root.cursor._x += d;
}
} else {
if (_root.cursor._x — _root._xmouse < d) {
_root.cursor._x = _root._xmouse;
} else {
_root.cursor._x — = d;
}
}
}
if (_root.cursor._y!= _root._ymouse) {
if (_root.cursor._y < _root._ymouse) {
if (_root._ymouse — _root.cursor._y < d) {
_root.cursor._y = _root._ymouse;
} else {
_root.cursor._y += d;
}
} else {
if (_root.cursor._y — _root._ymouse < d) {
_root.cursor._y = _root._ymouse;
} else {
_root.cursor._у — = d;
}
}
}
updateAfterEvent();
}
Мы объявили функцию, реализующую перемещение "ленивого" курсора. Она сравнивает координаты, горизонтальную и вертикальную, курсора и мыши и выполняет приращение координат курсора. Нужно отметить, что координаты мыши при этом отсчитываются относительно анимации основного фильма.
Продолжаем писать наш сценарий:
d = 25;
Это величина приращения, на которое будут изменяться координаты курсора. И далее:
ctID = setlnterval(tick, 50);
Здесь мы создаем таймер, вызывающий функцию tick каждые 50 миллисекунд.
И, наконец:
_root.onUnload = function() {
clearinterval(ctID);
}
А здесь мы привязываем к событию unload клипа cursor обработчик, удаляющий созданный ранее таймер. Удалять за собой затребованные для своих нужд ресурсы, те же таймеры, — хороший стиль программирования.
Если уж зашла речь о таймерах, то нам может пригодиться функция getTimer. Она возвращает количество миллисекунд, прошедших с момента, когда фильм начал воспроизводиться.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Использование таймеров
Использование таймеров Таймеры представлены с помощью структур timer_list, которая определена в файле <linux/timer.h> следующим образом.struct timer_list { struct list_head entry; /* таймеры хранятся в связанном списке */ unsigned long expires; /* время окончание срока ожидания в
Реализация таймеров
Реализация таймеров Ядро выполняет обработчики таймеров в контексте обработчика отложенного прерывания после завершения обработки прерывания таймера. Обработчик прерывания таймера вызывает функцию update_process_times(), которая в свою очередь вызывает функцию run_local_timers(),
Типы таймеров
Типы таймеров Таймер, работу которого мы только что обсудили, называют относительным таймером. Для такого таймера период ожидания задается относительно текущего времени. Если бы вы пожелали задержать выполнение вашего потока до 12 часов 4 минут 33 секунд EDT (Eastern Daylight Time —
Применение таймеров
Применение таймеров Изучив все красоты теории, давайте теперь переключим наше внимание на конкретные образцы кода, чтобы посмотреть, что можно сделать при помощи таймеров.Чтобы работать с таймером, вам потребуется:1. Создать объект типа «таймер».2. Выбрать схему
14.7.1. Использование ftw()
14.7.1. Использование ftw() #include <ftw.h>int ftw(const char *dir, ftwFunctionPointer callback, int depth);Функция ftw() начинает с каталога dir и вызывает указанную в callback функцию для каждого файла в этом каталоге и его подкаталогах. Функция вызывается для всех типов файлов, включая символические ссылки и
18.2. Использование таймеров
18.2. Использование таймеров Таймер — это простое средство для указаний определенной точки в будущем, в которой должно произойти некоторое событие. Вместо того чтобы циклически запрашивать текущее время и проводить лишние растраты циклов центрального процессора,
Использование tar
Использование tar Утилита tar — одна из самых популярных программ, используемых для резервного копирования в системах Linux и UNIX. Она объединяет несколько файлов в один файл архива, что упрощает передачу информации по сети и сохранение ее на резервном носителе. Название
3.1.3. Использование yum
3.1.3. Использование yum Управлением пакетами в Fedora занимается программа yum (Yellow dog Updater Modified) - это и есть менеджер пакетов. С его помощью вы можете устанавливать и удалять пакеты, а также обновлять уже установленные пакеты.Программа yum не обладает графическим интерфейсом,
3.3.3. Использование RPM
3.3.3. Использование RPM Программа RPM не имеет графического интерфейса, поэтому запускать ее нужно в консоли или в терминале (команда меню Приложения?Системные?Терминал). Формат вызова программы rpm следующий:rpm [-опции] [пакеты]Напомню, что установка программ - это привилегия
Использование SCM
Использование SCM Напомним, что SCM поддерживает три примитива активации (связывание с объектами класса, связывание с экземплярами класса, связывание с постоянными экземплярами из файлов). Как показано на рис. 3.2, эти примитивы логически разделены на уровни[1]. Примитивом
Программирование с помощью таймеров обратного вызова
Программирование с помощью таймеров обратного вызова Во многих приложениях возникает необходимость вызывать конкретный метод через регулярные промежутки времени. Например, в одном приложении может потребоваться отображение текущего времени в строке состояния с
7.14. Создание таймеров
7.14. Создание таймеров Постановка задачи Требуется многократно выполнять определенную задачу после заданной задержки. Например, вы хотите обновлять вид на экране устройства каждую секунду, пока работает ваше
7.17. Выход из потоков и таймеров
7.17. Выход из потоков и таймеров Постановка задачи Требуется остановить поток или таймер либо не допустить его повторного
8.13. Функция setitimer(): задание интервальных таймеров
8.13. Функция setitimer(): задание интервальных таймеров Функция setitimer() является обобщением системного вызова alarm(). Она планирует доставку сигнала по истечении заданного промежутка времени.С помощью функции setitimer() можно создавать таймеры трех типов.? ITIMER_REAL. По истечении
Использование
Использование Как и любой другой XSLT-процессор, написанный на Java, xt можно без труда использовать в Java-проектах. Помимо этого, xt можно использовать в качестве сервлета и из командной строки.Сервлет-версия xt реализована в классе com.jclark.xsl.sax.XSLservlet и может выполняться на