Опубликован: 04.11.2006 | Уровень: специалист | Доступ: платный
Урок 14:

Динамическое управление фильмами-символами

Аннотация: В предыдущих уроках вы научились программировать то, что должно происходить в фильме, используя обработчики различных видов событий – событий кадров, клипов и кнопок. Главным образом манипуляции производились с экземплярами клипов (фильмов-символов). В этом уроке вы научитесь манипулировать клипами на основе динамического ввода – дублировать, присоединять, расцвечивать, масштабировать, перемещать. Также мы покажем, как можно управлять клипами при помощи кнопок с непрерывной обратной связью, познакомим вас со способами рисования во Flash. К концу урока мы с вами создадим простенькое приложение для рисования, а также динамически генерируемый прокручиваемый список.
Ключевые слова: создание кнопок, обратная связь, MovieClip, attachMovie, массивы объектов, ActionScript, вызов метода, ball, порядок наложения, attachment, потомок, связывание, export, identifier, converter, symbol, i-frame, paint, дублирование клипов, out-of-the-box, список, Actions, background, masking, scroll, Graphics, динамическое текстовое поле, массив, функция, позиционирование, ПО, значение, переменная, тело цикла, цикла, поле, скрипт, полоса прокрутки, стандартное решение, пользователь, flash, файл, кадр, координаты, значение переменной, элемент списка, параметр, directed, условные операторы, six-speed, высота, грани, условное выражение, arrow, указатель, градиент, курсор, позиция курсора, рабочий стол, приложение, Canvas, icon, controller, Windows, holder, встроенная функция, мышь, вызов функции, контур, градиентная заливка, путь, синтаксис, linearization, radial, ratio, matrix, объект, swapDepth, swapping, dragging, DROP, Корзина, место, операторы цикла, расстояние, создание строки, запуск процесса, аргумент, выражение, системный ресурс, clear, нумерация, print
Внимание! Для работы с этим уроком необходимы учебные файлы, которые Вы можете загрузить здесь.

Что будет изучаться

В этом уроке:

  • Построение прокручиваемого списка
  • Дублирование и присоединение экземпляров клипов
  • Создание кнопок с непрерывной обратной связью для перемещения экземпляра клипа
  • Создание пустых экземпляров клипов динамически
  • Рисование линий и закраска фигур динамически
  • Динамическое изменение порядка наложения экземпляров клипов
  • Программирование перетаскивания мышью
  • Удаление экземпляров клипов динамически

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

Время выполнения

На выполнение этого урока требуется примерно один час.

Файлы урока

Файлы-носители:

Нет

Стартовые файлы:

Lesson14/Assets/scrollingList1.fla
Lesson14/Assets/draw1.fla

Законченные проекты:

scrollingList3.fla
draw5.fla

Создание экземпляров клипов динамически

Для динамического создания экземпляра фильма-символа предназначены три метода объекта MovieClip:

  • duplicateMovieClip(): C помощью этого метода можно создать дубликат (новый экземпляр) существующего на сцене экземпляра фильма-символа.
  • attachMovie(): Этот метод создает на сцене новый экземпляр фильма-символа, имеющегося в библиотеке.
  • createEmptyMovieClip(): Этот метод создает пустой экземпляр фильма-символа – то есть не содержащий ни данных, ни графических материалов.

Каждый из этих методов мы с вами применим в ходе выполнения упражнений этого урока.

duplicateMovieClip()

Мы уже познакомили вас с этим методом в Уроке 10 – Автоматизация скриптов с помощью циклов, однако сделали это бегло, не вдаваясь в детали. Теперь, наконец, вы узнаете все об этом мощном методе!

Метод duplicateMovieClip() служит для Flash указанием создать дубликат имеющегося на сцене экземпляра фильма-символа, дав ему новое имя. Если указанный экземпляр клипа на сцене не присутствует (находится в одном из предыдущих или последующих кадров), то Flash не сможет дублировать его. Другое ограничение состоит в том, что дубликат может быть создан только на том же самом монтажном столе, где находится оригинал. Для динамического создания экземпляра клипа на любом монтажном столе следует применять метод attachMovie() – мы еще поговорим о нем в этом уроке.

Создаваемый дубликат наследует все физические свойства, которые имел оригинал на момент дублирования.

Дубликат фильма-символа наследует следующие свойства оригинала:

  • Позиция
  • Масштаб
  • Прозрачность
  • Угол поворота
  • Цвет
  • Обработчики событий, присоединенные к экземпляру клипа

Дубликат фильма-символа не наследует:

  • Переменные, массивы, объекты
  • Имя
  • "Видимость"
  • Номер текущего кадра

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

Синтаксис дублирования экземпляра фильма-символа таков:

myClip.duplicateMovieClip(имя, глубина, объект);

Эта строка ActionScript начинается с указания имени (с адресацией) фильма-символа, который следует дублировать, после чего следует вызов метода duplicateMovieClip() объекта MovieClip. В результате создается новый экземпляр, именем которого будет значение параметра имя, на глубине глубина. Параметр объект – не обязательный. Пример:

name = "ball2";
depth = 100;
ball.duplicateMovieClip(name, depth);

Эти три строки создают дубликат экземпляра клипа ball; экземпляр-дубликат получает имя ball2 и располагается на глубине 100.

Примечание Говоря здесь о глубине ( depth ), мы подразумеваем порядок наложения экземпляров клипов на монтажном столе. Во Flash, если два экземпляра клипов перекрываются, верхним будет тот, который имеет большее значение глубины. Каждый экземпляр фильма-символа имеет уникальное значение глубины, определяющее его положение по отношению к другим объектам на сцене. При дублировании новому экземпляру клипа присваивается значение глубины – любое положительное число. Чем больше это число, тем выше "над сценой" будет расположен экземпляр. Вы, возможно, даже не подозревали, что все экземпляры фильмов-символов, которые вы помещаете на монтажный стол в процессе разработки проекта, тоже автоматически получают глубину, при этом значения глубин начинаются с отрицательного числа -16384. Это означает, что динамически созданный экземпляр, помещенный на глубину 1, перекроет все, что было помещено на сцену вручную.

Каждый монтажный стол в фильме имеет диапазон глубин от -16384 до 1048575, причем все отсчеты глубин ведутся относительно главного монтажного стола фильма. Иными словами, некий "экземпляр 1" может содержать дочерние экземпляры, расположенные на его монтажном столе на глубинах от -16384 до 1048575. Но если на основном монтажном столе "экземпляр 1" находится под "экземпляром 2", то всякий, даже самый верхний дочерний экземпляр "экземпляра 1" окажется ниже самого нижнего из дочерних экземпляров "экземпляра 2".


На каждой глубине в каждый момент времени может располагаться только один экземпляр фильма-символа. Попытавшись дублировать экземпляр клипа на глубину, где уже имеется другой экземпляр, вы тем самым уничтожите этот второй экземпляр.

Итак, каждый монтажный стол имеет 1064960 уровней глубины (от -16384 до 1048575). При этом глубины разных монтажных столов никоим образом не пересекаются между собой.

Третий параметр метода duplicateMovieClip(), параметр объект, необязателен, но отнюдь не бесполезен. Свойства объекта, указанного в качестве этого параметра, станут элементами данных нового дубликата клипа. Если параметр опущен, он игнорируется. Расширим немного предыдущий пример:

myObject = new Object();
myObject.ballColor = "red";
name = "ball2";
depth = 100;
ball.duplicateMovieClip(name, depth, myObject);

Новый экземпляр-дубликат ball2 будет содержать все свойства объекта myObject. В данном случае в новом экземпляре будет создана переменная ballColor со значением "red".

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

ball.duplicateMovieClip(name, depth, ball);
Салтанат Бектегенова
Салтанат Бектегенова

Дострочное пересдача экзамена

 

Евгений Стародубцев
Евгений Стародубцев

Вот задание:

7. Открыв панель Действия (Actions) и установив ее в Экспертный режим(Expert Mode), выделите кадр 1 слоя Actions и введите следующий скрипт:

Евгения Дегтяренко
Евгения Дегтяренко
Украина, Запорожье
Анна Елисеева
Анна Елисеева
Россия, Великий Новгород, Ногородский государственный университет имени Ярослава Мудрого, 2003