Он отличается тем, что вместо функции здесь передается экземпляр какого-либо объекта и его метод.

В любом случае действие 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 обработчик,

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

1

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×