Московский физико-технический институт
Опубликован: 23.12.2005 | Доступ: свободный | Студентов: 2868 / 253 | Оценка: 4.61 / 4.44 | Длительность: 27:18:00
ISBN: 978-5-9556-0051-2
Лекция 3:

Клипы и ролики. Специальные возможности языка

Управление вертикальным порядком при редактировании

Вопросы вертикального порядка (который также называют z-order или z-порядок ) весьма важны, и поэтому в настоящей главе мы обсудим их дважды. Вначале мы рассмотрим частный случай: предположим, что никакие действия наподобие динамической загрузки клипов или дублирования клипов (с помощью ActionScript), а также подгрузки готовых роликов нами предприниматься не будут. То есть, обсудим все вопросы, касающиеся z-порядка, возникающего при ручном (не программном) манипулировании клипами и графическими примитивами.

Итак, в первую очередь z-порядок естественным образом возникает за счет вложения клипов друг в друга. Если не предпринимать специальных усилий, то все экземпляры клипов, вложенных в данный, будут находиться на переднем плане по сравнению с графическими примитивами, расположенными в этом клипе. При этом сами экземпляры будут расположены так: выше те, которые вы вытащили на сцену последними. (Если ничего больше с порядком не делать, то это порождает естественный z-order расположения клипов разной вложенности). Однако порядок следования экземпляров вы можете легко изменить. Выделите нужный клип и выберите пункт главного меню: Modify / Arrange - в появившемся субменю вы найдете команды, позволяющие переместить клип на одну позицию вверх или вниз, или же на вершину (или, наоборот, на самое дно) z-порядка внутри данного слоя данного клипа. О слоях мы скажем чуть позже, а пока обсудим ситуацию с графическими примитивами. Можно ли управлять их z-порядком таким же способом, какой только что был описан для клипов? Оказывается, можно, но для этого примитивы надо сначала сгруппировать. Выделяете черной стрелкой (удерживая нажатой клавишу Shift ) все необходимые примитивы, потом выбираете Ctrl+G (или из главного меню Modify / Group ), и получаете группу, с которой описанный только что для клипов способ упорядочения тоже работает. Правда, вы уже не сможете редактировать графические примитивы, входящие в группу - пока не разгруппируете их. В этом смысле клип гораздо удобнее группы. Кстати, в группу могут входить и экземпляры клипов.

Однако тот способ работы с z-порядком, который мы только что описали, употребляется нечасто. Гораздо чаще употребляются слои. Мы уже говорили в первой главе о том, как создавать слои.


Слева от линейки времени находится информация о слоях. (Кстати, каждому слою в линейке времени соответствует отдельная строка - то есть разные объекты, присутствующие в различных слоях, могут появляться и исчезать, а также участвовать в анимации независимо друг от друга. Раздельное появление и исчезновение можно, впрочем, настроить и без слоев, а вот различные приемы анимации по отношению к разным объектам - нет. Но про анимацию мы в данной книге не пишем из принципиальных соображений. Если вы пытались поднять - обеими руками - книгу, в которой подробно описаны и программирование и анимация на Флэш МХ, вы нас поймете.) Вы можете создавать слои при помощи кнопки в левом нижнем углу под списком слоев. Также можно объединять несколько слоев в папку (это ничего не значит, просто для удобства) - соответствующая иконка расположена через одну от иконки создания слоев. Также любой слой может быть переименован, а еще - скрыт (только при редактировании - чтобы было видно нижние слои) или заблокирован (чтобы ничего случайно не испортить). Для выполнения последних двух действий нужно кликнуть на точку, расположенную в нужном слое под значком глаза или замочка (эти значки - в правой верхней части области управления слоями). Наконец, щелкнув на один из цветных квадратиков (расположены рядом с точками для скрытия / открывания слоев и запрета / разрешения их редактирования) вы переведете соответствующий слой в контурный режим (все объекты данного слоя будут показаны контурами соответствующего цвета).

Итак, самый распространенный способ управления z-порядком при редактировании - это выделение слоев внутри данного клипа. Слои можно легко перетаскивать и тем самым менять их z-порядок. Можно даже заставить какой-то слой временно не показываться - не только в процессе редактирования, но и в runtime. Для этого надо выделить слой, щелкнуть на нем правой кнопкой мыши и выбрать пункт контекстного меню Guide (объяснять, почему называние такое, мы не будем, скажем только, что дано оно по аналогии с некоей специфической анимационной возможностью). Каждый кадр каждого слоя можно редактировать независимо (на редактируемом слое рядом с его названием появляется изображение карандаша). Можно даже независимо прикрепить код к кадрам из разных слоев (выполняется код, начиная с верхних слоев). Но, конечно, разыскивать потом код по многочисленным слоям - это не дело. Так что лучше с кодом обходиться аккуратно и помещать его в самый верхний (возможно, в остальном - пустой) слой, чтобы легче было найти любой фрагмент кода. Осталось заметить, что, в отличие от вложенных клипов, разные слои одного и того же клипа всегда демонстрируются синхронно.

Функции управления порядком следования кадров

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

Итак, кадры в каждом клипе ролика переключаются практически одновременно, по сигналу от таймера, который сообщает, что время, отведенное на показ кадра, истекло. (Частота кадров определяется частотой кадров корневого клипа _level 0 - чуть позже мы объясним, что значит _level 0 ; для большинства случаев это то же самое, что и _root . Установить частоту кадров можно из пункта главного меню Modify / Document.) Если к тому моменту, когда уже пора показывать следующий кадр, завершились еще не все расчеты или перерисовки в предыдущем, следующему кадру придется подождать. Частота кадров может оказаться ниже, чем задано в соответствующем пункте меню, но кадры никогда не теряются. Еще один важный момент: если какой-то клип впервые появился в кадре номер n, то, независимо от этого номера, сам клип начнет проигрываться со своего первого кадра.

Функции управления порядком кадра, фактически, производят два типа действий (в различных комбинациях). Они дают команду перейти с одного кадра на другой и устанавливают режим проигрывания "остановлен" или "проигрывается". Когда клип находится в режиме "проигрывается", при наступлении времени переключения кадров он переходит на следующий кадр и выполняет код, который в нем записан. (Следующим кадром после самого последнего кадра корневого клипа будет снова первый, если ролик играется в циклическом режиме - см. далее; если же ролик не зациклен, то корневой клип перейдет в режим "остановлен". Клипы, не являющиеся корневыми, доиграв до конца, в любом случае зацикливаются, если этому не препятствуют управляющие функции.) Как мы уже говорили, дочерние клипы типа MovieClip проигрываются совершенно независимо от родительских.

Итак, перечислим функции, которые управляют порядком кадров во Флэш МХ. А после этого разберем алгоритм перехода между кадрами более детально. (Из приведенного ниже списка вы увидите, что многие функции предназначены, не только для переключения между кадрами, но и между сценами. Что такое сцены и как с ними работать, будет описано чуть дальше).

  • stop() - устанавливает текущим состоянием клипа состояние "остановленное". Если речь идет о корневом клипе, то, в случае отсутствия явных инструкций (когда в последнем кадре не стоит stop или gotoAndPlay ), ролик либо останавливается в конце проигрывания, либо зацикливается (в зависимости от внешних настроек). Если вы просматриваете ролик прямо в среде Флэш МХ (нажав Ctrl+Enter ), то установить или убрать зацикливание можно с помощью пункта меню Control / Loop - но нужный пункт есть только в меню проигрывателя, а не редактора. Если же вы просматриваете ролик в браузере, то зацикливание произойдет или нет в зависимости от установок публикации (которые отражаются в html; разумеется, нужные параметры могут быть прописаны в html и вручную - см. главу 1, а также главу 13, раздел о html-шаблонах). Соответствующее поведение можно настроить в диалоге Publish Settings (вызывается при выборе пункта главного меню File / Publish Settings ), в закладке HTML. Если вы не хотите, чтобы поведение ролика зависело от внешних настоек, а зацикливать (при помощи явного указания, на какой кадр переходить в конце) ролик вы тоже не планируете, поставьте в последнем кадре stop(). Не делать этого можно лишь тогда, когда корневой клип содержит единственный кадр (а вся функциональность размещена, к примеру, в дочерних клипах ).
  • play() - устанавливает текущим состоянием клипа состояние "проигрывается".
  • gotoAndStop(scene, frame) - переводит корневой клип на указанный кадр указанной сцены. Сцена задается именем (строкой), а кадр - номером или меткой (в последнем случае - также строкой). После перехода устанавливает корневому клипу режим "остановлен". При применении для не корневого клипа параметр scene игнорируется.
  • gotoAndStop(frame) - переводит произвольный клип на указанный кадр ( кадр задается так же, как и в предыдущем случае). После перехода устанавливает режим "остановлен".
  • gotoAndPlay(scene, frame) - переводит корневой клип на указанный кадр указанной сцены. Сцена задается именем (строкой), а кадр - номером или меткой (в последнем случае - также строкой). После перехода устанавливает корневому клипу режим "проигрывается". При применении для не корневого клипа параметр scene игнорируется.
  • gotoAndPlay(frame) - переводит произвольный клип на указанный кадр ( кадр задается так же, как и в предыдущем случае). После перехода устанавливает режим "проигрывается".
  • nextFrame() - устанавливает текущим кадром следующий по порядку, а текущим состоянием клипа - состояние "остановлен".
  • nextScene() - устанавливает текущим кадром первый кадр на следующей по порядку сцене, а текущим состоянием клипа - состояние "остановлен".
  • prevFrame() - устанавливает текущим кадром предыдущий по порядку, а текущим состоянием клипа - состояние "остановлен".
  • prevScene() - устанавливает текущим кадром - первый кадр на предыдущей по порядку сцене, а текущим состоянием клипа - состояние "остановлен".

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