Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #27, ФЕВРАЛЬ 2003 г.

TIPS OF FLASH: взмылим веревку!

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #027, стр. 027-104-1


Меня прибило на веревку. Короче, чел один кинул линк на флэшкодерз, а там симпатичная такая веревка драгается и дрыгается. А под рукой, как назло, ни одной swf вскрывалки... Это задело меня до глубины души, и я решил сделать сам.

И сделал: http://dembicki.narod.ru/fla/elastic_cord.swf Перед тем как читать дальше, сходи и посмотри на результат, подрагай веревку, посмотри на ее поведение. Хочешь такую же? Тогда поехали, а по ходу разберемся и со всякими полезностями.

ПОДГОТОВКА

Сначала прикинул, какую логику заюзали - вроде ничего сложного.

Перво-наперво нужно создать две кнопки и задать им instance name, а говоря по-русски, имя экземпляра. Называем первую "start_mc", вторую "end_mc" - без кавычек, естественно. Программно будем рисовать в отдельном мувике, зарегистрированном в классе. Создаем пустой мувик, задаем ему name и linkage name: "cord".

Итак, у нас на сцене две кнопки, а в библиотеке кнопка же и пустой залинкованный мув "cord".

TIPS 1

Лучше сразу намутить себе заготовку, а потом с нею работать.

Создадим класс. В первом кадре рута пишем:

CordClass = function () {

};

И сразу же регистрируем мувиклип "cord" в классе:

Object.registerClass("cord", CordClass);

TIPS 2

Да, да. Класс уже создан, и мы уже можем регистрировать на него объекты. Это так просто. Неважно, что он пустой.

Сейчас мы его будем наполнять. Оптом закидываем в прототип CordClass все функции мувиклипов.

TIPS 3

Чтобы не писать тучу лишних знаков, можно присвоить переменной "p" линк на прототип класса, в который и будем в дальнейшем помещать функции:

p = CordClass.prototype=new MovieClip();

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

УЗЛОВЫЕ ТОЧКИ

Наша веревка будет состоять из нескольких узловых точек, через которые будет рисоваться кривая линия. Эти точки будут создаваться один раз в момент аттача мувика "cord" на сцену. В нем будут жить. С ним и умрут. Количество этих точек определим в переменной num, установленной в прототипе класса:

p.num = 11;

TIPS 4

Для упрощения последовательного обращения к этим точкам линки на них лучше всего поместить в массив. А заодно поместим в массив и линки на кнопки. Они будут началом и концом веревки, и поэтому в массиве одна кнопка будет первой, вторая последней.

p.onLoad = function() {

this.arrMC = [_root.start_mc];

var mc, i = 1;

while (i<this.num-1) {

i++;

mc = this.createEmptyMovieClip("point"+i, i);

mc.lineStyle(0, 0, 100);

mc.moveTo(-5, 0), mc.lineTo(5, 0);

mc.moveTo(0, -5), mc.lineTo(0, 5);

this.arrMC.push(mc);

}

this.arrMC.push(_root.end_mc);

};

TIPS 5

Ты заметил, что мувики у нас не пустые? Сразу после их создания мы в них рисуем крестик. Это для того, чтобы в дальнейшем мы могли увидеть, где они находятся.

И после инициализации требуемых объектов было бы неплохо это посмотреть, но если попробовать:

_root.attachMovie("cord", "cord0", 0);

то увидим, кроме кнопок, только крестик в нулевой координате. Это потому, что все приаттаченные мувики встали в координату _х=0 и _у=0.

TIPS 6

Если заглянуть в листинг переменных, то увидим, что все что создавали, у нас имеется в наличии.

Содержание  Вперед на стр. 027-104-2