← Назад

Урок 9.

Управление фильмами и клипами

В этом уроке рассматриваются дополнительные команды управления клипами. Материал урока охватывает вопросы копирования и удаления фильмов, а также вопросы передачи команд клипам и управления клипами с помощью пользовательских функций.

Копирование и удаление клипов

Вы можете копировать и удалять клипы. Создав клип, вы имеете возможность копировать его столько раз, сколько захотите. Вместе с тем вы можете удалять клипы, которые вам больше не нужны. Как и в других операциях с клипами, копирование и удаление производится над экземплярами клипов, а не над символами.

Фильм, который мы рассмотрим ниже, изображает мерцающие звезды на черном фоне. Звезды, представляющие собой «мерцающие» клипы, разбросаны по черному фону в прозрачных слоях, которые случайным образом вызываются в процессе воспроизведения фильма; с точки зрения зрителя одни звезды выглядят близкими, другие далекими. Щелчок на одной из кнопок приводит к смене звездного «пейзажа»; выбор слоя осуществляется случайным образом. При щелчке на другой кнопке звездное небо исчезает с экрана и вместо звезд в рабочей зоне фильма оказывается изображение солнца. Следующий сценарий осуществляет копирование клипа star; копия получает имя NewStar. Копия располагается на глубине 15. Затем устанавливается вертикальная позиция копии клипа, равная 200; горизонтальная позиция остается неизменной по отношению к исходному клипу. Обратите внимание на то, что в третьей строке сценария используется ссылка на копию, причем эта копия обрабатывается как отдельный клип; предшествующее обращение к методу duplicateMovieCllp() позволяет использовать здесь имя вновь созданного экземпляра.

onCllpEvent (mouseDown) {

_root.stars.dup1icateMovieClip("NewStar", 15);

_root.NewStar._y = 200;

}

Рассматриваемый фильм довольно прост, но на его примере мы попытаемся разобраться в параметрах, которые необходимы для копирования клипов. В большинстве случаев для решения описанной задачи потребуется также изменить значение горизонтальной позиции копии клипа, иначе все копии будут выстроены в одну линию.

Из приведенного текста сценария явствует, что метод duplicateMovieClip() применяется к существующим клипам. Для копии клипа требуется задать имя экземпляра и глубину его расположения. В качестве нового имени экземпляpa может использоваться строковая константа или строковое выражение. Глубина представляется числовой константой либо переменной числового типа. В большинстве ситуаций, когда исходный клип уже находится в рабочей зоне, для нового клипа используется такое значение позиции, которое не приводит к отображению нового клипа поверх существующего. Поскольку в приведенном сценарии горизонтальная позиция не задается явным образом, новый клип наследует значение позиции по оси X и ряд других свойств исходного.

Пример фильма. Копирование клипов

В фильме, который находится в файле StarField.fla на компакт-диске, показано, каким образом можно заполнить космос звездами, чтобы создать очередной межгалактический анимационный триллер. Один из ключевых моментов фильма — применение метода duplicateMovieClip(). В фильме присутствуют следующие слои:

Рис. 9.1. Практически пустая рабочая зона. Это пространство будет в дальнейшем заполняться копиями клипа

Данный фильм включает в себя один клип, две кнопки и надпись. Сценарии, обеспечивающие копирование и удаление экземпляров клипа, определены в кнопках. Копируемые клипы получают новые значения свойств, представляющих горизонтальную и вертикальную позиции, а также уровень прозрачности _alpha. Начальный экран фильма практически пуст, как показано на рис. 9.1. Представленное на рисунке окно Library (Библиотека) позволяет убедиться в том, что маленькая звездочка в рабочей зоне фильма является экземпляром клипа, расположенного в библиотеке. В фильме используется все пространство рабочей зоны — оно заполняется тридцатью копиями клипа с изображением звезды (рис. 9.2).

Рис. 9.2. Случайное распределение звезд в этом фильме меняет картину звездного неба при каждом щелчке на одной из кнопок

Слой StarScript

Слой StarScript (Звездный сценарий) является основным слоем фильма. В начале работы над фильмом измените цвет фона или нарисуйте черный прямоугольник, закрывающий всю рабочую зону. Выполните команду Modify > Movie (Модифицировать > Фильм) и выберите черный цвет с помощью элемента выбора цветов. Чтобы создать клип Star (Звезда), воспользуйтесь описанным ниже алгоритмом.

  1. Выполните команду Insert > New Symbol (Вставка > Новый символ) либо воспользуйтесь комбинацией клавиш Ctrl+F8 (Windows) или Cmd+F8 (Macintosh). При этом вы переходите в режим редактирования символов.
  2. Щелкните на кадре 10 и нажмите клавишу F5. Это позволит создать 10 рабочих кадров.
  3. Нарисуйте желтую звездочку. (Чтобы успешно справиться с этой задачей, автору пришлось увеличить масштаб до 800 %: звездочка имеет размер всего приблизительно 8 на 8 пикселов.)
  4. Выделите вновь созданный рисунок и нажмите клавишу F8, чтобы открыть диалоговое окно Symbol Properties (Свойства символа). Установите переключатель Graphic (Графика) и введите имя StarSymb (Символ звезды). Преобразование рисунка в символ позволит вам в дальнейшем изменять его цвет.
  5. Сделайте ключевым кадр 5, щелкнув на его представлении в киноленте и нажав клавишу F6.
  6. Выделите экземпляр созданного вами графического символа и выполните команду Window > Panels > Effect (Окно > Панели > Эффект), чтобы открыть панель Effect (Эффект). Выберите пункт Tint (Оттенок) в раскрывающемся списке и установите верхний ползунок в позицию, соответствующую 100 %. Выберите голубой цвет с помощью кнопки выбора цветов, причем используйте достаточно яркий и светлый оттенок, чтобы он хорошо контрастировал с черным фоном.
  7. Повторите шаги 5 и 6 для кадра 10, выбрав светло-красный цвет.
  8. Проверьте действие заданных вами эффектов и убедитесь, что звезда действительно изменяет свой цвет, становясь то желтой, то голубой, то красной. Затем щелкните на кнопке Scene 1 (Сцена 1), чтобы вернуться к работе с главной кинолентой.
  9. Перетащите экземпляр клипа в рабочую зону (см. рис. 9.1). Выделите клип Star (Звезда) и нажмите комбинацию клавиш Ctrl+I (Windows) либо Cmd+I (Macintosh), чтобы открыть панель Instance (Экземпляр). Введите идентификатор stars (звезды) в поле Name (Имя). Теперь все готово для создания кнопок и их сценариев.

ВНИМАНИЕ

Данный шаг чрезвычайно важен, поскольку к клипам можно обращаться только по именам их экземпляров.

Слой Buttons

Две кнопки, расположенные в слое Buttons (Кнопки), обеспечивают соответственно копирование и удаление копий клипа. Нарисуйте два круга и введите надписи для кнопок. Затем нажмите клавишу F8, чтобы преобразовать рисунки в символы кнопок. Назовите кнопки DupMe (Копируй меня) и DumpMe (Удали меня).

Кнопка DupMe

Вызов метода duplicateMovieClipO производится в цикле, обеспечивающем создание 30 копий клипа с изображением мерцающей звездочки. В данном сценарии используется псевдомассив, имена элементов которого представляют собой результат конкатенации имени переменной newstar и параметра цикла, который последовательно принимает значения от 1 до 30. Элементы псевдомассива используются как имена экземпляров newstarl ... newstar30. Горизонтальная и вертикальная координаты выбираются случайным образом, так же как и значение свойства _alpha. При каждом щелчке на соответствующей кнопке на экране будет появляться новый узор, состоящий из звездочек. .

on (release) { StarCount = 1;

while (StarCount<30) {

_root. stars. duplicateMovieClip("newstar"+StarCount, StarCount);

_root["newstar"+starcount]._x = random (550);

_root[ "newstar "+Starcount]._y = random(400);

_root["newstar"+Starcount]._alpha = random(100);

StarCount+=l:

}

Чтобы еще более разнообразить мерцание звезд, можно добавить вызов функции random(). в сценарий клипа Star (Звезда). Введите операции смены цветов в сценариях трех кадров, расположенных на киноленте вслед за первым. В первом кадре вставьте вызов функции random(), обеспечивающей случайный выбор одного из трех чисел (random(4)). Генерируемое при этом число можно использовать в качестве величины смещения, обеспечивающего переход к различным кадрам, которым соответствуют разные цвета.

Кнопка DumpMe

Сценарий, обеспечивающий удаление копий клипа, практически идентичен сценарию их создания. С помощью команд Сору (Копировать) и Paste (Вставить) меню Edit (Правка) скопируйте в буфер обмена сценарий предыдущей кнопки и вставьте его в кнопку DumpMe (Удали меня). После этого становится доступным режим редактирования, обеспечивающий внесение исправлений. Удалите все операции категории Set Property (Установить значение свойства) и замените вызов метода duplicateMovieClip() обращением к методу remove-MovieClip(). В результате сценарий должен приобрести следующий вид:

on (release) {

StarCount = 1;

while (StarCount<30) {

_root[ "newstar "+starcount].removeMovieC1ip();

StarCount+=l; }

}

СОВЕТ

КОПИРОВАНИЕ И ВСТАВКА СЦЕНАРИЕВ В ЦЕЛЯХ УМЕНЬШЕНИЯ ЧИСЛА ОШИБОК. Механизм копирования и вставки позволяет не только сэкономить время, но и уменьшить количество ошибок в сценариях. В сценариях кнопок DupMe и DumpMe для копирования и удаления клипов применяются одни и те же идентификаторы и параметры.

Почему звездочки, присутствующие на экране, исчезают при каждом щелчке на кнопке Duplicate Clip (Копировать клип)? При создании нового массива звезд старый клип заменяется новым, который расположен на той же глубине. Для всех кинолент существует ограничение на число клипов, расположенных на одной и той же глубине, равное 1. При создании экземпляра с уже существующим именем прежний экземпляр просто получает свойства нового.

Адресация клипов

Новая система адресации, обеспечивающая передачу команд клипам и их кинолентам в пакете Flash 5, значительно проще, чем система адресации, принятая в предыдущих версиях пакета Flash. Надеемся, вы по достоинству оцените новый метод адресации.

Впрочем, старая система адресации клипов по-прежнему работает, и вы можете использовать формат, образец которого демонстрирует следующий сценарий:

on (release) {

tell Target ("/grandma/ma/granddaughter") { gotoAndPlay (5);

}

Однако аналогичный сценарий, записанный в нотации с точкой, более лаконичен и яснее отражает взаимоотношения различных объектов.

on (release) {

_root . grandma .ma . granddaughter . gotoAndPlay (5) ;

}

Конструкция gotoAndPlay(5) здесь присоединяется непосредственно к полному имени клипа. При работе с вложенными клипами нотация с точкой обеспечивает отражение связей между клипами через имена экземпляров; в конце сформированного таким образом пути находится имя метода, свойства или переменной. Нулевой уровень обозначается ключевым словом _root; имена прочих клипов, являющихся дочерними по отношению к корневому, присоединяются друг к другу, как вагоны поезда. Последним «вагоном» в этом составе является метод, свойство или переменная, связанные с предпоследним именованным элементом, то есть с последним именем клипа в инструкции.

СОВЕТ

ЭКСПЕРТНЫЙ РЕЖИМ РЕДАКТИРОВАНИЯ. При необходимости многократного ко-пирования частей сценария следует задуматься о переходе в экспертный режим редактора сценариев. Вы можете переключаться между режимами редактирования в любой момент; однако значительно большей свободой характеризуется экспертный режим. Не пугайтесь этого названия — чтобы пользоваться экспертным режимом, вовсе не обязательно быть экспертом.

Ключевым моментом здесь является способ адресации, а не сами имена методов. Методы в этой нотации ничем не отличаются от тех, которые используются для текущей киноленты. В предыдущем примере все операции производятся с клипом Granddaughter (Внучка), дочерним для клипа Ма (Мама). В свою очередь, клип Ма выступает в качестве дочернего по отношению к клипу GrandMa (Бабушка), который входит в состав главной киноленты. Все имена здесь являются именами экземпляров клипов. Чтобы вставить в текст сценария ряд инструкций, обрабатывающих определенный клип, проще всего скопировать первую инструкцию и вручную отредактировать остальные, изменяя лишь имя метода, свойства или переменной.

Пример фильма. Задание путей к клипам

Фильм, находящийся в файле TellMe.fla на компакт-диске, иллюстрирует механизм адресации клипов в сценариях, находящихся на других кинолентах. В данном фильме используются перечисленные ниже слои. Наряду с основными слоями в списке отражены дочерние слои, клипы и кнопки:

Пути

Рассматриваемый фильм является прекрасной иллюстрацией применения механизма путей для адресации объектов, находящихся на других кинолентах. В фильме шесть клипов; в сценарии любого из них могут содержаться команды, обрабатывающие другие клипы. Кроме того, в фильме присутствуют два набора кнопок. Внешний набор кнопок с черными кружками в середине относится к главной киноленте. Кнопки взаимодействуют с соответствующими клипами, имена которых находятся внутри прямоугольников (рис. 9.3), отправляя им команду воспроизведения кадра 5. В каждом клипе, а также на главной киноленте в кадре 5 содержится сообщение, в котором кратко характеризуется данный клип. Взглянув на сценарии шести внешних кнопок, вы обнаружите пути, обеспечивающие доступ к элементам всех уровней; эти пути начинаются с корневого объекта — главной киноленты.

Рис. 9.3. Структура клипов является иерархической; их имена следует перечислять в нисходящем порядке. В окне Library отображаются многослойные клипы

С кнопками, входящими во внутренний набор, связаны особые линии. Эти линии демонстрируют направление обмена данными с объектами других уровней (см. рис. 9.3). К примеру, линия от кнопки, расположенной слева от поля Ма (Мама), ведет к главной киноленте. Кнопка, находящаяся справа от поля GrandPa (Дедушка), связана с полем Granddaughter (Внучка). На одном уровне иерархии — например, для клипов GrandPa (Дедушка) и GrandMa (Бабушка) — можно использовать два способа адресации — абсолютный и относительный.

Абсолютная адресация

При использовании абсолютной адресации в адресе отражаются все иерархические связи, начиная с верхнего уровня. У главной киноленты нет имени, но к ней можно обращаться через идентификатор _root. Можно также использовать обозначение соответствующего уровня, например _level0 или _level43, в зависимости от конкретной ситуации. Вообще говоря, идентификатор _root является псевдонимом для обычной ссылки на элемент верхнего уровня. Фильм, расположенный на уровне _level5, может адресоваться через идентификатор _root из любой киноленты, находящейся на том же уровне. Начав с корневого уровня и последовательно перечисляя имена всех уровней в нисходящем порядке, отражающем текущую иерархию, можно добраться до любого уровня. Иерархия объектов в данном случае состоит из клипов, находящихся внутри других клипов (все они являются потомками главной киноленты). Чтобы получить ссылку на клип, относящийся к другой иерархической структуре, необходимо его адресовать. В уроке 10 мы детально рассмотрим механизм включения клипов в системе Flash 5 и познакомимся с особенностями работы с разными уровнями.

ПРИМЕЧАНИЕ

При адресации клипов используются только имена экземпляров, но не символов.

Относительная адресация

Адресуя клип, находящийся в пределах данной ветви иерархической структуры, можно применять механизм относительной адресации. При относительной адресации используется путь, берущий свое начало в объекте, в сценарии которого расположена команда. При продвижении вверх по иерархии объектов можно использовать ключевое слово _parent. Такая методика позволяет избежать необходимости всегда начинать полное имя объекта с корневого элемента иерархии. В качестве пути от клипа Granddaughter (Внучка) к объекту Ма (Мама) можно использовать идентификатор _parent, за которым следует указать соответствующий метод, свойство или переменную. Путь от объекта Ра (Папа) к объекту Grandson (Внук) можно записать в виде grandson. Однако допустим, что клип Granddaughter, который расположен на третьем уровне иерархии, должен взаимодействовать с клипом Grandson, который также находится на третьем уровне иерархии. При абсолютной адресации нам придется пройти весь путь от вершины дерева к объекту Grandson (_root. grandpa. pa. grandson).

Чтобы иллюстрировать механизм относительной адресации, мы воспользуемся нашим примером, в котором клип Ма (Мама) является составной частью клипа GrandMa (Бабушка) и включает в себя клип Granddaughter (Внучка). Если вам необходимо адресовать объект GrandMa в сценарии, находящемся на уровне объекта Ма, лучше всего использовать относительный адрес с ключевым словом _parent. При необходимости обратиться к клипу Granddaughter изнутри клипа Ма в качестве пути будет выступать идентификатор granddaughter. Адрес объекта Granddaughter, заданный относительно объекта GrandMa, выглядиг как ma.granddaughter. Путь от клипа Granddaughter к клипу Grandma будет выглядеть как _parent._parent. Во всех путях используются только имена экземпляров.

Слой Mainline

Слой Mainline (Главная кинолента) содержит метку Main TimeLine (Главная кинолента), небольшой сценарий и надпись в рабочей зоне кадра 5. Главная кинолента всегда является корневым элементом иерархии.

Слой Grand Ра

Первая иерархическая структура, которую мы рассмотрим, находится в слое GrandPa (Дедушка). В процессе работы над этим слоем вы обнаружите, что клип GrandPa будет постепенно расти; его вид будет меняться. На рис. 9.3 видно, что в слое GrandPa содержатся три разных прямоугольника (взгляните в область предварительного просмотра окна библиотеки), представляющих три клипа.

  1. Выполните команду Insert > New Symbol (Вставка > Новый символ). Установите переключатель Movie Clip (Клип) и введите имя GrandPa (Дедушка) в диалоговом окне Symbol Properties (Свойства символа). Щелкните на кнопке ОК, чтобы перейти в режим редактирования символов.
  2. С помощью панели Info (Информация) создайте прямоугольник шириной 100 пунктов и высотой 60 пунктов. Поместите этот объект в координатах (0, 0); в элементе позиционирования должна быть выделена центральная точка. Для всех прочих клипов следует задать те же параметры.
  3. Создайте в рабочей зоне изображение круга размером 26 на 26 пунктов; средняя часть круга должна быть залита оранжевым цветом; для рамки используйте синий цвет. Выделите круг. Нажмите клавишу F8 и установите переключатель Button (Кнопка) в диалоговом окне Symbol Properties (Свойства символа); назовите вновь созданный клип SendAround (Послать в обход). Этот символ применяется для всех внутренних кнопок нашего фильма.
  4. Выделив центральную точку в элементе позиционирования в панели Info (Информация), разместите кнопку в координатах (85, 0). На рис. 9.4 вы можете видеть, что кнопка правильно расположена относительно текстового поля.

Рис. 9.4. Позиция надписи клипа, текст приветствия и кнопка

Слой Button клипа GrandPa

В слое GrandPa (Дедушка) присутствует одна кнопка. Внутренние кнопки для всех клипов содержат сценарии, которые сводятся к двум основным типам. В одних сценариях используется инструкция tell Target, а в других — инструкция присваивания. К тому времени, когда вы закончите работу над этими сценариями и кнопками, вы приобретете ясное представление о том, как осуществляется взаимодействие между кинолентами в сценариях ActionScript, конечно, если не сойдете с ума. Ознакомьтесь с текстом сценария, а затем взгляните на комментарии к нему.

Сценарий экземпляра кнопки SendAround

on (release) {

_root.grandma.ma.granddaughter.gotoAndStop(5);

}

on (rollout) {

_root.grandma.ma.granddaughter.gotoAndStop(1): }

Внимательно присмотревшись к этому сценарию, вы поймете, что здесь все довольно просто.

Слой Greeting клипа GrandPa

Для каждого клипа в фильме предусмотрена особая форма обращенного к зрителю приветствия. Когда выбран тот или иной клип, зритель должен узнать о том, что в фильме все в порядке с адресацией. Механизм приветствий обеспечивается ключевым кадром, расположенным в кадре 5.

Кадр 5 клипа GrandPa. На рис. 9.4 показаны элементы готового клипа в режиме разработки при выделенном кадре 5. Текст приветствия находится в прямоугольнике размером 100 на 60 пикселов, расположенном в позиции (0, 75), причем в панели Info (Информация) выделена центральная точка элемента позиционирования.

По завершении работы над клипом GrandPa (Дедушка) следует выполнить перечисленные ниже шаги.

  1. Щелкните на кнопке Scene 1 (Сцена 1) в верхнем левом углу окна рабочей зоны, чтобы вернуться к работе с главной кинолентой.
  2. Выполните команду Window > Library (Окно > Библиотека), чтобы открыть окно Library (Библиотека). Перетащите экземпляр клипа GrandPa (Дедушка) из окна библиотеки в рабочую зону. Расположите его так, как показано на рис. 9.3.

ВНИМАНИЕ

Это очень важный шаг. Вам следует запомнить, что, не задав имени экземпляра, вы не сможете обращаться к этому экземпляру в тексте сценария.

Слой Ра клипа GrandPa

Данный слой зарезервирован для размещения клипа Ра (Папа).

Клип Ра с именем экземпляра ра

Следующие шаги обеспечивают создание вложенного клипа. В клипе GrandPa (Дедушка) в нашем фильме находится клип Ра (Папа); внутри клипа Ра размещается клип Grandson (Внук). Вы можете создавать новые клипы на главной киноленте, а затем перетаскивать их в соответствующие клипы в режиме редактирования символов. При этом следует использовать описанный в пункте «Слой GrandPa» алгоритм (шаги 1-4), подставив идентификатор Ра на место идентификатора GrandPa. Координаты и размеры прямоугольников задаются точно так же, как описано выше.

Слой Button клипа Ра

В этом слое следует разместить кнопку справа от прямоугольника, как показано на рис. 9.4; эта кнопка должна быть экземпляром кнопки SendAround (Послать в обход). Перетащите эту кнопку из окна Library (Библиотека).

Экземпляр кнопки SendAround в клипе Ра

on (release) {

_root.grandma.gotoAndStop( 5);

}

on (rollout) {

_root.grandma.gotoAndStop(1); }

Слой Howdy клипа Pa

Как и в случае с клипом GrandPa (Дедушка), для клипа Ра (Папа) предусмотрена особая форма приветствия в кадре 5, позволяющая идентифицировать данный клип. Расположите текст приветствия в кадре 5 с теми же параметрами, что и для клипа GrandPa.

Кадр 5 клипа Ра. Вставьте ключевой кадр в кадре 5. Нарисуйте прямоугольник и разместите в нем следующий текст приветствия (рис. 9.5): Howdy from Pa (Привет от папы).

Рис. 9.5. В панели Movie Explorer показаны иерархия клипов и общая структура фильма

Слой Grandson клипа Ра

Данный слой зарезервирован для размещения клипа Grandson (Внук).

Размещение клипа Ра внутри клипа GrandPa

Завершив работу над клипом Ра (Папа), следует поместить этот клип внутрь клипа GrandPa (Дедушка). Для этого необходимо выполнить следующий ряд шагов.

  1. Щелкните на кнопке Scene 1 (Сцена 1) в верхнем левом углу окна рабочей зоны, чтобы вернуться к работе с главной кинолентой. (Если вы еще не вышли из режима редактирования символов.)
  2. Выделите клип GrandPa (Дедушка) на главной киноленте и выполните команду Edit > Edit Symbols (Правка > Редактировать символы). Убедитесь, что на главной киноленте выделен кадр 1.

ПРИМЕЧАНИЕ

При этом должен быть выделен слой Ра.

  1. Перетащите клип Ра (Папа) из окна Library (Библиотека) в клип GrandPa (Дедушка). Справа от кнопки Scene 1 (Сцена 1) в верхнем углу окна рабочей зоны появится кнопка GrandPa (Дедушка). (Если такой кнопки нет, значит, вы уже успели выйти из режима редактирования символов.)
  2. Поместите клип Ра (Папа) в позицию (0, 75), выделив центральную точку элемента позиционирования в панели Info (Информация).
  3. Выделите клип Ра (Папа) и нажмите комбинацию клавиш Ctrl+I (Windows) либо Cmd+I (Macintosh), чтобы открыть панель Instance (Экземпляр). Введите идентификатор ра (папа) в поле Name (Имя).

ВНИМАНИЕ

Это чрезвычайно важный шаг.

Экземпляр grandson клипа Grandson

Слой Grandson (Внук) находится на нижнем уровне иерархии. Процесс включения клипа Grandson в клип Ра (Папа) несколько отличается от описанного выше, так как вам придется создать дополнительный слой.

Слой Button клипа Grandson

В этом слое необходимо разместить кнопку справа от прямоугольника, как было показано для клипа GrandPa (Дедушка) на рис. 9.4; кнопка должна быть экземпляром символа SendAround (Послать в обход). (Кнопку следует перетащить из окна библиотеки.)

Сценарий экземпляра кнопки SendAround в клипе Grandson

on (release) {

_раrent.gotoAndStop(5);

}

on (rollout) {

_parent.gotoAndStop(1); }

Обратите внимание, что в данном сценарии для обращения к родительскому клипу используется ключевое слово _parent.

Слой Whatever клипа Grandson

Для клипа Grandson (Внук), как и для клипов GrandPa (Дедушка) и Ра (Папа), предусмотрена особая форма приветствия в кадре 5. Расположите текст приветствия, воспользовавшись теми же параметрами, что и для клипа GrandPa.

Кадр 5 клипа Grandson. Сделайте ключевым кадр 5. Нарисуйте прямоугольник и разместите внутри него (как показано на рис. 9.4) следующее приветствие: Whatever...Grandson (Чего?.. Внук).

Здесь отсутствует дополнительный слой, предназначенный для размещения вложенного клипа, поскольку в клипе Grandson (Внук) такового нет.

Процессу включения клипа Grandson (Внук) внутрь клипа Ра (Папа) присуще небольшое, но важное отличие от описанных выше аналогичных операций.

  1. Щелкните на кнопке Scene 1 (Сцена 1) в верхнем левом углу окна рабочей зоны, чтобы вернуться к работе с главной кинолентой. (Если вы еще не вышли из режима редактирования символов.)
  2. Выделите клип GrandPa (Дедушка) на главной киноленте и выполните команду Edit > Edit Symbols (Правка > Редактировать символы). Убедитесь, что на главной киноленте выделен кадр 1.
  3. Важное отличие. Выделите клип Ра (Папа), находясь в режиме редактирования символов. Выполните команду Edit > Edit Selected (Правка > Редактировать выделенный элемент). Нельзя использовать комбинацию клавиш Ctrl+E (Windows) либо Cmd+E (Macintosh), поскольку она требуется только для перехода в режим редактирования символов с главной киноленты. Вы должны сначала выделить вложенный клип, а затем воспользоваться командой Edit > Edit Selected.
  4. Выделите кадр 1, а затем — слой Grandson (Внук). Перетащите клип Grandson (Внук) из окна Library (Библиотека) в клип Ра (Папа). Справа от кнопки Scene 1 (Сцена 1) в верхнем левом углу окна рабочей зоны должна появиться кнопка Ра (Папа). (Если этого не произошло, значит, вы редактируете не тот символ.)
  5. Поместите клип Grandson (Внук) в позицию (0, 75), выделив центральную точку в элементе позиционирования в панели Info (Информация).
  6. Выделите клип Grandson (Внук) и откройте панель Instance (Экземпляр). Введите в поле Name (Имя) идентификатор grandson (внук).

ВНИМАНИЕ

Это чрезвычайно важный шаг.

Слой GrandMa

Иерархия объектов в слое GrandMa (Бабушка) весьма похожа на структуру слоя GrandPa (Дедушка). Однако здесь в сценариях кнопок требуется дополнительно устанавливать значения определенных свойств. Поскольку рассматриваемый пример фильма посвящен работе с иерархией объектов, было бы неплохо включить в сферу рассмотрения механизмы адресации объектов при установке значений свойств. Возьмите за основу все шаги, описанные в предыдущем разделе, но вставьте описанные ниже сценарии и надписи.

Экземпляр grandma клипа GrandMa

В данном сценарии кнопки производится установка значения свойства.

Экземпляр та клипа Ма

В сценарии данной кнопки адресуется главная кинолента. При активизации данного сценария в нижней части экрана появляется соответствующее сообщение.

Экземпляр granddaughter клипа Granddaughter

В этом сценарии обратите внимание на способ обращения к клипу, находящемуся на нижнем уровне иерархии, из другого клипа, также находящегося на нижнем уровне иерархии, но в другой ветви иерархической структуры. Адресация начинается с верхнего уровня.

Слой Lines

Структура слоя Lines (Линии) весьма проста; этот слой связывает слои GrandPa (Дедушка) и GrandMa (Бабушка). Проведите с помощью инструмента Line (Линия) линии, связывающие внутренние кнопки с соответствующими объектами. Расположение линий показано на рис. 9.3.

Слой Action Buttons

Расположите внешние кнопки фильма в слое Action Buttons (Кнопки операций). Все кнопки здесь делают одно и то же. Каждая кнопка предписывает соответствующему объекту необходимость выполнить переход к кадру 5 с последующей остановкой воспроизведения, но в сценариях всех кнопок используются различные ссылки. Мы уже видели, что как все клипы, так и главная кинолента содержат надписи, которые должны появляться на экране в кадре 5. Ключевой для работы со всеми кнопками является возможность адресовать любой клип из главной киноленты. Когда адресуемый клип находится на главной киноленте, система Flash обеспечивает воспроизведение клипа, находящегося на верхнем уровне иерархии. Если у этого клипа есть вложенные клипы, они также будут воспроизведены. Когда вы будете работать с более сложными фильмами, в которых присутствует несколько кинолент, находящихся в разных клипах, вам понадобится панель Movie Explorer (Проводник по фильму). На рис. 9.5 показан фрагмент изображения в окне Movie Explorer. Здесь представлены все клипы, их сценарии и кадры.

Нарисуйте круг, создав оранжевую окружность и воспользовавшись черной заливкой. Выделите этот рисунок и нажмите клавишу F8, чтобы открыть диалоговое окно Symbol Properties (Свойства символа). Установите переключатель Button (Кнопка) и введите имя From Top (Сверху). Экземпляры данной кнопки будут использоваться для всех внешних кнопок фильма. Внимательно проверьте пути, указанные в следующих клипах, чтобы получить представление о том, как в пакете Flash 5 можно переключаться между различными клипами.

Первый экземпляр кнопки From Top

Расположите данную кнопку слева от надписи Grand Ра (Дедушка) в рабочей зоне.

on (release) {

_root.grandpa.gotoAndStop(5);

}

on (rollout) {

_root.grandpa.gotoAndStop( 1); }

Второй экземпляр кнопки From Top

Расположите данную кнопку слева от надписи Ра (Папа) в рабочей зоне.

on (release) {

_root.grandpa.pa.gotoAndStop(5)

}

on (rollout) {

_root.grandpa.pa.gotoAndStop(1); }

Третий экземпляр кнопки From Top

Расположите данную кнопку слева от надписи Grandson (Внук) в рабочей зоне.

on (release) {

_root.grandpa.pa.grandson.gotoAndStop(5);

on (rollout) {

_root.grandpa.pa.grandson.gotoAndStop(1);

}

Четвертый экземпляр кнопки From Top

Расположите данную кнопку справа от надписи GrandMa (Бабушка) в рабочей зоне.

on (release) {

_root.grandma.gotoAndStop(5);

}

on (rollout) {

_root.grandma.gotoAndStop(1);

}

Пятый экземпляр кнопки From Top

Расположите данную кнопку справа от надписи Ма (Мама) в рабочей зоне.

on (release) {

_root. grandma. ma. gotoAndStop( 5);

}

on (rollout) {

_root.grandma.ma.gotoAndStop(1);

}

Шестой экземпляр кнопки From Top

Расположите данную кнопку справа от надписи Granddaughter (Внучка) в рабочей зоне.

Рис. 9.6. Любой клип фильма имеет право управлять работой других клипов

on (release) {

_root.grandma.ma.granddaughter.gotoAndStop(5);

}

on (rollout) {

_root.grandma.ma.granddaughter.gotoAndStop(1):

}

Вне зависимости от того, начали вы работу над данным фильмом «с нуля» или разбираете образец, находящийся на компакт-диске, учтите, что этот фильм является чисто учебным и его основное назначение состоит в том, чтобы помочь вам разобраться в механизме адресации. Когда вам понадобится включить в какой-либо фильм тот или иной путь, данный фильм может вам помочь. На рис. 9.6 демонстрируется наш фильм в работе.

Передача значений переменных между клипами

Возможность передавать значения переменных во многих случаях является фактором, обеспечивающим создание качественных фильмов. В системе Flash 5 существует несколько различных способов применения переменных в клипах. Скажем, следующий сценарий демонстрирует технику использования значения переменной для перехода к заданному кадру.

turn = 20;

_root.flip.gotoAndStop(turn);

Однако следующий сценарий при помещении значения переменной в клип с именем экземпляра flip не должен отсылать клип к кадру 20. Этот сценарий задает константу 20 в качестве значения переменной turn на киноленте клипа.

_root.flip.turn = 20;

_root.flip.gotoAndStop(turn);

В то же время приведенный ниже сценарий помещает полученное значение в переменную, определенную в клипе flip (поворот). Во второй строке сценария клипу flip отправляется значение переменной, поскольку в качестве параметра метода gotoAndStop() используется полное имя переменной с конкретным путем.

_root. flip, turn = 20;

_root.f1ip.gotoAndStop(_root.f1i p.turn);

Вызов пользовательских функций

В уроке 7 вы познакомились с пользовательскими функциями. В настоящем разделе вы узнаете, как создавать функции, пригодные для использования в любом клипе на любой киноленте. В пользовательской функции может быть предусмотрен параметр для обозначения имени клипа. Подставляя на место этого параметра имена экземпляров различных клипов, вы можете использовать эту функцию для обращения к любому клипу. Преимущество такой методики состоит в том, что такая функция может использоваться для целого ряда различных клипов. За счет применения в пользовательской функции локальных переменных и размещения имен экземпляров клипов в параметрах функции разработчик получает возможность обращаться к такой функции со ссылками на разные клипы. Учебная задача, которую мы рассмотрим в этом разделе, содержит пример такого применения механизма пользовательских функций.

Впрочем, многие функции вообще не обращаются к клипам. Клипы могут вызывать различные функции в сценариях, размещенных в кадрах и кнопках, а также в своих собственных сценариях. Локальные переменные, создаваемые с помощью ключевого слова var, используются лишь в операциях, находящихся внутри соответствующей функции. Поэтому одна и та же функция может одновременно применяться в нескольких клипах. К примеру, вам может понадобиться функция, которая проверяет значение переменной, обозначающей расход горючего; это значение уменьшается по мере расходования топлива. Подобная функция может выглядеть следующим образом:

function fuel Burn () {

var fuel ;

var burnRate;

var fuel Cell ;

if (burnRate = 200) {

fuel-=5; } else {

fuel-=2;

}

if (fuel<=0) {

fuel Cell ="E";

}

Чтобы обратиться к данной функции, в любом клипе можно разместить несложный сценарий следующего вида:

onClipEvent (mouseUp) {

fuel Burn( ); }

Если в вашем фильме присутствует 10, 20, 30 или 100 гоночных машин, самолетов или космических кораблей, реализованных как клипы, то за счет применения пользовательских функций ваша задача становится намного проще, а ее решение — более универсальным. Одно из основных достоинств функций состоит в том, что они могут возвращать значения. Кроме того, в приведенном примере сценарий функции работает с локальными переменными. Все локальные переменные изменяются независимо от локальных переменных в других частях фильма. При использовании некоей функции с локальными переменными несколькими клипами одновременно изменение значений локальных переменных в одном клипе никак не отражается на значениях одноименных локальных переменных в других клипах.

Проект. Совместное использование функции несколькими клипами

Пример фильма, содержащийся в файле alienFunction.fla на компакт-диске, демонстрирует механизм изменения различных свойств одной и той же функцией. В этом фильме три слоя:

Идея фильма чрезвычайно проста. Три НЛО представлены в виде отдельных клипов, а единственная кнопка заставляет их перемещаться в разных направлениях. На рис. 9.7 показан начальный экран фильма.

Рис. 9.7. В данном фильме три клипа и одна кнопка

Слой Function Script

В первом слое фильма содержится сценарий пользовательской функции. Обратите внимание на квадратные скобки ([]), в которые заключается параметр, заменяемый различными значениями при вызове функции из разных сценариев. Имя аргумента тс используется в данной функции как переменная, на место которой будет подставляться имя экземпляра клипа, передаваемое сценарию функции.

Кадр 1. Сценарий этого кадра генерирует значение локальных переменных, которые будут использоваться в свойствах _х и _у. Значения переменных al ienX и alienY при каждом обращении к функции генерируются случайным образом. Поскольку эти переменные являются локальными, они не могут повлиять на функционирование других клипов, в которых будет вызываться функция beam(me).

function beam (mс) {

var alienX = random(500);

var alienY = random(400);

_root[mc]._x = alienX;

_root[mc]._y= alienY; }

Слой Saucers

Слой Saucers (Летающие тарелки) состоит из трех клипов. Хотя здесь использованы три разных клипа и по одному экземпляру для каждого из них, можно было ограничиться одним клипом и создать в фильме три его экземпляра. Впрочем, различные сочетания цветов помогают в идентификации объектов. Каждый экземпляр должен получить имя в панели Instance (Экземпляр). В начале фильма летающие тарелки расположены в одну линию.

Слой Button

Значимость механизма пользовательских функций мы рассмотрим на примере сценария единственной кнопки, присутствующей в рабочей зоне фильма. Внешне кнопка представляет собой обычный круг, нарисованный с помощью инструмента Oval (Овал); это изображение можно преобразовать в кнопку, нажав клавишу F8. Необходимо установить переключатель Button (Кнопка) и ввести имя kickem (поехали).

Экземпляр кнопки Kickem. В сценарии этой кнопки используется функция beam (mc), принимающая в качестве параметра имя клипа, находящегося на главной киноленте.

ПРИМЕЧАНИЕ

Вводя имена экземпляров клипов в тексте сценария, не забудьте заключить их в кавычки.

on (release) {

beam("tom");

beam("dick");

beam("harry"); }

При каждом щелчке на кнопке летающие тарелки перемещаются в произвольных направлениях. На рис. 9.8 показан экран работающего фильма.

Рис. 9.8. При каждом щелчке на кнопке клипы летающих тарелок перемещаются; направление их движения выбирается случайным образом; перемещение всех летающих тарелок обеспечивается одной функцией

Проект. Фабрика мультфильмов

В файле cartoonFactory.fta на компакт-диске находится фильм, в основе которого лежат рисунки Лесли Кабарга (Leslie Cabarga). Вы можете найти их по адресу www.flashfonts.com. Данный проект позволяет продемонстрировать методику управления различными параметрами персонажей мультфильмов. В то же время вы получите начальные сведения о применении мультипликационных эффектов. В фильме восемь слоев:

Чтобы наглядно продемонстрировать, каким образом сценарии могут управлять движением в мультфильмах, в фильм включены кнопки и ползунки. В кнопках предусмотрены обработчики событий мыши, обеспечивающие изменение положения шляпы, отображение слез и моргания. Здесь везде используются полные имена объектов, обеспечивающие генерацию операций. В фильме используются ползунки трех различных типов. Верхний ползунок позволяет изменять положение соответствующего клипа, перемещая его к ключевому кадру, номер которого вычисляется на основе текущего положения ползунка. Два других ползунка устанавливают значения свойств клипа, связанных со слезами и с вращением глаз соответственно. На рис. 9.9 показано начальное представление рабочей зоны и слоев фильма.

Рис. 9.9. Ползунки для мультфильма Flash

В каждом слое фильма содержится краткое объяснение происходящего; акцент делается на информации о частях фильма, используемых в данный момент сценариями. В некоторых рисунках сообщается о том, на какой киноленте были созданы данные изображения, но во всех иллюстрациях присутствует информация о соответствующем рисунке и применяемой трансформации.

Слой Tears

Оба рисунка с изображением слез представляют собой символы графики. В режиме редактирования символов реализована анимация, в которой слезинки движутся и исчезают. Экземпляры этих символов графики были модифицированы в диалоговом окне Symbol Properties (Свойства символа); в качестве модели поведения для них был выбран вариант Movie Clip (Клип), что обеспечило возможность для их изменения средствами сценариев ActionScript. Имена экземпляров для этих объектов — tears и tears2.

Слой Hat Flip

Изображение шляпы также представляет собой символ графики со сценарием, созданный в режиме редактирования символов. В фильме используется серия кадров, в которых осуществляется кадрирование перехода шляпы в слое Hat Flip (Поворот шляпы) между нижним и верхним положениями. В результате при воспроизведении фильма шляпа подпрыгивает на голове кошки. Экземпляр этого символа представляет собой клип с именем экземпляра flip.

Слой Eye Blink

Реализовать подмигивание — задача непростая. В рассматриваемом фильме она решается за счет серии рисунков, кадрированных в нескольких слоях, вложенных по отношению к слою Eye Blink (Подмигивание). На рис. 9.10 представлены кинолента и слои соответствующего символа.

Слой Kat

Все прочие части изображения кошачьей головы реализованы в слое Kat (Кошка). Оба рисунка с изображением глаз были преобразованы в клипы, что обеспечило возможность реализовать в фильме движение глаз с помощью соответствующего сценария. Брови, рот, нос, глаза и морда представлены в виде отдельных рисунков или групп рисунков. Клипы с изображением глаз обладают именами экземпляров lefteye и righteye.

Слой Slider

Три клипа с изображением ползунков (схожие с описанными в уроке 7) управляют тремя аспектами воспроизведения мультфильма. Эти клипы расположены в слое Slider (Ползунок). В каждом из них присутствует изображение рукоятки, которая может перемещаться мышью на 100 пикселов по оси X, но остается неподвижной относительно оси Y.

Рис. 9.10. Для реализации подмигивания потребовалось ввести в фильм четыре слоя и 23 кадра

Клип Leverl с именем экземпляра lever1

Для всех трех рукояток используется один и тот же сценарий перетаскивания, но с различными константами, обозначающими координату по оси Y. Для создания всех трех клипов следует выполнить следующие шаги (с учетом указанных различий между ними).

  1. Проведите линию длиной 100 пикселов и шириной 1-2 пиксела. Разместите эту линию слева от изображения кошки. Введите координаты по оси Y для этой линии в панели Info (Информация). Это значение будет использоваться при перемещении рукоятки ползунка.
  2. Выполните команду Insert > New Symbol (Вставка > Новый символ). Установите переключатель Movie Clip (Клип) и введите идентификатор leverl (pyкоятка 1) в диалоговом окне Symbol Properties (Свойства символа). Щелкните на кнопке ОК и перейдите в режим редактирования символов.
  3. Нарисуйте в режиме редактирования символов кнопку (с шириной и высотой, равными 30 пикселам), как показано на рис. 9.9. Выделите эту кнопку и нажмите клавишу F8, чтобы открыть диалоговое окно Symbol Properties (Свойства символа). Установите переключатель Button (Кнопка) и введите имя levlButton (кнопка рукоятки 1). Для двух других ползунков можно использовать такие же кнопки.

Кадр 1 клипа Lever1

Выделите кадр 2 и нажмите клавишу F5, чтобы вставить новый кадр. Введите следующий сценарий в кадре 1:

var a=_root.leverl._x;

var b=(a-47)/4

var loc=Math.floor(b)

_root.f1ip.gotoAndPlay(loc)

В третьей строке этого сценария устанавливается значение переменной 1ос. Поскольку линия, вдоль которой перемещается ползунок, имеет длину 100 пикселов, а начальная позиция по оси X равна 47, эту константу необходимо вычесть из текущего значения координаты объекта leverl по оси X (leverl — это имя экземпляра нашего ползунка). В результате мы получим значение, находящееся в интервале от 0 до 99. Текущее значение координаты по оси X делится на 4, так как в клипе, представляющем движение кошки, используется примерно 25 кадров, а для данного ползунка возможно 100 разных целочисленных значений, соответствующих его положению.

Выделите экземпляр кнопки levlButton (кнопка рукоятки 1) и откройте панель Instance (Экземпляр). (Вы по-прежнему работаете в режиме редактирования символов.) Откройте панель операций, щелкнув на соответствующей кнопке в нижней части окна рабочей зоны.

Экземпляр кнопки lev1Button в клипе Lever1

В следующем сценарии обеспечивается перемещение рукоятки ползунка в «колее», заданной верхним и нижним пределами, определяющими вертикальную позицию ползунка. Для всех сценариев, обеспечивающих работу с горизонтальными ползунками, значения полей Т (Сверху) и В (Снизу) должны совпадать. Для вертикальных ползунков должны совпадать значения L (Слева) и R (Справа).

on (press) {

_root.leverl.startOragCfalse, 47, 174. 147, 174);

}

on (release) {

stopDrag 0:

}

Повторите описанные выше шаги для двух других ползунков. Следует использовать тот же символ кнопки, но заменить сценарии кадра и кнопки, как показано ниже.

Клип Lever3 с именем экземпляра lever3

Проведя линию, которая будет служить желобком для перемещения ползунка, введите сценарии кадра и кнопки. Еще раз взглянув на рис. 9.9, вы можете убедиться, что начальное расположение одной из рукояток отличается от начальной позиции двух других: две рукоятки в начале работы фильма находятся в крайнем левом положении, а третья расположена по- центру. (Соответствующий объект имеет имя leverS, что не согласуется с естественным порядком их следования, однако подчеркивает тот факт, что данная рукоятка существенно отличается от двух других.)

Кадр 1 клипа Lever3

а = (_root.lever3._x)-47;

1осЗ = Math.floor(a);

_root.tears._xscale = 1осЗ;

_root. tears. _yscale = 1ос3;

_root.tears2._xscale = loc3;

_root.tears2._yscale = loc3;

Экземпляр кнопки lev 1 Button в клипе Lever3

on (press) {

_root. lever3. startDrag(false. 47. 226.5, 147, 226.5);

}

on (release) {

stopDrag ( ) ;

}

Клип Lever2 с именем экземпляра lever2

Сценарии в данном клипе схожи со сценариями двух других клипов. Однако следует учесть, что здесь необходимо обеспечить одновременное перемещение двух клипов.

Кадр 1 клипа Lever2

Значение переменной eye! ос необходимо умножить на 3,6, потому что у ползунка 100 возможных позиций, а в полном угле 360 градусов.

var a=(_root.lever2._x)-47;

var eyeloc=Math.floor(a*3.6);

_root . 1ef teye . _rotati on=eyeloc ;

_root . ri ghteye . _rotati on=eyeloc ;

Экземпляр кнопки lev1Button в клипе Lever2

on (press) {

_root.lever2.startDrag(false, 47, 278, 147, 278);

}

on (release) {

stopDrag (); }

Слой Buttons

Все три кнопки, расположенные в слое Buttons (Кнопки), обеспечивают начальный толчок для воспроизведения анимации в различных клипах данного фильма. Для второй и третьей кнопок используются события перемещения указателя мыши внутрь и за пределы кнопки. Создайте символ кнопки круглой формы; экземпляры этой кнопки будут расположены рядом с ползунками. Для ввода приведенных ниже сценариев следует использовать экземпляры одной и той же кнопки. Назовите символ кнопки Trigger (Триггер).

Кнопка с надписью Hat — экземпляр символа Trigger

on (rollover) {

_root.flip.play(); }

Кнопка с надписью Tears — экземпляр символа Trigger

on (rollOver) {

_root.tears.play();

} on (rollout) {

_root.tears2.play(): }

Кнопка с надписью Eyes — экземпляр символа Trigger

on (rollOver) {

root.blink.play();

}

on (rollout) {

_root.bl1nk2.play(); }

Слой Cartoon Type

Слой Cartoon Type (Титр мультфильма) содержит заголовок страницы. В рассматриваемом образце фильма для этой надписи был выбран шрифт Kobalt-Kartoon. Это один из шрифтов, входящих в коллекцию Лесли Кабарга (Leslie Cabarga) (вы можете найти этот шрифт по адресу www.flashfonts.com). Он прекрасно подходит для создания мультфильмов в формате Flash. Данный шрифт был расширен средствами Adobe Illustrator и импортирован в систему Flash.

Слой Backdrop

В этом слое в качестве фона фильма используются три концентрических круга. Каждый из этих кругов представляет собой символ графики. Вы можете сэкономить силы, если используете один и тот же символ для решения различных задач. На рис. 9.11 показан экран фильма, который иллюстрирует движение шляпы, вращение и подмигивание глаз, а также движение слезинок.

Рис. 9.11. В этом фильме кнопки и ползунки управляют изменением свойств символов и их поведением

Сценарии ActionScript будут тем проще и нагляднее, чем более корректно вы будете работать с путями и пользовательскими функциями. Именно эти конструкции языка ActionScript позволяют добиться наиболее прозрачной структуры фильмов. Адресуя клипы и разрабатывая собственные функции, всегда задавайтесь следующими вопросами.

Если вы будете правильно отвечать на эти вопросы, вам станет намного легче работать с множеством объектов, расположенных на разных кинолентах и организованных в сложные иерархические структуры.

Что нового мы узнали?

В этом уроке мы научились...

← Назад
Hosted by uCoz