Программные маски

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

Маскирующие слои — это мощный инструмент, позволяющий реализовывать многие интересные эффекты. Однако созданные при помощи их маски имеют и существенные недостатки:

• Невозможно отключать или активизировать маскирование в процессе работы фильма. Объекты маскируемого слоя будут скрыты все время существования соответствующей временной шкалы.

• Невозможно динамически менять объект, применяемый в качестве маски.

• Достаточно проблематично использовать в качестве масок одновременно множество объектов.

Во Flash 6 появился метод setMask(), позволяющий динамически создавать маски и лишенный характерных для использования маскирующих слоев недостатков.

Его синтаксис:
masked.setMask(mask),
где:

• masked — маскируемый клип;
• mask — клип, который должен быть использован в качестве маски.

Метод setMask() создает на основании объектов клипа mask своеобразные «окошки», через которые просматриваются располагающиеся под ними элементы клипа masked.


Фрагменты, не находящиеся под маской, попросту не отображаются. Чтобы понять, как работает метод setMask(), создайте два клипа в виде кружков, назовите их mov1 и mov2 и наберите следующий код:

mov1.setMask(mov2); // Маскируем клип mov1 маской, созданной
// на основании mov2
mov2.startDrag(true); // Делаем маску перемещаемой

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

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

При повторном использовании метода setMask() по отношению к маскируемому клипу маскирующий его клип будет сменен.


Клип, выступавший до этого в роли маски, будет отображен в обычном режиме. Аналогично, если клип повторно применить в качестве параметра метода setMask(), то маскируемый им клип будет сменен. Маскировавшийся же ранее клип станет видимым.

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

Метод setMask() имеет приоритет над маскирующими слоями. Это означает, что если он будет применен к клипам, размешенным на них, порядок маскирования может быть изменен. Например, если клип А, находящийся на маскирующем слое, исполняет роль маски по отношению к клипу В маскируемого слоя, то после интерпретации строчки «A.setMask(B)» уже клип В будет маскировать клип А.

Выступать в качестве масок и маскироваться могут любые объекты, которые потенциально можно вложить в клип: фигуры статичной графики, клипы, текстовые поля и кнопки.


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

Обойти описанные трудности можно, встроив в фильм шрифт, используемый в текстовом поле.

Первые подверсии 6-го flash-плейера не поддерживали маскирования системных (device) шрифтов. Однако в начале 2003 года подобная возможность появилась. Впрочем, использовать ее нужно крайне осторожно, предварительно убедившись, что на клиентской машине установлена нужная подверсия плейера (6.0r47 и выше).

Чтобы прекратить маскирование клипа, метод setMask() должен быть задействован повторно с параметром null;

clip.setMask(null); // clip будет отображен в обычном режиме

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Виртуальные слои клипов
Задание формулы цвета
Имена экземпляров клипов
Импорт внешних фильмов и изображений
Клипы как носители кода

Вернуться в раздел: Action Script / 10. Клипы