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 Если заглянуть в листинг переменных, то увидим, что все что создавали, у нас имеется в наличии. |