Хакер №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