Macromedia Flash Professional 8. Графика и анимация
Шрифт:
Если же нужно обновить экран прямо сейчас, следует вызвать не принимающее параметров действие 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. Она возвращает количество миллисекунд, прошедших с момента, когда фильм начал воспроизводиться.
Загрузка внешних файлов
Ранее в этой главе уже упоминалось о том, что язык ActionScript позволяет загрузить и поместить в фильм Flash внешний файл. Этим внешним файлом может быть другой фильм Shockwave/Flash, изображение в формате JPEG, видео Macromedia Flash Video или звук. Также имеется возможность открыть Web-обозреватель и загрузить в него какую-либо Web-страницу. Настала пора выяснить, как это делается.
Загрузка и выгрузка фильмов Shockwave/Flash и изображений в формате JPEG
Проще всего загрузить в основной фильм, воспроизводящийся
в окне проигрывателя Flash, другой фильм Shockwave/Flash или изображение в формате JPEG из внешнего файла (загружаемого фильма). Такое часто делается, особенно при создании Web-сайтов, целиком основанных на Flash.Проще всего создать на рабочем листе "пустой" клип (например, с помощью метода createEmptyMovieClip, описанного ранее в этой главе) и заменить его загружаемым фильмом. При этом загружаемый фильм вкладывается в основной, становясь его составной частью.
Для загрузки фильма Shockwave/Flash или изображения JPEG из внешнего файла используется действие loadMovie, которое вызывается так:
loadMovie("<Интернет-адрес внешнего файла>",
<Путь заменяемого клипа>);
Примеры использования действия loadMovie:
loadMovie("/images/truckWheel.swf", _root.car.wheel2);
loadMovie(sURL, _root.car);
Также можно воспользоваться методом loadMovie объекта movieClip. Формат его вызова почти такой же, как у одноименного действия:
<Заменяемый клип>.loadMovie("<Интернет-адрес внешнего файла>");
Пример использования этого метода:
_root.car.wheel2.loadMovie("/images/truckWheel.swf");
Здесь мы загружаем фильм truckWheel.swf и заменяем им второе колесо нашего автомобиля.
А теперь предположим, что фильм truckWheel.swf из вышеприведенного примера содержит в себе сценарий:
_root.stop;
останавливающий воспроизведение его анимации (вращение колеса). Если открыть этот фильм в проигрывателе Flash, то сценарий выполнится правильно. Но если загрузить фильм truckWheel.swf в другой (основной) фильм, как мы это только что сделали, этот сценарий остановит анимацию не колеса автомобиля, а основного фильма. Ведь модификатор _root всегда возвращает ссылку на внешнюю анимацию, и в нашем случае он вернет ссылку на основной фильм, поскольку фильм truckWheel.swf стал его составной частью.
Что делать? Как нам заставить этот сценарий вложенного фильма выполняться корректно в любом случае? Очень просто: нужно привязать к первому кадру фильма truckWheel.swf вот такой совсем небольшой сценарий:
this._lockroot = true;
Здесь мы присвоили свойству _lockroot объекта movieClip, обозначающего сам фильм, значение true. После этого модификатор _root в любом сценарии, содержащемся в загружаемом фильме, всегда будет возвращать ссылку на внешнюю анимацию именно этого фильма — truckWheel.swf, даже если мы вложим его в другой фильм.
После того как нужда в загруженном из внешнего файла фильме или изображении пропадет, самое время его выгрузить. Зачем это нужно? Хотя бы затем, чтобы освободить ресурсы компьютера пользователя для других, более важных задач. Именно для этого язык ActionScript предоставляет действие unloadMovie, выгружающее из памяти и удаляющее с экрана ранее загруженный фильм. Формат вызова этого действия такой:
unloadMovie(<Путь выгружаемого клипа или изображения>);