Дострочное пересдача экзамена
|
Динамическое управление фильмами-символами
Что будет изучаться
В этом уроке:
- Построение прокручиваемого списка
- Дублирование и присоединение экземпляров клипов
- Создание кнопок с непрерывной обратной связью для перемещения экземпляра клипа
- Создание пустых экземпляров клипов динамически
- Рисование линий и закраска фигур динамически
- Динамическое изменение порядка наложения экземпляров клипов
- Программирование перетаскивания мышью
- Удаление экземпляров клипов динамически
Приложение для рисования – один из проектов, которые мы создадим в этом уроке в ходе изучения различных способов динамического управления клипами.
Время выполнения
На выполнение этого урока требуется примерно один час.
Файлы урока
Файлы-носители:
Нет
Стартовые файлы:
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);