Хакер №024. Спецвыпуск

       

Хакер №024. Спецвыпуск


TIPS OF FLASH



скрипт под маской

Спецвыпуск Xakep, номер #024, стр. 024-098-2

TIPS 7

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

TIPS 8

Если ты имеешь хотя бы минимальный опыт работы с флэшом, то знаешь процесс создания маски: чтобы замаскировать мувик, нужно слоем выше поместить маску и этому слою задать свойство маски. Так и никак иначе.

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

В общем, программно, через функцию установки маски работать с масками можно гораздо эффективнее.

TIPS 9

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

Функция очень проста. В качестве аргументов мы будем передавать ей соответственно: ширину, высоту, и координаты х и у точки, в которую поместим верхний левый угол этого прямоугольника.

MovieClip.prototype.drawMaskRectangle = function(w, h, x, y) {

// начинаем заливку черным со 50% прозрачностью:

this.beginFill(0, 50);

// рисуем контур прямоугольника:

this.moveTo(x, y),

this.lineTo(w+x, y),

this.lineTo(w+x, h+y),

this.lineTo(x, h+y),

this.lineTo(x, y);

// заканчиваем заливку:

this.endFill();

};

и тут же ее проверяем на дееспособность:

_root.drawMaskRectangle(100, 200, 10, 20)

При тесте (Ctrl+Enter) должен нарисоваться прямоугольник размером 100х200, верхний левый угол в координатах х=10, у=20.

После того как ты наэкспериментируешься с рисованием прямоугольников разного размера, а может быть и цвета, мы продолжим.

Сносим строку проверки скрипта или закомментируем вот так:

// _root.drawMaskRectangle(100, 200, 10, 20) - но лучше снести напрочь!

TIPS 10

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

TIPS 11

Еще одна штука нам понадобится - функция вычисления первой сверху свободной глубины. Нельзя запихнуть два мувиклипа на одну глубину. Так что в нашем примере скрипт будет плодить целый слоеный пирог. Это часто встречающаяся задача при добавлении нового мувика. Поэтому и ей место в прототипе мувиклипа:

MovieClip.prototype.getTopDepth = function() {

// обходим все объекты в мувике:

for (var mc in this) {

// если тип объекта мувиклип

if (typeof this[mc] == "movieclip") {

// возвращаем его глубину и выходим из функции

return this[mc].getDepth()+1;

}

}

// если мы не вышли из функции раньше, значит - мувиков не было

Назад на стр. 024-098-1  Содержание  Вперед на стр. 024-098-3


 

Содержание раздела