Дострочное пересдача экзамена
|
Адресация
Обращение к основному монтажному столу
Основной (или корневой – root) фильм представляет собой главный монтажный стол SWF-файла. Все прочие монтажные столы, присутствующие в проекте, находятся, так или иначе, внутри него.
Обратиться к основному монтажному столу очень просто. Синтаксис следующий:
_root.play();
Этот скрипт можно поместить на любой монтажный стол в составе проекта, в любом случае он вызовет воспроизведение основного монтажного стола.
Примечание Фильм, загружаемый в уровень, также рассматривается как основной монтажный стол. Такие фильмы будут рассмотрены в разделе "Обращение к фильмам в уровнях".
- Откройте файл rootTarget1.fla из папки Lesson03/Assets.
Этот файл очень похож на тот, с которым мы только что работали – за исключением двух кнопок, расположенных в правом нижнем углу сцены. Мы запрограммируем их так, чтобы при нажатии на них изменялся размер сцены – основного монтажного стола. Затем мы скопируем эти кнопки, поместим их внутрь наших экземпляров фильма-символа, и – не меняя адресации в скрипте – продемонстрируем, что _root указывает на основной монтажный стол из любого другого монтажного стола проекта.
- Открыв панель Действия, выделите кнопку со знаком "минус" и введите следующий скрипт:
on (release) { _root._xscale = _root._xscale - 10; _root._yscale = _root._yscale - 10; }
После того, как эта кнопка будет нажата и отпущена, размер основного монтажного стола должен уменьшиться на 10 процентов. Одно замечание: поскольку кнопка, к которой присоединен этот скрипт, находится на основном монтажном столе, и на тот же монтажный стол воздействует скрипт, адресация в данном случае не требуется. Мы просто использовали здесь абсолютный путь, чтобы продемонстрировать его универсальность.
- Выделите кнопку со знаком "плюс" и поместите в панель Действия такой скрипт:
on (release) { _root._xscale = _root._xscale + 10; _root._yscale = _root._yscale + 10; }
Скрипт похож на предыдущий, за исключением того, что здесь размер основного монтажного стола будет увеличиваться на 10 процентов.
- Выделите обе кнопки (вместе со значками на них) и скопируйте их. Двойным щелчком на одном из экземпляров фильма-символа откройте его для редактирования на месте. Вставьте скопированные кнопки в слой Change root buttons на монтажном столе фильма-символа и расположите их прямо под имеющимся изображением.
Хотя копии кнопок находятся на монтажном столе фильма-символа, присоединенные к ним действия попрежнему направлены на основной монтажный стол (SWF) благодаря адресации _root.
- Протестируйте проект командой Управление > Проверить фильм (Control > Test Movie).
Первое, на что вы обратите внимание – это то, что у каждого экземпляра нашего фильма-символа имеются кнопки. Кроме того, кнопки остались и на своем первоначальном месте – в правом нижнем углу сцены. Щелкнув на любой из кнопок, вы получите одинаковый результат: изменение размера основного монтажного стола. При этом имеет место интересная вещь: вместе с ним изменяются размеры и прочих монтажных столов. Так происходит благодаря отношению типа "родитель-потомок" между основным монтажным столом и расположенными на нем экземплярами фильмов-символов – об этих отношениях как раз и пойдет речь в следующем упражнении.
- Закройте среду тестирования и вернитесь в среду разработки. Сохраните проект как rootTarget2.fla.
Мы будем работать с этим же проектом (слегка модифицированным) в следующем упражнении.
Обращение к родительскому фильму
Flash позволяет вставлять монтажные столы один в другой – на самом-то деле вы делаете это, не задумываясь: каждый раз, когда помещаете на основной монтажный стол экземпляр фильма-символа. Мало того – любой фильм-символ может содержать другие фильмы-символы, и так далее, на много уровней в глубину. Помещая один монтажный стол внутрь другого, мы тем самым создаем между монтажными столами отношения "родитель-потомок". Родительским является тот монтажный стол, который содержит другой фильм; потомок – это фильм, который содержится внутри другого монтажного стола.
Фильм-потомок может передать родителю указание сделать что-либо (не то, что в реальной жизни!), используя следующий синтаксис:
_parent.play();
Чтобы лучше понять, как это работает, вообразите, что вы поместили экземпляр фильма-символа с именем myMovieClip на основной монтажный стол, а затем поместили другой экземпляр фильма-символа, с именем myOtherMovieClip, внутрь myMovieClip. Абсолютный путь при такой структуре выглядел бы так:
_root.myMovieClip.myOtherMovieClip
Если вам понадобилось поместить на монтажный стол myOtherMovieClip действие, вызывающее переход монтажного стола myMovieClip к кадру 50, следует использовать такой синтаксис:
_parent.gotoAndPlay(50);
Если точно такое же действие поместить на монтажный стол myMovieClip, то оно приведет к тому, что к кадру 50 перейдет основной монтажный стол, ведь в данном случае родителем является он.
В следующем упражнении мы будем помещать одни фильмы-символы внутрь других, создавая отношения родитель-потомок. В проекте такие отношения могут быть весьма разветвленными, что позволяет оснастить фильм большими интерактивными возможностями. Мы с вами создадим также несложный клип-эффект, который можно перетащить на любой монтажный стол, заставив последний что-либо сделать.
- Откройте файл parentTarget1.fla из папки Lesson03/Assets.
Единственное отличие этого файла от того, с которым мы работали в предыдущем упражнении – то, что убраны кнопки, выполнявшие масштабирование основного монтажного стола; здесь они нам не нужны.
- Двойным щелчком на одном из экземпляров фильма-символа откройте его для редактирования на месте. Выделите слой Child Clip, и, открыв панель Библиотека (Library), перетащите на сцену фильм-символ Hatfield Child, поместив его правее основного изображения в текущем фильме-символе.
Вы только что поместили один фильм-символ внутрь другого, создав между ними отношения родитель-потомок: экземпляр, который вы перетащили на сцену, становится потомком того монтажного стола, на который он помещен. Монтажный стол потомка точно такой же, как у родителя. Он содержит невидимую кнопку, при нажатии которой экземпляр становится перетаскиваемым и у него появляется контур для текста. Текстовое поле в этом контуре тоже имеет имя balloon – как у фильма-родителя.
- Открыв панель Действия, выделите экземпляр-потомок и введите такой скрипт:
onClipEvent (load) { this.words = _parent.words + "'s kid"; }
При загрузке этого экземпляра фильма-символа – а это произойдет в тот же момент, когда загрузится его родитель, поскольку он находится в кадре 1 основного монтажного стола – родитель передаст имеющиеся у него данные потомку. Приведенное выше действие можно расшифровать так: "Присвоить переменной этого монтажного стола words значение, равное значению переменной words родительского монтажного стола плюс "’s kid". Так, если у родителя значение words было "I’m Derek", тогда у потомка words будет иметь значение "I’m Derek’s kid". Давайте это проверим.
- Выполните команду Управление > Проверить фильм (Control > Test Movie) для просмотра проекта на данной стадии.
Вы сразу же заметите, что каждый из наших экземпляров теперь получил дочерний фильм-символ. Если вы нажмете кнопку мыши на одном из фильмов-потомков, он станет перетаскиваемым и у него появится контур, содержащий сообщение о том, чьим "ребенком" он является. Это как раз то, что мы запрограммировали на предыдущем шаге.
Нажмите и потащите один из фильмов-родителей, и вы увидите, что его потомок перемещается вместе с ним. То же самое наблюдается при вращении: потомок вращается вместе с родительским фильмом. Данные, которыми располагает потомок, не зависят от родителя: данные одного монтажного стола не влияют на данные другого, если только мы специально не запрограммируем такое влияние. Что же касается графики – тут история другая. Динамическое изменение размера, позиции, прозрачности и прочих графических параметров родительского фильма-символа автоматически отражаются на его потомке; если же вы захотите, чтобы клип-потомок повлиял на родителя, это также придется специально запрограммировать. Подведем итог: вы можете запрограммировать группу монтажных столов для совместных, координированных действий, при этом они останутся независимыми от других групп в проекте.
Давайте посмотрим, как еще можно применить отношения родитель-потомок между монтажными столами.
- Закрыв окно тестирования, вернитесь в среду разработки. В панели Библиотека (Library) сделайте двойной щелчок на фильме-символе Swirl Clip.
Flash перейдет в режим редактирования символа, и вы увидите монтажный стол Swirl Clip. В этом клипе нет никакой графики, только четыре пустых ключевых кадра, в которые мы сейчас поместим скрипты.
- Откройте панель Действия, и, выделяя поочередно кадры 1, 2, 3 и 4, добавьте следующие скрипты:
_parent._x = _parent._x - 1; _parent._xscale = _parent._xscale - 1;
_parent._y = _parent._y - 1; _parent._yscale = _parent._yscale - 1;
_parent._x = _parent._x + 2; _parent._xscale = _parent._xscale -1;
_parent._y = _parent._y + 2; _parent._yscale = _parent._yscale -1;
В данном случае для нас не особенно важна структура этих скриптов; что действительно важно, так это то, что все действия адресуются родителю, поэтому, когда этот фильм будет помещен на какой-либо монтажный стол, тот начнет двигаться по спирали, постепенно уменьшаясь. Давайте посмотрим, как это будет.
- Вернитесь на основной монтажный стол. Выделив слой Swirl Clip, перетащите экземпляр Swirl Clip из Библиотеки на сцену. Выполните команду Управление > Проверить фильм (Control > Test Movie).
Как только начнется воспроизведение, вы увидите, что основной монтажный стол, двигаясь по спирали, уменьшается в точку – этот эффект вызван экземпляром фильма-символа, который мы на него поместили. Этот эффект можно применить к любому другому монтажному столу, просто поместив на него экземпляр того же самого фильма-символа – этим мы сейчас и займемся.
- Закройте тестовое окно, вернувшись в среду разработки. Выделите на основном монтажном столе экземпляр Swirl Clip и выполните команду Редактировать > Вырезать (Edit > Cut). Сделайте двойной щелчок на одном из экземпляров фильма-символа Hatfield, чтобы перейти на его монтажный стол. Выделив слой Swirl Clip, выполните команду Редактировать > Вставить (Edit > Paste) – Swirl Clip будет вставлен на этот монтажный стол. Выполните команду Управление > Проверить фильм (Control > Test Movie) для просмотра проекта.
Как видите, теперь основной монтажный стол неподвижен, зато уменьшаются по спирали все экземпляры фильма-символа Hatfield. Все потому, что экземпляр Swirl Clip был перемещен – теперь вместо основного монтажного стола его родителем стал фильм-символ Hatfield. Заставить фильм-символ двигаться по спирали, уменьшаясь – как вы понимаете, далеко не единственное применение подобной "конструкции". Эту идею можно применить также при программировании поведения при перетаскивании.
В синтаксисе обращения к родителю можно создавать многоуровневые конструкции, например:
_parent._parent._alpha = 50
Это позволяет программировать еще более сложные модели поведения.
- Закрыв окно тестирования, вернитесь в среду разработки. Сохраните свою работу как parentTarget2.fla.
Это упражнение завершено.