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

Адресация

< Урок 2 || Урок 3: 1234567 || Урок 4 >

Обращение к основному монтажному столу

Основной (или корневой – root) фильм представляет собой главный монтажный стол SWF-файла. Все прочие монтажные столы, присутствующие в проекте, находятся, так или иначе, внутри него.

Обратиться к основному монтажному столу очень просто. Синтаксис следующий:

_root.play();

Этот скрипт можно поместить на любой монтажный стол в составе проекта, в любом случае он вызовет воспроизведение основного монтажного стола.

Примечание Фильм, загружаемый в уровень, также рассматривается как основной монтажный стол. Такие фильмы будут рассмотрены в разделе "Обращение к фильмам в уровнях".

  1. Откройте файл rootTarget1.fla из папки Lesson03/Assets.

Этот файл очень похож на тот, с которым мы только что работали – за исключением двух кнопок, расположенных в правом нижнем углу сцены. Мы запрограммируем их так, чтобы при нажатии на них изменялся размер сцены – основного монтажного стола. Затем мы скопируем эти кнопки, поместим их внутрь наших экземпляров фильма-символа, и – не меняя адресации в скрипте – продемонстрируем, что _root указывает на основной монтажный стол из любого другого монтажного стола проекта.

  1. Открыв панель Действия, выделите кнопку со знаком "минус" и введите следующий скрипт:
on (release) {
  _root._xscale = _root._xscale - 10;
  _root._yscale = _root._yscale - 10;
}

После того, как эта кнопка будет нажата и отпущена, размер основного монтажного стола должен уменьшиться на 10 процентов. Одно замечание: поскольку кнопка, к которой присоединен этот скрипт, находится на основном монтажном столе, и на тот же монтажный стол воздействует скрипт, адресация в данном случае не требуется. Мы просто использовали здесь абсолютный путь, чтобы продемонстрировать его универсальность.

  1. Выделите кнопку со знаком "плюс" и поместите в панель Действия такой скрипт:
on (release) {
  _root._xscale = _root._xscale + 10;
  _root._yscale = _root._yscale + 10;
}

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

  1. Выделите обе кнопки (вместе со значками на них) и скопируйте их. Двойным щелчком на одном из экземпляров фильма-символа откройте его для редактирования на месте. Вставьте скопированные кнопки в слой Change root buttons на монтажном столе фильма-символа и расположите их прямо под имеющимся изображением.

Хотя копии кнопок находятся на монтажном столе фильма-символа, присоединенные к ним действия попрежнему направлены на основной монтажный стол (SWF) благодаря адресации _root.

  1. Протестируйте проект командой Управление > Проверить фильм (Control > Test Movie).

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

  1. Закройте среду тестирования и вернитесь в среду разработки. Сохраните проект как rootTarget2.fla.

Мы будем работать с этим же проектом (слегка модифицированным) в следующем упражнении.

Обращение к родительскому фильму

Flash позволяет вставлять монтажные столы один в другой – на самом-то деле вы делаете это, не задумываясь: каждый раз, когда помещаете на основной монтажный стол экземпляр фильма-символа. Мало того – любой фильм-символ может содержать другие фильмы-символы, и так далее, на много уровней в глубину. Помещая один монтажный стол внутрь другого, мы тем самым создаем между монтажными столами отношения "родитель-потомок". Родительским является тот монтажный стол, который содержит другой фильм; потомок – это фильм, который содержится внутри другого монтажного стола.

Фильм-потомок может передать родителю указание сделать что-либо (не то, что в реальной жизни!), используя следующий синтаксис:

_parent.play();

Чтобы лучше понять, как это работает, вообразите, что вы поместили экземпляр фильма-символа с именем myMovieClip на основной монтажный стол, а затем поместили другой экземпляр фильма-символа, с именем myOtherMovieClip, внутрь myMovieClip. Абсолютный путь при такой структуре выглядел бы так:

_root.myMovieClip.myOtherMovieClip

Если вам понадобилось поместить на монтажный стол myOtherMovieClip действие, вызывающее переход монтажного стола myMovieClip к кадру 50, следует использовать такой синтаксис:

_parent.gotoAndPlay(50);

Если точно такое же действие поместить на монтажный стол myMovieClip, то оно приведет к тому, что к кадру 50 перейдет основной монтажный стол, ведь в данном случае родителем является он.

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

  1. Откройте файл parentTarget1.fla из папки Lesson03/Assets.

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

  1. Двойным щелчком на одном из экземпляров фильма-символа откройте его для редактирования на месте. Выделите слой Child Clip, и, открыв панель Библиотека (Library), перетащите на сцену фильм-символ Hatfield Child, поместив его правее основного изображения в текущем фильме-символе.

Вы только что поместили один фильм-символ внутрь другого, создав между ними отношения родитель-потомок: экземпляр, который вы перетащили на сцену, становится потомком того монтажного стола, на который он помещен. Монтажный стол потомка точно такой же, как у родителя. Он содержит невидимую кнопку, при нажатии которой экземпляр становится перетаскиваемым и у него появляется контур для текста. Текстовое поле в этом контуре тоже имеет имя balloon – как у фильма-родителя.

  1. Открыв панель Действия, выделите экземпляр-потомок и введите такой скрипт:
onClipEvent (load) {
	this.words = _parent.words + "'s kid";
}

При загрузке этого экземпляра фильма-символа – а это произойдет в тот же момент, когда загрузится его родитель, поскольку он находится в кадре 1 основного монтажного стола – родитель передаст имеющиеся у него данные потомку. Приведенное выше действие можно расшифровать так: "Присвоить переменной этого монтажного стола words значение, равное значению переменной words родительского монтажного стола плюс "’s kid". Так, если у родителя значение words было "I’m Derek", тогда у потомка words будет иметь значение "I’m Derek’s kid". Давайте это проверим.

  1. Выполните команду Управление > Проверить фильм (Control > Test Movie) для просмотра проекта на данной стадии.

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


Нажмите и потащите один из фильмов-родителей, и вы увидите, что его потомок перемещается вместе с ним. То же самое наблюдается при вращении: потомок вращается вместе с родительским фильмом. Данные, которыми располагает потомок, не зависят от родителя: данные одного монтажного стола не влияют на данные другого, если только мы специально не запрограммируем такое влияние. Что же касается графики – тут история другая. Динамическое изменение размера, позиции, прозрачности и прочих графических параметров родительского фильма-символа автоматически отражаются на его потомке; если же вы захотите, чтобы клип-потомок повлиял на родителя, это также придется специально запрограммировать. Подведем итог: вы можете запрограммировать группу монтажных столов для совместных, координированных действий, при этом они останутся независимыми от других групп в проекте.

Давайте посмотрим, как еще можно применить отношения родитель-потомок между монтажными столами.

  1. Закрыв окно тестирования, вернитесь в среду разработки. В панели Библиотека (Library) сделайте двойной щелчок на фильме-символе Swirl Clip.

Flash перейдет в режим редактирования символа, и вы увидите монтажный стол Swirl Clip. В этом клипе нет никакой графики, только четыре пустых ключевых кадра, в которые мы сейчас поместим скрипты.

  1. Откройте панель Действия, и, выделяя поочередно кадры 1, 2, 3 и 4, добавьте следующие скрипты:

В кадр 1 поместите:

_parent._x = _parent._x - 1;
_parent._xscale = _parent._xscale - 1;

В кадр 2 поместите:

_parent._y = _parent._y - 1;
_parent._yscale = _parent._yscale - 1;

В кадр 3 поместите:

_parent._x = _parent._x + 2;
_parent._xscale = _parent._xscale -1;

В кадр 4 поместите:

_parent._y = _parent._y + 2;
_parent._yscale = _parent._yscale -1;

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

  1. Вернитесь на основной монтажный стол. Выделив слой Swirl Clip, перетащите экземпляр Swirl Clip из Библиотеки на сцену. Выполните команду Управление > Проверить фильм (Control > Test Movie).

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

  1. Закройте тестовое окно, вернувшись в среду разработки. Выделите на основном монтажном столе экземпляр Swirl Clip и выполните команду Редактировать > Вырезать (Edit > Cut). Сделайте двойной щелчок на одном из экземпляров фильма-символа Hatfield, чтобы перейти на его монтажный стол. Выделив слой Swirl Clip, выполните команду Редактировать > Вставить (Edit > Paste) – Swirl Clip будет вставлен на этот монтажный стол. Выполните команду Управление > Проверить фильм (Control > Test Movie) для просмотра проекта.

Как видите, теперь основной монтажный стол неподвижен, зато уменьшаются по спирали все экземпляры фильма-символа Hatfield. Все потому, что экземпляр Swirl Clip был перемещен – теперь вместо основного монтажного стола его родителем стал фильм-символ Hatfield. Заставить фильм-символ двигаться по спирали, уменьшаясь – как вы понимаете, далеко не единственное применение подобной "конструкции". Эту идею можно применить также при программировании поведения при перетаскивании.

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

_parent._parent._alpha = 50

Это позволяет программировать еще более сложные модели поведения.

  1. Закрыв окно тестирования, вернитесь в среду разработки. Сохраните свою работу как parentTarget2.fla.

Это упражнение завершено.

< Урок 2 || Урок 3: 1234567 || Урок 4 >
Салтанат Бектегенова
Салтанат Бектегенова

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

 

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

Вот задание:

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

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