|
Градиентная заливка, представляющая полосы цветов, переходящих друг в друга, до сих пор является самой сложной функцией программного интерфейса рисования. Если вы до сих пор этого не сделали, начните знакомство с градиентной заливкой с процедур ее создания вручную. Тогда вы лучше поймете, чего следует добиваться при работе с программным эквивалентом этой операции.
Для реализации градиентной заливки используются методы beginGradientFill() и endFill() класса MovieClip.
Примеры beginGradientFill():
myClip.beginGradientFill() - если есть разомкнутая траектория, замыкает ее с помощью линии и применяет заливку и замкнутой области. Заливка последующих замкнутых траекторий не выполняется.
myClip.beginGradientFill (undefined, colorArray, alphaArray, ratioArray, transformationMatrix) - если есть разомкнутая траектория, замыкает ее с помощью линии и применяет заливку и замкнутой области. Заливка последующих замкнутых траекторий не выполняется.
myClip.beginGradientFill ("linear"|"radial", colorArray, alphaArray, ratioArray, transformationMatrix) - если есть разомкнутая линия, замыкает ее с помощью линии и применяет заливку к замкнутой области. Выполняет линейную или градиентную (в зависимости от параметра) заливку последующих замкнутых траекторий, переходя от цвета к цвету, указанных в массиве (colorArray), с уровнями прозрачности, приведенными в массиве (alphaArray), коэффициентами, указанными в массиве (ratioArray), и преобразуемыми в соответствии с матрицей преобразования transformationMatrix.
Примеры endFill():
myClip.endFill() - завершает и защищает от последующих изменений заливку, созданную с момента предыдущего исполнения предложения beginFill() или beginGradientFill(). Не выполняет заливку замкнутых областей до тех пор, пока не встретится другое предложение beginFill() или beginGradientFill(). Метод beginGradientFill() будет действовать применительно ко всем элементам,которые вы рисуете в определенном видеоклипе, до тех пор, пока не будет выполнен метод endFill(), clear() либо метод beginFill() или beginGradientFill().
Градиентная заливка может быть линейной (параллельные полосы) или радиальной (концентрические круги).
Работа с тремя градиентными массивами.
3 свойства градиентной заливки хранятся в 3 различных массивах. Этими свойствами являются цвета, показатели прозрачности и коэффициенты. Первым указывается массив цветов (colorArray), которые будут использоваться в заливке. Каждое значение этого массива представляет собой число от 0 до 0xFFFFFF. Надеюсь не стоит объяснять,что это web-представление цветов. Вторым сказывается массив показателей прозрачности (alphaArray). Каждое значение этого массива представляет собой число от 0 до 100 и применяется к соответствующему элементу массива. Таким образом, элемент alphaArray[0] задает прозрачность цвета в элемента colorArray[0]. Третьим сказывается массив коэффициентов. Каждое число этого массива задает точку, в которой Flash начинает заливку определенным несмешанным цветом. При движении в сторону от этой точки, Flash выполняет заливку цветом со все большим и большим процентом добавления соседнего цвета. Значение этих чисел является программным эквивалентом перемещения маркеров полосы определения градиентной заливки на панели Color Mixer (Цветовой микшер) с целью определения ширины каждой цветовой полосы (для линейной заливки) или кольца (для радиальной заливки). Каждое значение этого массива является числом от 0 до 255. Чтобы понять, как функционируют эти числа, представьте себе линейку с 255 метками, простирающуюся вдоль полосы определения градиентной заливки. Каждое число в массиве коэффициентов соответствует одной из этих меток, сообщая Flash о необходимости становления маркера соответствующего цвета в этом месте. Если задать число больше 255, то функция перестанет работать. Flash считает значения слева направо, в результате чего цвета, указанные в массиве раньше, будут предшествовать цветам, указанным позже. Например, если поместить на одной виртуальной "метке" несколько виртуальных "маркеров", то Flash отобразит только цвет, соответствующий первому маркеру. (может немного проявиться смесь скрытых цветов.)
Flash всегда применяет заливку ко всей области, для которой она была назначена. Эта операция выполняется путем задания последнего цвета массива для любой необъявленной области. Таким образом, при задании нулевого коэффициента для всех цветов всю область будет залита сплошным цветом, являющимся последним в массиве. Число элементов во всех массивах должно быть одинаковым, иначе функция работать не будет. На практике число элементов в массивах должно быть не меньше 2 и не больше 8. Фактически число элементов в массивах может быть любым, лишь бы оно было одинаковым во всех массивах, но для создания градиента требуются минимум 2 цвета. Если бы в каждом массиве было по одному элементу, получилась бы сплошная, а не градиентная заливка. Кроме того, цвета после восьмого не отображаются. Таким образом, Flash отобразит цвета, соответствующие элементам массива, начиная с colorArray[0] и до colorArray[7],а цвет, соответствующий элементу colorArray[8], отображен не будет.
Матрица преобразования.
Матрица преобразования позволяет выполнять некоторые стандартные преобразования градиентной заливки. Например, поворот на 90 градусов изменяет заданные по умолчанию вертикальные полосы линейной заливки на горизонтальные. Матрица представляет собой объект, который можно указать с помощью литерала объекта либо создать с помощью пользовательского класса и оператора new. Матрицу определяют путем создания объекта, свойства которого становятся элементами матрицы. Этот объект используется в качестве последнего параметра, переданного методу beginGradientFill(). Создаваемый объект матрицы может содержать следующие свойства. ¤ 9 свойств, определяющих матрицу 3x3, как в обычной математике. Для реализации методов трансляции, вращения и масштабирования обычного объекта матрицы предназначен файл с расширением .as (файл "включения"), разработанный вместе с программой. Это делает традиционные операции с матрицей интуитивно понятными, но для каждого преобразования (трансляции,вращения,масштабирования) требуется отдельное обращение к функции. ¤ 6 свойств, представляющих параметры трансляции, вращения и масштабирования. При каждом обращении вы можете выполнять тольку одну, две или три операции (т.е. одновременно выполнять трансляцию, вращение и масштабирование). Этот формат более краток и интуитивно понятен. Если вы хотите выполнить только трансляцию, вращение или масштабирование, то оба выполняют эту задачу совершенно одинаково. Матрица 3x3 более эффективна при управлении порядком операций масштабирования, трансляции и вращения, поскольку ее можно преобразовывать несколько раз, а вызывать метод beginGradientFill()-только один раз. Одни и те же операции, выполненные в разном порядке, дадут различные результаты.Выполнение их в порядке масштабирование-трансляция-вращение не является аналогичным последовательности трансляция-вращение-масштабирование. При одновременном выполнении нескольких операций в кратком формате порядок всегда будет таким: масштабирование-вращение-трансляция. Операции можно выполнять и по одной, меняя таким образом их порядок, но при этом каждый раз придется вызывать метод beginGradientFill(). Традиционный формат матрицы используется в случае, если вы не хотите ограничиться только операциями трансляции, вращения и масштабирования. К примеру, можно создать свои собственные функции матриц.
Краткий формат матрицы преобразования.
Приведенное ниже предложение создает объект матрицы с именем m (имя является обязательным), используя краткий формат.
m={matrixType:"box", x:100, y:100, w:200, h:200, r:(45/180)*Math.PI};
Первым свойством всегда является строка "box". Свойства x и y используются для выполнения трансляции, w и h-для масштабирования, а r-для реализации вращения. Трансляция означает перемещение градиента. По умолчанию Flash размещает центр градиента в верхнем левом углу клипа, в котором расположена заливка. При трансляции каждая точка градиента перемещается по горизонтали на величину x и по вертикали на величину y.
|