В. Дронов - Macromedia Flash Professional 8. Графика и анимация
Выше уже говорилось, что для перемещения бегунка на другой кадр нужно использовать действие gotoAndPiay. Все действия находятся в "дереве" Global Functions иерархического списка доступных команд (см. рис. 18.1). В этом "дереве" нам нужно раскрыть "ветвь" Timeline Control (в ней содержатся действия, управляющие воспроизведением анимации) и найти пункт gotoAndPiay, "отвечающий" за одноименное действие. Теперь нам нужно добавить это действие в код нашего сценария, который пока что пуст.
Чтобы добавить какую-либо из перечисленных в иерархическом списке команд языка ActionScript в код сценария, следует выполнить любое из перечисленных ниже действий:
□ перетащить соответствующий пункт иерархического списка мышью в область редактирования кода. Нужно только проследить, чтобы он попал в нужное место;
□ дважды щелкнуть на пункте списка;
□ выбрать пункт Add to Script в контекстном меню выбранного пункта;
□ нажать расположенную над областью редактирования кода кнопку со знаком "плюс", раскрытое меню которой показано на рис. 18.2, "проследовать" по иерархии подменю и выбрать соответствующий пункт;
□ нажать комбинацию клавиш, соответствующую требуемому пункту упомянутого выше меню (рис. 18.2).
О комбинациях клавиш, служащих для добавления в сценарий команд языка ActionScript, нужно рассказать подробнее. Эти комбинации состоят из трех клавиш: двух алфавитно-цифровых и клавиши <Esc>. Нажимать их нужно так: сначала — клавишу <Esc>, затем — первую клавишу, потом — вторую. И еще: перед тем как пользоваться этими комбинациями, необходимо переключиться в область редактирования кода сценария — в обоих иерархических списках панели Actions эти комбинации не действуют.
Комбинации клавиш — очень полезная вещь. Только по умолчанию они почему-то не отображаются в иерархическом списке доступных команд — наверно, разработчикам Flash это показалось излишним. Чтобы все-таки заставить Flash отображать эти комбинации прямо в этом списке, достаточно включить пункт-выключатель Esc Shortcut Keys в дополнительном меню панели Actions.
Итак, мы выбрали действие gotoAndPlay и добавили его в код сценария одним из описанных выше способов. Это действие тотчас появится в области редактирования кода:
gotoAndPlay()
Осталось ввести значение параметра действия gotoAndPlay, равное 1, возможно, поставить точку с запятой — и первый наш сценарий готов. Он будет таким:
gotoAndPlay(1);
А кадр, к которому мы привязали сценарий, будет выглядеть так, как показано на рис. 18.3. Хорошо заметна буква а — она обозначает, что кадр содержит сценарий, который будет выполнен при достижении этого кадра.
В этом примере мы поместили свой сценарий в тот же слой, в котором находится наша анимация. Но если таких сценариев много, рекомендуется помещать их в отдельный слой под названием сценарии или Actions. Так нам будет проще управляться со всеми созданными нами сценариями, которых в сложном фильме может быть не один десяток.
На этом создание нашего первого сценария можно считать законченным. Проверим его в действии.
Воспроизведение фильмов, кадры которых содержат сценарии
Есть одна тонкость, которую необходимо учитывать при воспроизведении фильмов, кадры которых содержат сценарии. Дело в том, что Flash способен выполнять такие сценарии прямо во время воспроизведения, и это обстоятельство может очень помочь при их отладке. Правда, наше замечание касается только простейших сценариев, наподобие того, что мы только что написали.
Если мы сейчас начнем воспроизведение нашего фильма, выбрав пункт Play меню Control или нажав клавишу <Enter>, то Flash корректно обработает наш сценарий и выполнит переход на первый кадр сцены Фильм по достижении ее последнего кадра. Если же он этого не сделает, нужно проверить, включен ли пункт-выключатель Enable Simple Frame Actions меню Control. Как раз этот пункт при включении предписывает Flash выполнять сценарии, привязанные к кадрам.
Привязка сценариев к клипам
Привязать сценарий к кадру, как мы только что убедились, несложно. А как насчет клипа?
Чтобы привязать сценарий к клипу, нам будет нужно дать ему имя. Для этого достаточно его выделить и ввести нужное имя в поле ввода, расположенное в левой части панели Properties, под раскрывающимся списком доступных типов экземпляра.
Для экспериментов возьмем фильм, в котором демонстрировались возможности составной анимации (см. главу 13). (Помните этот фильм: прямоугольник, кувыркаясь, летит по рабочему листу?) Загрузим содержащий его документ. И выполним подготовительные действия.
1. Преобразуем экземпляр графического образца в экземпляр-клип, если не сделали этого раньше. Для чего выберем в раскрывающемся списке, расположенном в верхнем левом углу панели Properties, пункт Movie Clip.
2. Дадим клипу имя, например, clip.
Теперь все готово для написания сценария.
Давайте сделаем так, чтобы при щелчке мышью на вложенном клипе он останавливал свое воспроизведение, переставая крутиться. Конечно, пользы от такой интерактивности никакой, но, по крайней мере, это будет наш первый опыт привязки сценария к клипу. Мы ведь пока только учимся писать сценарии…
Итак, к делу! Выделим клип clip на рабочем листе. И вспомним то, что говорилось в начале этой главы о событиях.
В случае кадра нам было достаточно просто выделить его и написать сценарий, который выполнится при достижении этого кадра. Клип же поддерживает множество событий: щелчок мышью, "касание" мышью, буксировка и др.
Так что нам придется указать, к какому из поддерживаемых клипов событий мы привязываем наш сценарий. Это указание производится с помощью особого действия onclipEvent, в качестве параметра которого задается событие, в ответ на которое будет выполняться сценарий.
Полный "шаблон" для написания сценария-обработчика события будет иметь такой вид:
onClipEvent(<Обозначение события>)
{
<Код сценария-обработчика>
}
Первая строка этого "шаблона" задает событие, на которое "откликается" обработчик, и называется заголовком. Сам же код обработчика помещается в фигурных скобках после заголовка и называется телом.
Давайте же, поглядывая на приведенный выше "шаблон", напишем свой сценарий. Он будет таким:
onClipEvent(mouseDown)
{
stop();
}
В качестве параметра мы передаем действию onclipEvent обозначение события mouseDown. Это событие возникает, когда посетитель щелкает на клипе мышью. А действие stop вызывает немедленную остановку воспроизведения анимации клипа, к которому привязан содержащий это действие сценарий.
Здесь нужно сказать вот еще что. Все действия, помещенные нами в привязанные к клипу сценарии, будут управлять анимацией именно этого клипа. Поэтому действие stop в приведенном выше сценарии остановит внутреннюю анимацию клипа clip, а не анимацию самого фильма.
Теперь выделим наш клип, если еще не сделали этого, и вызовем на экран панель Actions. Введем в область редактирования кода приведенный выше код сценария-обработчика события. И запустим готовый фильм на воспроизведение.
Выше говорилось, что Flash при воспроизведении фильмов может выполнять простейшие сценарии, привязанные к кадрам. Сейчас же мы привязали сценарий к клипу, а не к кадру, а такие сценарии Flash выполнить не сможет. Поэтому нам придется выбрать пункт Test Movie меню Control или нажать комбинацию клавиш < Ctrl>+< Enter>, чтобы запустить воспроизведение фильма в отдельном окне.
Давайте, после того как начнется воспроизведение фильма, попробуем щелкнуть мышью на вращающемся прямоугольнике. Если нам все-таки удастся это сделать, он тотчас прекратит "разваливаться" пополам и "застынет" в таком виде, пока анимация не закончится.
Ура, наш первый обработчик события работает! Давайте его немного усложним. Снова выделим клип clip, откроем панели Actions и допишем в сценарий еще одно выражение. Наш сценарий примет такой вид (добавленное выражение выделено полужирным шрифтом):
onClipEvent(mouseDown)
{
stop();
_parent.stop();
Специальная команда языка ActionScript _parent обозначает клип, в который вложен клип, к которому привязан этот сценарий — в нашем случае это будет основной фильм. (Такие команды, кстати, называются ключевыми словами.) Ну, а записанное после этого слова и отделенное от него точкой действие stop нам уже знакомо.