Рубрикатор |
Все материалы, относящиеся к программе и технологии Macromedia Shockwave Flash
(материалы даны в хронологической последовательности, как они присылались автором)
Цикл, предложенный ниже, появился в результате обоюдной переписки с одним из читателей, который... впрочем, какой он - вам решать, но мне весьма близок по некоторым взглядам на средства разработки современных дизайн-технологий...
Хочу отметить, что Kunck - специалист по Shockwave Flash, является flash-мастером в ABCline Studio ("Интренить" - 4е место, IX Московский фестиваль рекламы - спецприз за инновацию в I-net, сайт признан самым элегантным (весна-лето`99) на flasher.ru, победа в конкурсе эффектов на flasher.ru).
Вообще, стиль автора несколько скачкообразен и неоправданно резковат, но можно читать, выбирая для себя только то, что необходимо. А соглашаться или нет с его мнением - это ваша роль. Я и поместил эти записки для того, чтобы каждый мог найти необходимые ему крупицы информации. А они есть...
Итак:
Первая часть
Вторая часть записок на следующей странице.
из номера за 5 января 2000
"Записки флэшера"
"...Кстати, не заметил последнее письмо MetaCreations юзерам? Они кажется окончательно накренились - не вывешивать месяц новостей, потом выпустив с 3-х месячным опозданием Carrara (барахлишко, судя по всему), заявили что переключились в рынок eCommerce - не козлы ли! <...> Сколько они продуктов загубили, я чую, под эти колеса попадет еще кой-чего (А именно - плохо придется Painter, Poser, KPT, Bryce - только RayDream и вытянет :(
Такое вот расстройство. Macromedia тоже не радует - все от web-разработки E-Commmerce просто ума лишились, а что у них Director вот-вот устаревать начнет (а Authorware уже признанный труп, кто бы чего ни говорил) - это кажется их мало печалит. Flash - это чудесно, но в нем УЖЕ начались глюки, причем, как в программировании, так и в проигрывании, и немало (на сегодняшний день - 10-15 серъезных недочетов). В то же время он - стандарт де факто в мультимедиа. Правда, все как-то проглядели, что Flash на самом деле тихонько перекусывает глотку Java - чуть-чуть побольше функций - и все, капут - смело можно будет писать приложения на Flash (что, в общем-то реально, убедись сам - числа он перемалывать умеет, строки прожевывает, переменные и поля ввода есть, некоторыми характеристиками управлять реально, данные получить из него тоже не проблема - ВЕЛИКОЛЕПНЫЙ Visual-API - советую пользоваться - при ХОРОШЕМ владении Flash разработка приложений удесятерится втрое ;)..."
"...Я один единственный раз встречал ситуацию, когда приходилось ломать приложение от MetaCreations - защита там у всех одна (если вообще есть) - серийный номер. Сомневаюсь сильно, что они выдержат такой резкий поворот курса - у них нет ни одного серверного продукта, а странно на мой взгляд, предлагать решения для электронной коммерции, не проработав его во всех частях - даже macromedia купила пару компаний, для основательного укоренения в этом секторе, кроме того, что у нее самой неслабая сумма технологий + top 100 #16, кажись. А куда эти полезли - вообще муму непостижимо. Полная фигня - Canoma, более неудобного 3D-пакета чем RayDream я просто не встречал, ни до покупки его FractalDesign, ни после. Фиаско KPT6 гораздо глубже, мне издалека поверь, виднее - из действительно применимых фильтров (новых) - только turbulence и flare - и то, и так было всегда - Pemiere, AfterFX, Effect*/Edit*/Paint* не работают в пакетном режиме ни с какой версией KPT, кроме того, что MAX от них сразу весится (хотя, на удивление, с KPT 1.0 чудно уживался и уживается TrueSpace от Caligari, но это единственный плюс этого пакета перед всеми другими). Это сильно снижает применимость их для видеопроизводства, хотя эффекты можно было бы получать просто превосходные даже в первой-второй версиях, увы, нас кинули. Хотя, тут я чуть несправедлив - версия 3.0 - SpheroidDesigner и Interform позволяли задавать видео-последовательности, как и GOO до этого, но я видел в видеоэффектах применение Interform только один раз! это за 5 лет существования пакета и при безоговорочном признании его как лучшего среди подобных - это очень плохо..."
из номера за 7 января 2000
"Записки флэшера"
"... Flash - разработка, не принадлежавшая изначально Macromedia, а у кого-то купленнная, и звавшаяся FutureSplash - ее атавизмы то там, то сям проявляются, и с ними особо не борются. Фантастическая по своей простоте идея - передавать векторную графику и анимацию вместо компрессированных растров - основа успеха этой технологии...
Я постараюсь в общих чертах описать этот уникальный продукт, перечислю те возможности, которые выделили его из ряда других аналогичных систем, причем область применеия Flash настолько широка, что это даже восхищает. Flash изначально применялся и применяется как технология доставки потокового мультимедиа-контента, что, в общем-то не ново само по себе, у той же Macromedia существовала ранее (и достаточно успешно существует сейчас) shockwave Diector - тоже технология потокового мультимедиа, заслуживает отдельного рассмотрения, аналоги других фирм - QuickTime, Real, ToolBook - тоже неплохи зачастую, но во многом проигрывают Flash. Чем же он так хорош? Во первых - предельно простой идеолгоией, что позволяет уже на первых этапах новичку легко обращаться со средой разработки и делать приблизительно то, чего ему хотелось бы всегда - дрыгающиеся кнопочки, текст, отформатированный раз и навсегда, звуки и шумы, картинки и т.п. Естественно, такая простота обманчива, найдется ведь 95% задач, для которых потребуется хоть какой-нибудь серъезный опыт, как ни крути, но в то же время эта простота не пугает и подвигает пользователя раскрывать новые возможности технологии все глубже."
"Какова идеология? Она проста - на шкале времени происходит некое количество событий и преобразований объектов в сцене, расположенных на "слоях".
Контроль осуществляется в ключевых кадрах для каждого объекта, или группы объектов, объединенных в слой, причем некоторые из слоев имеют определенные свойства типа mask/masked, guide/guided (позже я поясню, чем хорош такой подход). Вопрос о том, сохраняется ли такой порядок в откомпилированном swf - спорный, потому как есть факты утверждать обратное. Идеология time-line распространена в средствах производства протяженного во времени контента, таких задачах, как 3D-анимация, видео-обработка и создание видеоматериала. Благодяря этому, Flash применим и как средство видео-композитинга, причем с интересными и гибко управляемыми эффектами. Полноценным этот пакет в данной области считаться никак не может, но видео-инженеру и мастер-аниматору он принес бы много откровений - опробовано на собственной шкуре."
"С чем можно работать во Flash? Я уже говорил о массированном применеии векторной графики - скажу более - кроме векторной графики там не применяется ничего более. Импортируемая растровая графика используется только как заливка для векторных форм, поэтому над ней можно осуществлять те же операции преобразования, что и над векторами - хотя, настоящих трансформаций изображения не позволяется. Внедряемые OLE-объекты также преобразуются в вектора, хотя, могут редактироваться в среде разработки. Не самое большое удобство, могу сказать. В конечном итоге - это, все равно, вектора. Заливка осуществляется 4-мя видами фона - сплошным цветом, градиентами 2-х видов и растром. Уникальность цветовой системы flash- наличие у цвета атрибута прозрачности - ни одна система векторной гарфики, из известных мне не реализует такого - только пост-обработку или спецэффект, имитирующий это свойство. Естественно, цвета, включемые в градиент (до 8ми позиций) так-же могут варьировать и прозрачность - мощнейшее средство для создания световых эффектов.
Огромные неудобства доставляет тот факт, что расположение цветов на шкале градиента точно никак не управляется, но это лишь недостаток среды разработки, коих немало, и о них отдельно. Переходы между цветами - только линейные, это важно знать при экспорте. Растры управляются визуально, как и градиенты - масштаб, поврот-скос. Обводка форм - простая, round-cap - на базе круга, поэтому все острые углы лучше делать без обводки - они сгладятся, но в формах останутся. Специальные типы обводки - чистой воды обман - имитируются (при компиляции) кусками линий и анимируются как простые контуры - поэтому очень нерациональны, хотя, были бы полезны при настоящей реализации.
Одно из важнейших замечаний - формы (shapes) - предельный уровень примитивов, из которых может строиться объект (Break apart до бесконечности). Это формы построенные на базе sudivision-кривых - поэтому, узловые точки там могут возникнуть где угодно, как и пропасть, впрочем, тоже - с этим надо быть внимательнее. Они существуют в 2-х ипостатсях - solid и outline - и никак иначе - если вы создали заливку outline - значит вы создали _новый_ solid, который вести себя будет абсолютно самостоятельно. также это касается и outline на базе solid. Поэтому полюбить операцию Group надо очень сильно, чтобы не лишиться рассудка, выделяя контуры и заливки.
Еще ложка дегтя - subdiv-ы , на одном слое не имеют никаких различий между точками - своими и других форм - поэтому заливки отъедают друг у друга куски (что удобно порой и бесит иногда :), а кривые (неважно - outline это или границы solids) пересекаясь бьются на части точками пересечения (комментарии те же, хотя, неудобства можно снизить, загруппировав ту или иную форму - после этого все эти эффекты возникают только в пределах группы) - но группы, как и символьные объекты, находясь в одном слое со свободными формами, будут располагаться _всегда_ впереди форм, хоть вы обнажимайтесь Ctrl+Shift+Down. Честно сказать, мне такая идеология работы с векторными формами нравится гораздо больше, чем тягание растяжек в узлах как у CorelDraw. или AI - вкус к этому приобретается не сразу, но и вышибается не так быстро. Но - минус понимание. Впрочем, это уже проблема пользователя."
из номера за 11 января 2000
"Записки флэшера"
"...Естественно, что сильнейшая сторона Flash. - возможность анимации контента. Для облегчения этого процесса и для внесения новых сил были введены символы - абстракции объектов (шаблоны), из которых уже на сцене создаются объекты, подлежащие анимации, или просто статика, но содержащая регулярные компоненты. Очевидно, что простые формы так же могут присутствовать в сцене - мало того - анимироваться посредством shape-анимации, но этого вопроса коснемся отдельно, а пока - символы и все, что о них можно сказать.
Я крайне рекомендую относиться к символу как к КЛАССУ, а реализацию сивола - как к ОБЪЕКТУ этого КЛАССА, тогда много вопросов сразу снимется. Вообще далее я буду применять здесь термины объекно-ориентированного подхода, так как считаю его очень хорошо раскрывающим суть того, что происходит. Так же, хочу сказать, что все сказанное далее относится к Flash4, хотя, кое-что может встретиться и в более ранних версиях технологии - анализ развития технологии - не цель моего рассказа, по крайней мере сейчас.
Символ - не что иное, как такая же time-line, с ключевыми кадрами и слоями, нисколько не отличающаяся по устройству от главной time-line, исключая группы параметров общей для всего ролика в целом, которые с главной time-line и наследуются. В дальнейшем, я разберу, почему это так и насколько это полезно и важно.
Существуют 3 класса символов, на базе которых будет строить все свои новые символы аниматор Flash. Причем, любой из символов можно определить в сцене, как наследующий любой из этих базовых типов - установки, даваемые при создании символа и его вид в библиотеке символов лишь рекомендация к наследованию базового класса при создании реализации символа. В дальнейшем его легко поменять. Естественно, эта характеристика не анимируется :)
Тип static-Graphics - для создания неактивных элементов, контроль над которыми необязателен. Применяется для создания статичных элементов в сцене или для создания зацикленных отрезков анимации. В этом случае надо быть в курсе того, что при остановки той time-line, в которой существует этот циклический кусок, анимация в нем так же остановится. И при запуске time-line далее он снова начнет проигрываться. Так же полезно использовать этот тип символов в режиме single frame - для получения статичных фаз некой анимации или различных форм, получаемых в процессе анимации внутри символа. Пример тому - создание градиентных переходов сложной формы, или множества фаз подобной анимации (профили листов разворачивающейся книжки, к примеру), или группы объектов с характеристиками цвета, лежащими точно в пределах одного градиента (лепестки цветов к примеру, или гроздь ягод, листья, ветки - натуральные эффекты).
Какие параметры символа могут анимироваться?
В первую очередь - геометрические - возможны различные линейные преобразования (поворот/масштаб/скос) а так же пренос опорной точки линейного преобразования (pivot) между конечными фазами (этот эффект приводит зачастую к непредсказуемым результатам, поэтому вообще, всегда стройте символ с учетом минимальных вероятностей того, что pivot придется двигать). Эта анимация как паразитная возникает очень часто на первых порах и может привести к потере огромного количества времени на устранение неполадок (еще один отличный совет - настройте уровень Undo на максимум - это может ОЧЕНЬ выручить порой).
Еще - характеристики отображения - цветовые то есть. Задать их можно та вкладке Color Effect, и при детальном исследовании обнаруживается несколько режимов управления цветом, но все они - упрощенные в использовании разновидности самого нижнего - Special, позволяющего управлять характеристиками типа amount/offset - содержание компоненты цвета от исходного количества, независимое приращение цвета (положительное или отрицательное). Эти характеристики так же анимируются и задаются для символа в ключевых кадрах. Сюда же входит и атрибут alpha - прозрачность по-русски.
Анимируется легко. Главное - знайте, что если ваш символ -ни дать ни взять - слоеный пирог, то будьте готовы получить полную анатомическую картину полупрозрачного символа, это не всегда так приятно, как может показаться - паразитные детали и всё такое. Я рекомендую с прозрачностью обращаться максимально осторожно и учитывать, что прозрачные заливки, а градиенты с прозрачностью - тем более, очень медленно рисуются, особенно при крупных планах - увы и ах, о некотрых ухищрениях я скажу позже, но к сожалению их не так много, как хотелось бы. Фазы статики типа single frame не анимируются никак.
Анимация между ключевыми кадрами так же может быть нескольких типов - двух, если точнее - Motion и Shape. Shape коснемся отдельно, а насчет motion поговорим здесь и сейчас. Во первых - при наличии на слое нескольких символов ваша motion-анимация может не сложиться - поэтому все символы рекомендуется разбрасывать по разным слоям (очень рекомендуется давать слоям нормальные названия, потом самим же и придется разгребать), то же касается и групп - у них анимируются только геометрические параметры, но и их тоже надо разносить по разным слоям. У групп нет своих time-line, но у символов, которые легко могут эту группу составлять, никаких ограничений на выполнение потоков в time-line нет, тут главное - не переборщить с вложенной анимацией, хотя, трансформации групп позволяют легко выполнять однородную анимацию для большого числа объектов.
Macromedia решила подарить всем замечательное средство, а получилось не совсем то... Я говорю о замечательном пункте меню "create motion tween" - мой вам совет - не поленитесь настроить motion tween вручную - чтобы группы ваши не превратились в символы с непотребным названием, а у вас не появилось бы недоумений по поводу того "почему перестала меняться переменная и, вообще, что теперь делает эта кнопка?" - такая автоматизация явно вредит работе. Кстати, об именах символов - почему бы и не называть символы своими именами, кому нужны эти Symbol#? Впрочем, тут дело удобства.
Второй тип символа - тип clickable - тип Button. Прост - предельно, важен - не персказать как. Единственный способ как-то сообщить во flash свою волю - повзаимодействовать с кнопкой. Пара замечаний - старайтесь в кадре "hit" использовать фомы как можно проще. Второй серьезный момент: если при создании кнопки есть возможность НЕ задавать состояния Down, лучше этого не делать (естественно, если экзистенция объекта не меняется в корне от этого нажатия) - это перебор и причем явный, но так часто встречающийся на сайтах даже серьезных профи - тут я еще и как псевдо-дизайнер выскажусь - если кнопка вызывает более 2х действий, она ведет себя явно вызывающе. Если hit'ы 2х кнопок в сцене пересекаются, то сообщения нижней кнопки приходить перестают или не приходят вообще, даже если мышь находится в области пересечения hit'ов. Когда вы создаете кнопку, которой _не должно_ быть видно на экране (частенько бывает нужно) - не рекомендую для этих целей созданной кнопке в сцене заваливать alpha до нуля - лучше просто создайте область в hit'е, а в основных состояниях - поставьте пустой кадр в Up, а остальные не трогайте - тогда в разработке будет видна нежно-голубенькая область, изображающая hit, а про компиляции она видна не будет, ессно, хотя будет нажиматься..."
из номера за 15 января 2000
"Записки флэшера"
Третий тип - runnable, callable - тип MovieClip. Наиполезнейшая вещь, надо сказать. По сути дела - полноценнейший time-line, именованный для возможности управления им и для осуществления обмена данными с ним. Тут я на минуту отойду в сторону и лишний раз скажу о том, что Flash стал наконец-то программируемым в настоящем смысле этого слова - в нем можно создавать переменные и конструкции, вычисляющие и принимающие решения. Также, существуют средства для управления элементами в сцене, как несложно догадаться, касается это только movieclip'ов (буду звать их просто clip'ами) - только благодаря наличию у них имени.
На самом деле, абсолютно необязательно давать clip'у имя, если вы не намерены им управлять извне, сам же clip управляет процессами внутри себя при обращении к встроенной переменной _target в программном коде - Flash инициализирует эту переменную специальным образом, как - поясню позже. Во всех других случаях, уникальное имя вам просто необходимо, иначе начнется полная неразбериха - если точнее - управлению (извне) будет поддаваться только тот clip с дублирующимся именем, созданный в среде хронологически ранее. Важно то, что имена clip'ов никуда после компиляции не деваются и тем или иным способом их можно использовать и _после_ компиляции. То же касается и переменных. (надо оговориться, что "компиляция" - здесь понятие весьма условное - это переработка в потоковый формат, оптимзированный для наискорейшей пердачи, естественно, что _сам_ swf ролик никак не выполняется, а интерпретируется средой ActiveX или NN-plugin, или Projector, или Xtra-модуль (хотя, что сейчас есть компиляция, а что - интерпретация - вопрос спорный уже давно).
От этого плавно перейдем к рассмотрению понятия time-line как это есть во Flash. Я уже говорил, что любой символ - это определение time-line. Как трактуется она в случае, когда символ - Graphics я долго и нудно расписывал выше. Насчет Button достаточно внятно расписано в Lessons [они встроены в сам Flash4] (мое настоятельное пожелание всем хорошенько, не пропуская ни одного пункта их проработать), и повторяться я не буду, добавлю лишь, что большим открытием может стать то, что в кадрах-состояниях самой кнопки превосходно живут и работают clip'ы, да и вложенные кнопки тоже (лишь бы hit'ы не пересекались, а то будет бардак), пременные и т.п., другое дело, что насколько это вам нужно?
Так же рекомендую пользоваться возможностью добавлять новые слои в кнопке - по понятиям time-line это никак не возбраняется, а пользу может принести порой большую - самый простой пример - статику разносить по слоям без дополнительных ключей в состояниях, где она неизменна, а контент, меняющийся в кнопке в зависимости от состояний - на отдельный слой - сэкономите, немного, но все зависит от задачи.
Так же, главную time-line стоит рассматривать в любом из clip'ов - она будет выполняться совершенно самостоятельно, процессы, которые будут происходить в ней ничем не будут отличаться от процессов "наверху" и имеют такую же свободу действий - единственное ограничение - скорость проигрывания наследуется. И, естественно, область видимости (существования, если правильнее) так же железно определяется состоянием родительской time-line. Все. Что бы у вас ни происходило в другом месте, если это никак напрямую clip'а не касается, он будет себе выполняться, пока весь мировой запас электричества не исчерпается.
Вся эта лирика проясняется при знакомстве с одной единственной командой программирования Flash - LoadMovie - при детальном рассмотрении выясняется, что она позволяет загрузить другой ролик swf на любой слой либо в _любой_ именованый clip (он зовется target'ом, и я не раз еще воспользуюсь этим обозначением). Слой, упомянутый выше - это swf-слой, а не слой в исходнике! Если кто не подозревает о таком чуде: Flash - это среда, которая способна пригрывать контент на 256 слоях, на которые можно в произвольном порядке загрузить любые swf-ролики. Изначально она грузит ролик на слой 0, и в соответствии с параметрами этого ролика устанавливает частоту кадров и цвет фона (загрузка нового ролика на 0-й слой поменяет эти параметры). Остальные 255 роликов будут использовать эти параметры (естественно предположить, что фон их будет прозрачным, некоторая аналогия со слоями в авторской среде наблюдается). Напомню, что имена каждого - "_levelX", где Х - сами понимаете что :). Вообще, адресация clip'ов в среде (не только в единичном ролике) - интересный и важный вопрос и я рассмотрю его специально. В имени clip'а могут применяться цифры и латинские буквы. Менее очевидно то, что руские буквы там тоже можно использовать, и еще более удивителен тот факт, что многие из специальных знаков также вполне можно использовать в именах clip'ов.
Из высказанного ранее утверждения об аналогичности свойств всех time-line легко можно предположить, что в clip'e легко может содержаться "вмурованный" (унаследованный) именованный clip, и, честно сказать, процесс этот может происходить до бесконечности, равной в нашем случае 256-ти (что в общем-то непринципиально :). Адресация выглядит как "_levelX/AAA/BBB/CCC/XXX/YYY" - начиная со слоя и вглубь по именам родительских clip'ов и оканчивая собственным именем в самом глубоком родительском clip'e. Если хоть какой-то из родителей не проименован, управлять клипом с этого уровня нельзя, и начиная с этого уровная все дела в clip'e, оставшемся без имени (или с именем, непригодным для работы - дублирующим уже созданный ранее clip, или какой еще сбой - Flash, честно говоря полон загадок в некоторых местах) - все процессы пойдут самотеком. Если говорить точнее, то каждый неименованный родитель именуется следующей нотации: "instanceX", Х - тот же. Flash просматривает все clip'ы в порядке их создания и дает по мере проникновения вглубь неименованным clip'ам такие имена, что, при неизвестности их заранее, равносильно тому, что он их просто не дает.
Существенное дополнение к сказанному. Конструкция вида "../a" - из текущей time-line адресуется к clip'у "a" родительской time-line. В принципе, можно адресоваться и к "теткам и дядькам" - "../../XYZ" и т.д...
из номера за 22 января 2000
"Записки флэшера"
Что можно сделать с clip'ом? Зная полный путь к нему (или путь из текущей области видимости) можно выполнять следующие операции:
1. Операции позиционирования проигрывающеё головки - goto frame, Play/Stop
2. Операции геометрических трансформаций - позиционирование/поворот/масштабирование - специальных операторов для этих операций нет, есть один общий - SetProperty. Большое неудобство - в то же время, скорее всего просто в силу нереализуемости - отсутствие прямого управления шириной/высотой clip'а - приходится, вычислив реальную ширину, устанавливать масштаб заново. Все это опреации абсолютны и вычисляются, используя родительскую систему координат для clip'а.
3. Операция Видимости - это не простая установка параметра Alpha в 0 (которая тоже осуществима, но о ней чуть позже), а именно исчезновение clip'а из сцены с возможностью его появления опять. Замечательно то, что для управления clip остается доступен, но всякое неопосредованное взаимодействие с ним пользователя исключается. Звучать clip не перстает.
4. Задание Name и Alpha - тут, думаю, все ясно. Комментарии будут следующие - свойством устанавливать имя я не пользовался никогда, хотя, может и понадобится, допустим, я строю 2 разных по сути объекта, ведущих себя одинаково на основе одного и того же символа (символ "место", внедрен "/зверь") - я строю "мешок/кот", "небо/журавль". Хотя, я бы не стал городить такой огород. Возможно, что когда-нибудь мне это пригодится... С Alpha, я полагаю, особых разговоров нет, а рекомендации по применению те же, что и ранее - максимально осторожно.
5. Режим реакции на курсор. То есть - таскать ли clip по экрану (DragMovieClip) или оставить его в покое (StopDragging). Средство, принесшее во Flash недостижимую ранее функциональность, и реализованное без единого недостатка (по крайней мере, замеченного мной). Есть режим ограничения перемещения в области. К сожалению, не хватает реализации для более сложных областей. Есть режим фиксаци pivot к курсору мыши. Свойство _droptarget любого clip'а указывает на тот clip, на который pivot данного clip'а попадает при перетаскивании. При пересечении областей различных clip'ов переменная устанавливается в имя самого верхнего clip'а, несмотря на местоположение самого clip'а, который мы таскаем - хоть на 25 слоев ниже.Что можно узнать про clip? При тех же данных:
1. Геометрические параметры: координаты x/y, поворот, масштаб по X/Y.
2. Alpha и visibility.
3. Мы не можем напрямую установить ширину и высоту clip'а, но спокойно можем узнать их. Я уже описывал выше предположительные причины такого положения вещей.
4. Можно узнать полное имя clip'а (_target) или имя его в родительской time-line (_name). Так же вполне реально узнать откуда был загружен ролик, содержащий данный clip (_url). Про _droptarget я уже рассказал выше.
5. _currentfarme, _totalframes, _framesloaded - названия переменных, содержащих текущий кадр time-line, ее полную длину и количество кадров, для которых полностью загружен контент.Ремарка отеосительно имен переменных - нельзя создать переменную, начинающуюся с _ и с $, такие переменные используются для служебных целей и их нельзя напрямую использовать в полях, и присваивать им значения, как это ни печально. Устанавливаются некоторые из них только путем вызова SetProperty.
Для чего он вообще нужен? Рассмотрим обобщенно области применения. Я не претендую на полный обхват, даже на неполный, но я использую их длятаких целей:
1. Как самостоятельный поток. Использование clip'а в такой ипостаси позволяет создать объект, раз и навсегда определённый в своём поведении и независящий от состояния других обьектов и родительской time-line. Таковыми являются всякого рода мигалки/вертушки/ленточки/колокольчики. Зацикливать такое действие специально не надо - Flash выполняет это самостоятельно.
2. Как единоразово выполняющееся действие. Последовательность анимации, для которой нет необходимости выполняться больше одного раза, но которая должна выполниться, как только появится. Таким условиям отвечают clip'ы, подготавливающие сцену к тому или иному событию (открывшиеся двери, вылетевшие шарики, повернувшийся ключ, установленные пременные). Важным условием должно являться отсутствие синхронности с другими потоками, в этом типе clip'а нет средств, выполняющих эту задачу. Строится просто - конечный кадр анимации содержит команду Stop. Для избежания ненужного функционирования потока в конце ставят ещё один кадр с ловушкой, отправляющей нас назад по time-line в кадр с конечным состоянием.
3. Как реакцию на событие. Когда происходит то или иное действие clip оживает и в нём происходит анимация, при других действия она может прекратиться. Такой clip строится когда вы хотите включать и выключать музыку, когда вы строите тумблер включения некоего прибора, то есть когда вы хотите построить цепь событий, выполняющуюся только в определённых условиях и в какой-либо последовательности. Строится как clip, останавливающийся автоматически с самого начала. Обычно специально зацикливают в конце потока.
4. Объект. Процессы в clip'е отождествляются с процессами в объекте и он рассматривается сам уже как объект, с которым можно взаимодействовать, который сам может оказать влияние на ход событий и состояние других объектов (clip'ов естественнно), обмениваться данными между собой. Самый общий случай.
5. Объект-индикатор. Управляется внешними событиями для отображения того или иного состояния другого объекта в сцене. На базе такой схемы строятся различные расширенные меню, кнопки с более сложной функциональностью, чем простые кнопки, указатели местоположения.
6. Объект-контроллер. Поток, следящий в постоянном режиме за процессами в сцене и оперативно пересчитывающий динамически меняющиеся данные, обычно получаемые от пользователя.
из номера за 8 февраля 2000
"Записки флэшера"
Анимация.
Буду тривиален, когда расскажу о том, что Flash предоставляет возможность анимации. Всё рассказанное ранее явно или неявно основано на этом, да и популярности такой бы эта технология себе не снискала бы без этого базового её свойства. Сказать здесь что либо дополнительно практически уже невозможно, про time-line, обеспечивающие эти возможности я написал прилично ранее, про слои я полагаю нужды особой в пояснениях тоже нет. Символы разобраны более-менее подробно, поэтому, информация в этой главе будет носить слабо-упорядоченный характер - расположу её по пунктам, не связанным между собой ничем, кроме того, что они имеют какое-то отношение к анимации во Flash, хотя, этого касается любого аспекта работы с ним.
1. Анимациии подвластны 3 типа объектов - символы, свободные формы и группы объектов. Все они имеют особенности анимации, присущие только им.
2. Относительно групировок - ещё раз призываю любить и жаловать. Комплексная однотипная анимация множества независимых объектов, или простая геометрическая анимация единичных образований, когда нет нужды создавать новые символы - вот области применения групп в анимации. Ещё важный момент - группы могут находиться перед символами на слое, в отличие от свободных форм, если это необходимо проделать, других путей нет (кроме разброса по разным слоям в среде авторинга). Группы так же вкладываемы друг-в дружку. Один важный момент - анимируется вся группа сразу, анимация внутри группы невозможна, идеологически в первую очередь. Группа может иметь определённый центр трансформации, но может и не иметь, в таком случае операция поворота выполняется относительно усреднённого центра, масштабирование выполняется абсолютно. Точно так же происходит масштабирование кнопок - удивительно, но факт. что касается анимации центра трансформации, особенно когда в одном ключевом кадре он есть, а в другом его нет - получить можно абсолютно всё что угодно, о чем я уже писал выше, но повторюсь ещё раз в контексте групп - они больше всего подверженны ошибкам такого рода.
3. Анимация символов мною рассмотрена выше, какие характеристики символов пожвержены ей я уже перечислял. добавлю только, что ручная настройка символьной и групповой анимации позволяет получать более приемлемые результаты - обеспечить контроль направления поворотов, к примеру, так как автоматически осуществляется поворот на наименьший угол, но вы легко можете указать специально направление вращения и даже число дополнительных полных оборотов, которые символ или группа должны совершить в процессе одной анимационной акции. Так же подвержены контролю и характеристики всей анимации - смещение акцентировки на начало или конец акции (анимационная акция - 2 ключевых кадра и переход между ними). Установка параметра Easing даст это смещение
- in - движение замедлено вначале (-100 - из полного останова)
- out - движение замедлено в конце (100 - полный останов)что касается начальной/конечной скорости, то она, очевидно не равна той, какая была бы при отсутствии ускорения - если ускорение постоянное, то для полного останова она должна быть вдвое больше, учитывайте этот факт, для создания плавности переходов. Знание и понимание кинематики и физики движения окажутся полезнее, чем умение быстро нажать пару клавиш, очень советую почитаь на досуге хотя бы Савельева.
4. Легко можно запретить поворот или масштаб в анимационной акции.
5. Наверное, те кто проработал lessons знают о возможности анимации позиции объекта с привязкой к пути. Так же существует возможность автоматического поворота, для сохранения одинакового угла между путём и объектом. так же нелишне заметить, что к пути привязвыается pivot объекта.
6. О путях: слой с атрибутом Guide для находящегося непосредственно под ним слоя (группы слоёв) с аттрибутом Guided будет давать формы для этих самых путей. Надо отметить, что в 3ей версии эти режимы были различны - слой guide и motion guide были различны по сути своей - если первый и не отображался, но на движение он не влиял. Зато motion guide был чётко привязан к конкретному слою, и по создании мог быть перенесён в любое место в стопке слоёв без потери прямой связи с тем слоем, для которого был создан. теперь всё чуть иначе - слой трактуется в зависимости от того, где он расположен, и от аттрибута тоже, есссно. Это позволяет использовать один слой для создания motion guide или mask для группы слоев и объектах на них, идея хорошая, но отчасти избыточная. И ненужные навязчивые усовершенствования переставляют порой аттрибуты слоёв, причем обычнее всего это только лишне - когда у вас есть guide-слой, который вы используете как трассировочный, содержащий графику, нужную только при авторинге (я, к примеру, - сплошь и рядом), то занеся случайно под него другой слой или создав под ним слой моментом получаете уже guided слой, хотя вам это абсолютно ни к чему - насколько ли часто вы используете GUIDE-растры и motion guide-технику, но как только эта диспропорция вам станет ясна, нелепость такого усовершенствования становится налицо. Таких неурядиц полно, уж лучше о них сказать - предупреждён - значит вооружён.
7. О глюках анимации даже вспоминать страшно, но знать надо. Необходимо отличать глюки анимации от кривоты инструментария. Новаторство в некоторых областях к сожалению ничего не дало - нельзя было перетаскивать методы работы во F. из Director - там принципиально различные подходы к организации time-line - во F. каждый слой содержит ЛЮБОЕ число объектов, подлежащих (или НЕ подлежащих) анимации. Конечно, если в слое есть анимация (символьная/групповая), корректной она будет как раз только если там только один символ на слое (хотя, ИНОГДА проходит и большее, но тут - дуракам счастье. и ленивым.) Дело в том, что анимационная акция иногда выделяется целиком и может быть случайно перенесена в другое место на time-line, хотя вы всего-лишь хотели ВЫДЕЛИТЬ группу кадров. Практика 3-го Flash тут играет дурную услугу, но кто знает, от чего придётся отвыкать в F5? Фокус с возникновением ключа при неосторожном передвижении (а иногда -просто выделении) объекта НЕ в ключевом кадре - тоже пренеприятная глючь (тогда настройки символьной анимации (ну назову её по имени, хоть оно и идиотское на мой взгляд - motion tween) - преедут в одну из новообразовавшихся акций, а в другой всё будет по умолчанию - вряд ли этого мы хотели). В 3-ей версии это было просто невозможно и дисциплинировало больше. Вот такая печаль. Глюки с motion guide вполне понятны порой. Во первых: пути не анимируются. Во вторых, пути - это только shape. (плевать - outline или граница solid, или то и другое вместе). Если у вас (не дай Бог, конечно), в качестве путей используется не-линейный subdiv (есть точки, которые принадлежат трем и более сегментам, это вполне реально, если вспомнить, что свободные формы сотавляют на каждом слое авторинга единый объект, с общими точками и границами), Flash. может попытаться найти путь, по которому поедет объект, но может случиться и так, что это окажется ему не по зубам, поэтому ждите сюрпризов (хотя, у меня был пример, когда он выбирал из 10(!!!) разветвлений, но очень не любит на пути изогнутые кривые, на прямых же иногда пробегает, если не надо делатьособо крутые виражи). И ещё литр дёгтя. Мы утеряли возможность под маской сделать слой, одновременно оперирующий с motion guide. 3я версия это позволяла.
Случаются фокусы и пострашнее. Ситуация: 3 clip'а. По непонятной причине, один НЕ работает как надо. Убиваем его и создаём копию на основе одного из 2-х оставшихся и преименовываем его именем уничтоженного перед этим. выравниваем все 3 clip'а - и опс! не работают уже все 3! 5 откатов назад - не работает только один. 25-ый раз повторяешь всё заново - результат стабилен. это самый свежий случай, ему и недели нет ещё :) А сколько их, мгновений чудных, готовит просвещенья дух! Полезное правило - будьте готовы ко всему ;) Есть верный солюшн на такое - скопируйте графику и даже кадры анимации, создайте новый документ и перенесите туда всё, что успели спасти. Вероятность того, что НЕПОНЯТНЫЙ глюк пропал наоборот появится. Ну, и, естественно, ВАШИ ошибки никуда не денутся.
из номера за 5 февраля 2000
"Записки флэшера"
Об анимации свободных форм очень хочется поговорить отдельно. Shape Animation позволяет нам всем создавать интереснейшие эффекты. К сожалению, этим очень часто злоупотребляют. И наоборот, не используют там, где необходимо - при сложной цветовой анимации. Поясню по порядку.
Как часто на разных сайтах начинающих flash-аниматоров встречается замусоленый сюжет - претекание букв логотипа в какую-нибудь неотвязную форму! Это сразу характеризует класс. У меня просто озноб порой вызывает, когда "Вася" превращается в "Пупкин", наплевав на все законы топологии. Flash в этом вопросе, на самом деле не особо церемонится, ему надо одну форму в другую перевести - он и переводит, как ему заблагорассудится. Вообще, морфинг- он везде славился непредсказуемостью - что в 3х-мерке, что в blend-операциях, только, конечно, морфинг sub-div'ов снимает некоторые ограничения (на число вершин, к примеру), но добавляет сюда свои причины рвать волосы на голове - отсутствие этих вершин заставляет его (Flash) самому принимать решения о точках, которые надо сопоставить. Когда вы определяете hint'ы, вы выполняете часть этих действий вручную. Это значительно облегчает процесс shape-анимации, но не гарантирует 100% удовольствия от результата - все hint'ы перемещаются строго по прямым (а как ещё, спрашивается?), со скоростью, одинаковой для всех точек. К тому же, иногда (чаще всего это случается когда вы импортировали формы из других программ) Flash всё же отказывается догонять адекватно схему расположения hint'ов, хоть она трижды эквивалентна, тут будьте добры - получите черт знает что. Лечится это (иногда!) тремя путями - сдвигом hint'ов в стороны (чуть-чуть), добавлением ещё одного hint'а или наборот - его удалением (причём, порой нельзя угадать, какого именно). Иногда, shape-анимация не даёт никаких сбоев при проигрывании в авторской среде, но случаются глюки при компиляции - в этом случае могу посоветовать только повторную компиляцию, скорее всего, недоразумения исчезнут.
О том, что желательно преводить друг в друга топологически эквивалентные формы, говорить надоело, но приходится. А Macromedia я бы уши надрал за пример в Lessons с дыркой в треугольнике. Вышесказанное не утверждает того, что любые эквиваленты будут анимироваться одинаково хорошо, но вероятность этого выше, чем в случае, когда Flash пускается в фантазии по поводу содержимого анимационной акции.
Shape-анимация позволяет проводить очень интересные эффекты с градиентами. По-простому - анимировать градиенты и их параметры. Только не мечтайте о том, что у вас будут анимироваться цветовые позиции - пока до этого не додумались в Macromedia. Зато, геометрические характеристики градиента анимируются, а цвета просто переходят друг-в друга. Использовать такую технику намного удобнее, чем маскировать огромные куски, залитые гардиентом нужной формы. Хотя, и здесь случаются серъёзные проколы - у линейного градиента две геометрических характеристики - положения точек одной из нормалей, в которых лежат разные краевые цвета, и эти точки двигаются в процессе анимационной акции только по прямым - в результате этого может неправильно выглядеть эффект поворота градиента на большие (>45 гадусов) углы, хотя, эффект, котрый достигается таким путем достаточно эстетичен, то же самое касается и радиальных градиентов - у них 4 характеристики - и тоже - положения контрольных точек. Ещё пример из раздела "глюки": анимационная акция - в ключевых кадрах - subdiv сложной формы, кроме того - состоящий из кучи несвязных кусков. У всех - заливка одним и тем-же градиентом, в разных фазах анимации - в разных ключевых кадрах соответственно. При компиляции кадр, предшествующий конечному ключевому оказывается пуст, хотя следующий (ключевой) и предудущий ему - в полном порядке. Лечится - рецептом приведённым выше - повторной компиляцией. Вообще, Flash крайне капризен к свободным формам, поэтому, если у вас какие-то сложности с работой с ними (не понимаются hint'ы, исчезает shape-маска, пропадают детали при импорте) - попробуйте слегка изменить сцену (сдвинуть hint'ы, повернуть в ключах маски subdiv'ы, чуть трансформировать импортируемую графику в среде, где она готовилась). Кстати, растровой заливки это касается на все 100 - её характеристики так же анимируются, хотя с теми же ограничениями.
из номера за 23 ноября 1999
"Записки флэшера"
Импорт.
Очевидно, не всю графику вы подготовите в среде авторинга - это просто невозможно порой - особенно это касается растров. Следовательно, Flash должен уметь работать с графикой, подтянутой извне, что и имеет место быть, хвала разработчикам. Я рассмотрю несколько вопросов, связанных с этим аспектом работы во Flash.
Иморт векторов. На наше счастье, мы можем импортировать более-менее пристойно графику следующих форматов : Adobe Illustrator (6-7), EPS, DXF, WMF. Небогато на первый взгляд, но и тут много чего приходится знать.
Начнём по порядку: формат Illustrator - вроде и распространённый и почти правильно понимаемый любой сносной векторной программой, однако я не рекомендую очень подтягивать графику в этом формате напрямую, через прямой импорт - может получиться чёрт знает что - многие дизайнеры просто обожают использовать кучу примочек, которые Flash НЕ ПОНИМАЕТ (это относится к маскам/обрезкам в первую очередь, а так же к сложным заливкам и контурам и расширенным растровым возможностям). Macromedia не так уж чтобы и только что выпустила расширение для Illustrator, Flashwriter. Вот кто чудесно со всем расквитается, наплевав в то же время на то, какая у вас версия Illustrator - о чём часто приходится помнить в случае прямого импорта. Кроме того, Flash начисто освобождается работы по самостоятельной трактовке сложных Illustrator'ских наворотов типа GradientMesh или Artistic Contour, что идёт ему на пользу. Не стоит правда забывать о том, что эффект, непередаваемый векторами вы получите растром, так же будете удивлены фактом того, что тонкая подстройка градиентов полетит к чертям - дизайнеру при подготовке материалов надо знать об этом чётко. Лучше всего как раз выгнав с помощью Flashwriter эскиз поглядеть на него и хорошенько подумать о том, что же получается и как с этим бороться.DXF - порядком надоевшая аббревиатура всё же смогла засветиться в списке форматов - зачем - неясно. Рекомендую лишний раз в этом убедиться и попробовать затащить во Flash хоть один 3х-мерный объект. Уверяю вас, 3D объекты делаются абсолютно другим способом, замешанным на крови и поте, всё это ОЧЕНЬ непросто.
WMF - придется полюбить этого невзрачного уродца, иначе вы никогда не сможете пережить общения с этим форматом, а оно бывает порой очень интенсивным. Ну, хотя бы начать с того, что все процедуры обмена графикой (векторной) через clipboard осуществляются посредством этого формата (или его диалекта EMF). Например - открываем CorelDRAW!, и в темпе вальса перекидываем чере clipboard графику в скромный Канадский программмный продукт, в меру сил редактируем его там (считаем, что это нельзя было сделать и во Flash - пусть это будет аксиоматично). Или, ситуация обратная - ну НЕОХОТА вам из-за какой-то новой формы гайки проходить весь нелёгкий путь преобразования ее из формата эскиза. В этом случае есть смысл тащить графику через clipboard - это заметно ускорит цикл.
Минусы (одинаковые для всех видов работы с этими (EMF/WMF) форматами - как прямой импорт из файла, так и опосредованный - из clipboard'а): он не понимет градиенты, а если и понимает, то не даёт никакой возможности знать об этом. Да, совсем забыл - редкостный по кретинизму (но действенный до смешного) способ создания 3х-мерных объектов (в векторах) - делать их посредством Word-art. И - тащить их через clipboard- Здравствуй, WMF!
Кое что ещё, способное заставить биться в истерике - потеря кусков форм. Это описывалось частично выше, но сейчас я разберу полнее эту неприятность. Ситуация простая: когда вы импортируете вектора в среду разработки есть риск столкнуться с несколькими неприятностями: могут пропадать целые куски векторов в ИМПОРТИРОВАННОЙ графике, либо при малейших попытках её, графику РЕДАКТИРОВАТЬ. Обе неприятности проистекают от осбенности работы flash с кривыми и неидеальности форматов типа WMF/EMF - и, как следствие - имеют схожий метод решения. Он прост. Попытайтесь СЛЕГКА изменить геометрию импортируемых форм в среде их разработки. Изменения типа поворота или масштаба, даже простой сдвиг всей композиции зачастую решает все эти проблемы.
Растры. Вот уж где у нас всё просто (на первый взгляд, конечно) - так это здесь. Форматы - понятные, до боли знакомые - BMP, GIF, JPEG, PNG. Казалось бы - что тут сложного - затянули графику, Break-ей-apart (и то, если очень надо) - нате, растровая заливка - обрежь или оставь в покое - да размести где хочешь. Всё именно так и есть. Надо только знать пару вещей:
1. Flash хранит и передаёт графику 2х типов - JPEG-типа и loseless (GIF/PNG - так он завётся ещё в простонародии). Любой растр можно прямо заставить храниться в том или ином виде. Так же можно принудительно отказаться от сглаживания картинки. Эти параметры уникальны для всех растров, хотя, есть значения по умолчанию. Не брезгуйте такими возможностями.
2. Прозрачность. Flash даёт возможность работать с прозрачностью для растров - с Alpha каналом. Формат, в котором может содержаться этот канал - только PNG. По такому случаю, крайне рекомендую полюбить Fireworks, ибо на сегодня я не знаю программы, работающеё с этим форматом лучше, чем она. Интересный момент - даже если графика с прозрачностью у вас содержится в формате JPEG, прозрачность не девается никуда. GIF с прозрачностью также не теряет этих замечательных свойств, и может успешно применяться, как замена обрезке векторной формы с растровой заливкой.
3. Mасштабированная и повернутая графика может доставить вам кучу незабываемых минут при окончательной выгонке проекта в swf - как это ни неприятно. внедрённые фотографии могут начать подмигивать, хотя, они вроде точно стоят на местах.... Можно лишь порекомендовать меньше делать манипуляций (геометрических) с формами, содержащими растр, хотя, порой полностью избежать этого невозможно. Однако - решение иногда то же самое - чуть-чуть измените кривляющийся элемент.
Вторая часть записок на следующей странице.