В. Дронов - Macromedia Flash Professional 8. Графика и анимация
Обработка нажатий клавиш в клипах
А теперь поговорим о том, как же собственно выполняется обработка нажатий клавиш клавиатуры. Выполнить ее можно двумя способами, которые мы и рассмотрим в этом разделе.
Обработка нажатий клавиш в клипахПервый — более простой — способ обработки нажатий клавиш — заключается в привязке к клипу, который будет реагировать на нажатия, обработчика события keyDown, возникающего при нажатии клавиши. Мы рассмотрим создание этого обработчика на примере.
Создадим новый документ Flash. В нем создадим образец-клип, содержащий простую геометрическую фигуру, например, круг. Поместим экземпляр этого образца на рабочий лист и назовем его circle. Этот экземпляр мы заставим перемещаться по листу в ответ на нажатия клавиш — стрелок.
Теперь выделим наш экземпляр и привяжем к нему довольно сложный сценарий, содержащий обработчики сразу двух событий. Для удобства рассмотрим их отдельно друг от друга.
onClipEvent(load) {
d = 1;
}
Обработчик события load помещает значение в переменную d сразу после загрузки клипа. Эта переменная задает величину перемещения нашего экземпляра при нажатии любой клавиши-стрелки. Можно задать и большее число, чтобы заставить клип двигаться быстрее.
Второй фрагмент сценария выглядит более сложным:
onClipEvent(keyDown) {
switch (Key.getCode()) {
case Key.UP:
_root.circle._y — = d;
break;
case Key.DOWN:
_root.circle._y += d;
break;
case Key.LEFT:
_root.circle._x — = d;
break;
case Key.RIGHT:
_root.circle._x += d;
break;
}
}
Но, несмотря на кажущуюся сложность, этот обработчик события keyDown довольно-таки прост. Он сравнивает значение виртуального кода нажатой клавиши с кодами клавиш-стрелок и, если одна из них нажата, изменяет соответствующую координату клипа circle.
Теперь запустим созданный фильм на воспроизведение в отдельном окне. Он работает!
Конечно, наш пример очень прост. Тем не менее, руководствуясь им, можно создавать и несравнимо более сложные вещи. Например — как насчет игры "15", реализованной на Flash? Или всем известного "Сапера"?
Обработка нажатий клавиш с помощью перехватчикаВторой способ обработать нажатия клавиш — использовать перехватчик. Этот перехватчик должен иметь свойства onKeyUp и onKeyDown, которым должны быть присвоены функции, обрабатывающие соответствующие события. Событие onKeyDown возникает при нажатии клавиши, а событие onKeyUp — при ее отпускании.
Давайте перепишем созданный ранее сценарий так, чтобы он использовал обработчик. В данном случае он будет привязан не к клипу, а к первому кадру анимации фильма.
Рассмотрим этот сценарий по частям.
Сначала:
var d = 1;
Это уже знакомая нам переменная, задающая величину смещения клипа за один шаг.
А дальше:
function fOnKeyDown() {
switch (Key.getCode()) {
case Key.UP:
_root.circle._y — = d;
break;
case Key.DOWN:
_root.circle._y += d;
break;
case Key.LEFT:
_root.circle._x — = d;
break;
case Key.RIGHT:
_root.circle._x += d;
break;
}
}
А это объявление функции, обрабатывающей событие onKeyDown. Ее код практически совпадает с кодом обработчика события keyDown для клипа, написанного нами ранее.
И, наконец:
var myListener = new Object ();
myListener.onKeyDown = fOnKeyDown;
Key.addListener(myListener);
Этот фрагмент кода создает и привязывает к объекту Key перехватчик. Собственно, это тоже нам знакомо.
Взаимодействие с мышью
Для взаимодействия с мышью служит объект Mouse. Единственный экземпляр этого объекта под именем Mouse создается самим Flash.
Прежде всего, этот объект предоставляет методы hide и show. Первый метод скрывает курсор мыши, а второй — вновь выводит его на экран. Ни один из них не принимает параметров. Эти методы используются, как правило, при создании фигурных курсоров мыши.
Объект Mouse поддерживает также три события:
□ событие onMouseDown возникает при нажатии левой кнопки мыши;
□ событие onMouseUp возникает при отпускании левой кнопки мыши;
□ событие onMouseMove возникает при любом перемещении мыши;
□ событие onMouseWheel возникает при прокрутке колесика мыши, если такое имеется.
Для обработки этих событий используются перехватчики. Все функции, обрабатывающие их, не принимают параметров, за исключением функции-обработчика события onMouseWheel. Она имеет такой формат:
function <Имя>([<Смещение>, <Клип, над которым находится курсор мыши>])
Первый из необязательных параметров этой функции определяет смещение, на которое пользователь прокрутил колесико мыши. Оно передается в числовом виде в так называемых "тиках". Второй параметр передает ссылку на клип, над которым находился курсор мыши во время прокрутки ее колесика.
Для отслеживания координат мыши можно использовать свойства _xmouse и _ymouse объекта movieClip. Этот "нужный экземпляр" может быть как внешней анимацией (_root), так и каким-либо вложенным клипом. Эти же свойства поддерживаются и объектом Button.
Управление звуковым сопровождением фильма
Для управления звуковым сопровождением фильма служат экземпляры объекта sound. (О работе со звуком во Flash см. главу 17.) Эти экземпляры создаются с помощью выражений, имеющих следующий формат:
<Переменная> = new Sound([<Клип, звуковым сопровождением которого нужно <управлять>]);
С единственным параметром этому конструктору передается ссылка на клип, звуковым сопровождением которого мы собираемся управлять. Если этот параметр не указан, создается экземпляр объекта, управляющий звуковым сопровождением всего фильма.
Вот два примера создания разных экземпляров объекта sound:
carSound = new Sound(car);
globalSound = new Sound();
Экземпляр carSound позволяет управлять звуковым сопровождением клипа саг, а экземпляр globalSound — всего фильма.
Объект sound имеет множество свойств и методов. В этом разделе мы рассмотрим некоторые из них.
Метод start запускает воспроизведение звука. Он имеет следующий формат вызова:
<Экземпляр объекта Sound>.start([<Отметка>, <Количество повторов>]);
Этот метод может принимать два необязательных параметра. Первый параметр указывает, с какой отметки начнет воспроизводиться звук; отметка задается как количество секунд, которые Flash отсчитает с момента начала звука. Со вторым параметром передается количество повторов звука. Если ни один параметр не задан, звуковое сопровождение будет воспроизведено один раз с самого начала.
Например, выражение
carSound.start (10, 2);
запускает воспроизведение звука, привязанного к клипу car, с десятисекундной отметки и воспроизводит его два раза.
Метод stop немедленно останавливает воспроизведение звука. Формат его вызова таков:
<Экземпляр объекта Sound>.stop([<Идентификатор образца-звука>]);
В качестве единственного параметра этого метода может быть передано идентификатор сценарного образца-звука, воспроизведение экземпляра которого нужно остановить, в строковом виде. Если метод был вызван без параметра, останавливается воспроизведение всех звуков.
carSound.stop("engineSound");
Это выражение отключает воспроизведение звука engineSound, привязанного к клипу car.
Не принимающий параметров метод getVolume возвращает значение громкости звука. А метод setVolume позволяет задать новое значение громкости звука, переданное в качестве его единственного параметра. Доступны значения от 0 (звук не слышен) до 100 (полная громкость; значение по умолчанию).
carSound.setVolume(mySound.getVolume() + 10);
Это выражение увеличивает громкость работы автомобиля на десять единиц.
Пара методов get Pan и set Pan ведут себя так же и позволяют задать панорамирование звука в пространстве. Здесь доступны значения от -100 (звук в левом канале) до 100 (звук в правом канале); значение по умолчанию — 0 (звук "посередине").
carSound.setPan(50);
Объект sound также поддерживает два свойства, доступные только для чтения. Свойство position возвращает текущую воспроизводимую позицию звука в миллисекундах. А свойство duration возвращает общую продолжительность звука, также в миллисекундах.