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

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


TIPS OF FLASH



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

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

// возвращаем 0

return 0;

};

TIPS 12

Поскольку функция добавления эффекта нам нужна будет, видимо, не для одной фотки, то и ее поместим в прототип мувиклипа. Причем, функции абсолютно параллельны ширина, длина и содержание мувиклипа "photo".

Делать функцию будем по принципу все в одном.

// помещаем в прототип мувиклипа функцию добавления эффекта

// с аргументом step - шаг:

MovieClip.prototype.addMaskShow = function(steps) {

// this - здесь мувиклип с фотографией.

// создаем пустой мувиклип:

this.createEmptyMovieClip("mask_mc", this.getTopDepth());

// и назначаем его маской его родителю:

this.setMask(this.mask_mc);

// передаем в мувиклип маски необходимые константы.

// количество шагов:

this.mask_mc.steps = steps;

// ширину фотки:

this.mask_mc.w = this._width;

// высоту одного элемента маски:

this.mask_mc.h = this._height/steps;

// значение покадрового приращения высоты маски:

this.mask_mc.s = this._height/steps/steps;

// затем мувиклипу маски навешиваем на событие входа в кадр:

this.mask_mc.onEnterFrame = function() {

// здесь this - это мувиклип маски.

// если раньше что-то нарисовали программно - будет очищено:

this.clear();

// наращиваем счетчик:

this.counter++;

// в цикле прорисовываем нужное количество прямоугольников:

for (var i = 1; i<=this.steps; i++) {

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

if (i == this.counter) {

// то выходим из цикла

break;

}

// иначе рисуем очередной прямоугольник

this.drawMaskRectangle(this.w, (this.counter-i)*this.s, 0, (i-1)*this.h);

}

// а если счетчик сравнялся с двойным количеством шагов

if (this.steps*2 == this.counter) {

// то удаляем мувиклип маски (здесь this - это мувиклип маски!)

// а вместе с ним удалится весь ненужный хлам

this.removeMovieClip();

}

};

};

// тестируем:

this.attachMovie("photo", "photo_mc", 0).addMaskShow(20);

Вот и все. Я, конечно, понимаю, что остались вопросы, например, строка

this.drawMaskRectangle(this.w, (this.counter-i)*this.s, 0, (i-1)*this.h);

выглядит довольно громоздко и нечитабельно. Но если взять исходную строку

drawMaskRectangle = function(w, h, x, y)

и сопоставить аргументы, затем пройтись по аргументам, можно трейсом, то обнаружится, что ничего в том сложного нет.

ОБРАТИ ВНИМАНИЕ:

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

Также, если изучишь внимательно скрипт, то увидишь, что не изменялись переменные, являющиеся внешними по отношению к мувику маски.

Оба этих признака говорят о том, что функция случайно не испортит какие-либо данные других скриптов. И это правильно.

HOME TASK

Я не делал обратный эффект - скрытия фотки. Если ты его сделаешь и сочтешь вполне удачным, сбрось его мне на мыло dembicki@narod.ru. Только скрипт :). Мне обязательно пригодится. И помни: по-настоящему твое только то, что ты успел отдать другим.

Назад на стр. 024-098-2  Содержание


 

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