На тот случай, если вы не знаете (или знаете весьма смутно), что означает слово Flash на обложке книги, мы в двух словах это поясним. Flash МХ - это система для создания векторной анимации, имеющая достаточно развитые возможности программирования. Поскольку формат Flash стал стандартом и поддерживается всеми распространенными браузерами (в первую очередь, из-за его великолепной компактности и отличной переносимости), Flash в настоящее время используется не только для анимации, но и для интерактивных приложений и даже в качестве пользовательского интерфейса для сложных веб-ориентированных систем.
Как вы, без сомнения, догадываетесь, одним из самых употребительных слов в этой книге будет слово Flash. Так вот, чтобы не перегружать текст латиницей и сделать Flash MX для вас столь же родным, каким он стал для авторов книги, мы будем, как правило, писать слово Flash по-русски: Флэш или Флэш МХ (последний случай - это когда мы хотим подчеркнуть, о какой версии Флэш идет речь). А название Flash MX - латиницей - будем употреблять в основном в тех случаях, когда нам покажется уместным более официальный тон.
Наш курс лекций ориентирован на программистов. Сейчас Флэш стал достаточно мощной технологией, чтобы делать на ней крупные проекты. Крупные для Флэш - это, конечно, не проекты масштаба предприятия, а проекты, в которых занят десяток дизайнеров, делающих однотипные вещи. Этих дизайнеров нужно "пасти". Позаботиться о повторном использовании компонентов и об их расширении. Для этого такие общие компоненты надо написать и наладить коллективную работу с ними. Для подобной деятельности нужен опытный программист. Если так случилось, что этот программист - вы, то вам понадобится познакомиться с технологией Флэш. Вам нужно будет хотя бы в общих чертах представлять ее рисовательно-анимационные возможности. И максимально подробно - возможности программирования и организации коллективной работы. Для улучшения уровня подготовки дизайнера эта книга тоже может пригодиться - но только как дополнительное чтение. Посему в дальнейшем вас, читатель, я буду считать профессиональным программистом. А поскольку в наши дни довольно трудно найти профессионального программиста, который не знал бы либо С++, либо Java, то мы будем считать, что вы один из этих языков знаете. (Зубры ассемблера и Fortran, простите нас!)
Есть небольшая вероятность, что эта книга попадет в руки начальнику крупного флэш-проекта. Если этот начальник - вы, и проект еще не начался, послушайте нашего совета и не назначайте ответственным за технические вопросы самого опытного и искушенного дизайнера, если он прежде не работал программистом. Вы наверняка знаете, что для начальника проекта проект на пятьдесят человеко-месяцев - совсем не то же самое, что на пять. Поверьте, что с технической точки зрения разница тоже велика. Раньше проекты такого рода на Флэше не делались - технология была еще недостаточно разработана и применялась для создания отдельных анимационных модулей. Теперь на Флэше можно делать мощные интерфейсы, большие порталы (как бы ни ворчали на это те, у кого нет
В этой книге наиболее подробно описана версия Flash MX. В процессе подготовки книги к печати появилась версия Flash MX 2004. Она очень сильно расширена в первую очередь в сторону поддержки крупных проектов (крупных для Флэша). Тем не менее, информация по версии МХ все еще актуальна. Во-первых, многие компании работают с лицензионным программным обеспечением и еще не купили себе последнюю версию. Во-вторых, переход на новую версию - это всегда дело достаточно длительное. А начинать проект на инструментарии, который еще не изучен до конца, - дело рискованное. Так что, если ваши дизайнеры еще не перешли на версию МХ 2004, то и вам придется работать с тем, что есть. Многие советы по поводу Флэш МХ будут актуальны и для Флэш 5; но что для него годится, а что нет - об этом специально упоминать не будем. На сегодняшний день Флэш 5 уже бесспорно устарел.
Развитие "крупно-проектной" составляющей Флэш по версиям можно охарактеризовать следующим образом. В версии 4 можно было кое-как сделать кое-что. В версии 5 кое-что уже можно было сделать, как следует. В версии МХ кое-как уже можно было сделать все, что необходимо. Похоже, что в версии MX 2004 практически все уже можно сделать, как следует. Впрочем, совершенства, как известно, нет в этом мире. А мы уж постараемся, чтобы после прочтения этой книги вы смогли максимально снизить дозу "кое-как" в ваших проектах на Флэш МХ.
В предыдущем параграфе мы попытались рассказать о том, какая непосредственная польза от курса может быть получена. Однако польза - это даже в нашем материальном и меркантильном мире не единственный мотив познания. В конце концов, в программисты идут в первую очередь потому, что программировать интересно. Так вот, мы надеемся, что этот курс будет интересен программистам, которые любят изучать разнообразные языки. Несмотря на несомненное родство с Java и С++, ActionScript 1.0 (язык, встроенный в среду Флэш МХ) - весьма интересный и необычный язык. Чего стоит одно только прототипное наследование, на котором построена объектная модель языка. За счет отсутствия строгого контроля типов язык становится весьма гибким, несмотря на достаточно скромный набор языковых средств. И позволяет эмулировать даже такие сложные вещи, как множественное наследование (которого многим не хватает в Java). Да, конечно, есть язык, который чрезвычайно на ActionScript похож - это JavaScript. Оба они сделаны на основе стандарта
Кстати, даже если вы работаете с Flash MX 2004, ваши знания ActionScript 1.0 не пропадут даром. Во-первых, вы можете скомандовать среде Флэш МХ 2004 использовать при компиляции ActionScript 1.0 вместо ActionScript 2.0 (правда, это помешает вам использовать ряд встроенных компонентов). Кроме того, большая часть сведений, касающихся ActionScript 1.0 для ActionScript 2.0 также актуальна, просто во второй версии появились новые средства, которыми рекомендуется пользоваться вместо старых. (Последняя фраза касается в первую очередь объектной модели). Тем не менее, полной обратной совместимости между версиями языка нет; поэтому в МХ 2004 обратная совместимость реализована при помощи переключения используемой при компиляции версии ActionScript.
При написании курса мы старались помнить, что пишем отнюдь не справочник. Поэтому простого перечисления фактов здесь не будет. С другой стороны, нам хотелось ответить на те вопросы, которые рано или поздно возникают у программиста при знакомстве с такой технологией как Флэш МХ. Однако отвечать на вопросы до того, как их зададут - вещь малополезная. Поэтому в нашем курсе вы практически всегда будете сначала узнавать нечто, провоцирующее вопросы, а уж затем доберетесь до ответов. Разбор головоломок (с целью посмотреть, что же там внутри), как известно, один из наиболее эффективных методов обучения. Если вам такой метод не по душе, и вы хотите сразу добраться до ответов - читайте стандарт
А теперь, когда мы подробно описали достоинства нашего курса, перейдем к его недостаткам (которые мы, разумеется, тоже считаем достоинствами). Итак, недостает в нашем курсе информации, совершенно необходимой для дизайнера, но, как мы полагаем, совсем ненужной для программиста. А именно, информации о способах, приемах и инструментах, позволяющих создавать на Флэше все эти замечательные анимации, которые то и дело мешают нам бороздить просторы Internet. Если вы не только программист, но и художник - вам понадобится еще одна книга по Флэш МХ, на сей раз построенная стандартным способом и подробно рассматривающая все аспекты деятельности аниматора. В списке литературы вы найдете несколько таких книг. Мы же со своей стороны снабдим программистов исчерпывающей информацией по программному рисованию на Флэше. И еще неизвестно, кто же в результате - программист или аниматор - победит в этом художественном споре.
Лекции с первой по пятую являются безусловно необходимыми для понимания последующего материала. (Впрочем, если вы немного знакомы с тем, что собой представляет Флэш МХ, первую лекцию можно не читать. Однако при этом вы рискуете пропустить ряд важных тонкостей, например,
Теперь давайте обсудим, чем именно наш курс отличается от другой литературы по Флэш МХ. Во-первых, мы старались уделять максимальное внимание глубине изложения материала. Во-вторых, в курсе содержится и такая информация, которую читатель вряд ли сможет найти где-либо еще. В первую очередь это касается содержимого лекций 5, 7, 8, 10 и 13. Сейчас мы поясним, что конкретно в каждой из этих лекций читатель сможет найти только в нашей книге.
В лекциях 5 и 7 подробно описаны различные необычные ситуации, связанные с работой функций и с наследованием соответственно. В лекции 10 детально рассматриваются математические аспекты работы градиентных заливок и кривых Безье во Флэш МХ. В лекции 13 представлены разработанные авторами методики командной работы (автоматического обновления библиотечных компонентов и др.) в проекте, разделяющемся на "библиотечную" и "дизайнерскую" части.
Предметом особой гордости авторов является лекция 8, посвященная множественному наследованию. Фактически, в ней описано полноценное расширение языка ActionScript 1.0, применяемого в системе Флэш МХ (расширение это реализовано, разумеется, средствами самого ActionScript). Заинтересованные читатели могут попробовать перенести это расширение на очень близкий к ActionScript 1.0 язык JavaScript.
Но начнем мы, несмотря на все наши заверения о пренебрежении к анимационной части Флэш МХ, именно с нее. Очень краткое, на несколько страниц, введение в эти аспекты среды Флэш МХ, является безусловно необходимым. Иначе вы не будете знать, к чему же может быть применен ваш код, чем он сможет управлять.
В этом параграфе мы кратко упомянем основные концепции, относящиеся к "рисовательно-анимационной" части. Пока что вам не нужно добиваться их полного понимания, достаточно лишь знать, что такие вещи существуют. В следующем параграфе, посвященном по традиции программе "Hello world" вы увидите, как некоторые из этих концепций применяются.
Флэш - программа векторной анимации. Поэтому в ней, конечно, присутствует удобный
Теперь давайте условимся о терминологии.
Все, что нарисовано в готовом
Вообще-то
Каждый

Каждый прямоугольничек символизирует собой отдельный кадр. После компиляции и запуска , привязанных к родительским
Сейчас мы приступим к самому скучному разделу книг по программным продуктам - разделу пользовательского интерфейса среды разработки. Эта тема подробно освещается во множестве ранее вышедших книг по Флэш и при необходимости можно обратиться к любой из них. Мы же коснемся этой темы очень кратко, т.к. подавляющее большинство программистов старается в этот раздел вообще не заглядывать, а предпочитает быстренько со всем ознакомиться, используя "метод тыка". Правда, из-за этого можно оказаться в неведении о каких-то весьма полезных возможностях, например, не знать о существовании такой замечательной вещи как Movie Explorer, о котором мы в конце этого параграфа поговорим.
Итак, если вы чувствуете в себе силы одолеть скучный, но полезный кусок - читайте сей параграф сей же час. В противном случае пропускайте его и вернитесь к нему позже, когда захотите проверить, что, изучая интерфейс "методом тыка" не пропустили ничего существенного.
Интерфейс среды Flash MX состоит из набора панелей. Если вы зайдете в раздел главного меню - Window, то увидите полный перечень панелей, каждую из которых вы можете убирать и снова устанавливать.
Самая экзотическая панель - панель Timeline ("
Чтобы было не так скучно, давайте, играя с этой фразой, создадим простейший
Вот краткий сценарий предлагаемого
Надеемся, что вы поймете, что на такое обращение с ритуальной фразой нас подталкивает не только стремление быть оригинальными, но и богатые возможности Флэш МХ.
Произведем следующие действия. Слева на вертикальной панели Tools кликните на инструменте Text Tool (кнопка с буквой А ). В дальнейшем подобные последовательности будем записывать так: " Tools \ Text Tool ". Теперь кликните в любом месте рабочего поля и введите для пробы несколько
Если стало не намного лучше, придется увеличить шрифт. Для этого нужно взглянуть на панель Главное меню \ Window \ Properties, далее будем писать короче: " Properties ", ведь мы уже знаем, где можно разыскать все панели. Полное название панели Properties Inspector. Вполне возможно, что она у вас уже имеется где-то в главном окне, и возможно уже развернутая, если нет, то разверните ее, кликнув на любом месте свернутой панели, а еще точнее, по зоне серого цвета.
Это просто замечательная панель, на ней мы можем увидеть и изменить массу характеристик того, что выделено на рабочем поле. В данный момент выделенным является введенный нами текст. В центре панели имеется комбо-бокс (выпадающий список), где мы видим, какой шрифт был применен, а чуть правее находится окошко (элемент редактирования), где можно выставить размер шрифта. Также можно воспользоваться для этого ползунком, который появится, если нажать на кнопочку, расположенную справа от окошка. Поставьте шрифт побольше, например, 20, и наконец-то, давайте напишем: "Hello, World!". Написали? Теперь нажмите Ctrl + Enter, так запускается Test Movie ( Главное меню \ Control \ Test Movie ). Сейчас в окне предварительного просмотра вы видите желанную фразу - это перед вами первый и единственный кадр
Хотя фраза "Hello, World!" и написана, но что-то полного удовлетворения нет... ах да, конечно, мы ведь не написали ни строчки программного кода, а ритуал требует именно этого.
Давайте теперь используем для этой же цели язык программирования ActionScript. Но прежде всего, наверное, следует обнародовать программу наших действий, которая поможет воплотить в жизнь предложенный сценарий
Итак, приступим к выполнению намеченной программы. Чтобы создать второй кадр, на панели Timeline выделим второй кадр, кликнув мышкой, на "зебровидной"
Идем дальше. Выделим надпись "Hello, World!". Спрашивается, а как это сделать? А вот так: в верхнем левом углу панели Tools имеется инструмент Selection Tool, вот им и воспользуйтесь. Теперь давайте зайдем на панель Properties и увеличим размер шрифта на 10 единиц. Как это сделать, чтобы текст не обрезался границами текстового поля? Нужно сначала выбрать на панели Tools инструмент Text Tool и, кликнув на надписи, увеличить длину зоны, в которой будет располагаться увеличенная надпись, причем с запасом, не стесняясь, т.к. вплоть по шестой кадр мы с каждым кадром будем увеличивать шрифт на 10 единиц. Затем снова нужно выбрать инструмент Selection Tool, выделить им надпись и вот только теперь увеличить размер шрифта. Эту однообразную операцию проделайте вплоть до кадра шестого, в котором размер шрифта надписи достигнет 70 единиц, в седьмом кадре пусть тоже будет 70 единиц, а начиная с восьмого - уменьшайте шрифт тоже на 10 единиц в
каждом кадре и тогда в двенадцатом кадре размер шрифта снова будет равен 20 единицам. Запустите Test Movie ; вы сможете убедиться, что у нас получилась настоящая анимация. (Кстати, просмотреть последовательность кадров - без выполнения программного кода, который мы пока и не писали - можно непосредственно в том же окошке где происходит редактирование
Итак, результат мы получили. Конечно, можно было добиться того же, применив программирование, но зато какая наглядная демонстрация качеств панели Timeline при минимальных усилиях! (Надо сказать, что количество действий можно было радикально сократить, применив некоторые специфические анимационные приемы. Но эти приемы мы не будем обсуждать в нашей книге, ибо они все равно гораздо подробнее описаны в любой книге по Флэш для дизайнеров). Как бы то ни было, мы можем констатировать, что пункт первый программы действий нами выполнен.
Прежде чем мы пойдем дальше, мы должны сделать акцент на одной очень важной вещи. А именно, следует хорошо представлять себе, как сделать обычный кадр, а как -
Если же вы хотите создать
Нужно еще обратить внимание на то, что если на
А теперь вернемся к нашей анимации и продолжим выполнять намеченную программу действий.
Сделаем hello, в которой сейчас находится символьная строка "Hello, World!". (Пока что мы не будем обсуждать, где создана эта переменная, какой у нее тип и какова область видимости. Но в свое время мы обязательно до этого доберемся). В программном коде для тринадцатого кадра, мы собираемся присвоить переменной hello другое значение, например, "Hello, Flash!".
Терпение, еще немного. Теперь давайте перейдем на панель Actions (можно нажать F9 ). Если вы работаете с Флэш МХ, то вам нужно установить режим " Expert Mode ", а если вы работаете с Флэш МХ 2004 - вы и так в этом режиме. На правой части панели имеется горизонтальная линейка меню, а нам нужна крайняя правая кнопка этого меню: " View Options ". Воспользовавшись ею, и установите этот, так нужный нам, " Expert Mode ". Теперь хорошо бы проверить, что написано в combo box, расположенном ниже названия панели. Во Флэш МХ там должно быть следующее: "Actions for Frame 13 of Name Layer Layer 1", а для случая Флэш МХ 2004 подобную информацию можно получить, изучив дерево на панели, расположенной внизу слева на панели
Под уже, упоминавшейся горизонтальной линейкой меню имеется окно
hello = "Hello, Flash!";
Теперь взгляните на панель Timeline, в выделенном прямоугольнике тринадцатого кадра, наверху появилась маленькая буквочка "а", что означает, что к этому кадру имеется какой-то код. Чтобы иметь возможность полюбоваться на надпись "Hello Flash!" в течение одной секунды, вслед за тринадцатым кадром нужно ввести одиннадцать точно таких же кадров. Это делается так. Правой клавишей мышки кликнем на "зебровидной" полосе панели Timeline и на всплывающем меню выберем пункт " Insert Frame ". И так одиннадцать раз подряд. Конечно, можно и быстрее. Кликните по "зебре" левой мышкой и, не отпуская ее, протяните выделение до 24 кадра, а потом уже щелкайте по выделенному полю правой клавишей и выбирайте пункт " Insert Frame " (или нажимайте F5 ). Обратите внимание, мы вставляли не
Теперь превратим нашу надпись в кнопку. Это мы сделаем в 25 кадре, который следует сделать Symbol 1 ), а оно нас устраивает - нажимаем кнопку "OK". Вот
теперь можно написать код, который будет выполняться при нажатии на нашу надпись-кнопку. Заходим на панель Actions. Так как надпись-кнопка была выделена, на заголовке панели будет написано " Actions - Button ". Напишем следующий код:
on (press) {
gotoAndPlay("last");
stop();
}
Упрощенно говоря, этот код означает, что если произошло событие " press ", то нужно перейти к кадру, называющемуся " last ", выполнить его и остановиться. Кадр " last " может находиться в любом месте last ".
Учитывая все только что сказанное, выделим на панели Timeline 26 кадр, сделаем его last ".
Таким образом, мы уже начали выполнять третий пункт нашей программы. Однако не будем слишком увлекаться: мы ведь оставили несколько недоделанной нашу надпись-кнопку. Возвращаемся в 25 кадр, выделяем надпись, кликнем на ней правой клавишей мышки, в всплывающем меню выберем пункт " Edit ". Вот теперь мы находимся в таком окне редактирования нашей надписи, в котором мы можем изменять ее "кнопочные" свойства.
Не помешает несколько осмотреться: куда это нас закинуло. В общем-то, все знакомо, но панель Timeline совсем другая. Имеется только четыре кадра. Первый - естественно, Scene 1 ", теперь имеется надпись " Symbol 1 ". Чтобы вернуться на прежнее рабочее поле, т.е. в сцену 1, необходимо кликнуть на надписи " Scene 1 ", но это мы сделаем потом, а пока что продолжим редактировать нашу надпись-кнопку.
Давайте снова посмотрим на Timeline. Пожалуй, начнем пояснения с 4 кадра, который называется Hit. В нем можно обрисовать зону, достигнув которую, курсор мышки приобретает вид руки с вытянутым указательным пальцем, а сама кнопка приобретает такой вид, какой имеется в кадре Over. Естественно, все это будет при проигрывании готового Down. Первый кадр называется Up - в нем мы видим кнопку такой, какой она будет, если мышка вне зоны, обозначенной в кадре Hit.
Теперь будем действовать. Кадр Up оставим без изменений. Выберем кадр Over, сделаем его Down, пользуясь этим же инструментом, поверните надпись на 90 градусов. Не забудьте сделать этот кадр и следующий кадр Hit, Hit давайте сделаем следующее. На панели Tools выберем инструмент Oval Tool и нарисуем такой круг или овал, который бы закрывал надпись; пусть он будет закрашенный. Все, кнопка готова. Теперь нужно вернуться от редактирования кнопки к редактированию основной сцены. Для этого под

Например, надпись
Scene 1 Clip 1 Clip 5
означает, что вы редактируете Clip 5, который является частью Clip 1, который, в свою очередь, лежит на Scene 1. Так вот, вам надо щелкнуть мышью на надписи 2 и вы тут же вернетесь к ее редактированию.
Ну что ж, еще немного, и можно будет смотреть кино. Хотя нет: мы снова кое-что забыли. Видите ли, кнопку-то мы сделали, но воспользоваться ею мы не сможем, ибо как только мы попадем на 25 кадр и мельком увидим кнопку, как тут же перейдем на 26 кадр и нажать на нашу, созданную таким кропотливым трудом кнопочку, мы не успеем. Значит нам нужно в 25 кадре "остановиться, оглянуться".
Чтобы все происходило так, как нам надо, следует выделить на панели Actions 25 кадр и, убедившись, что на титульном поле панели написано: " ", написать в
stop();
Возвращаемся на 26 кадр. Давайте нарисуем на правом краю рабочего поля, напротив надписи "Hello, World!", чудище с широко открытой зубастой пастью. Для рисования следует взять Tools \ Pencil Tool, а в разделе Options (этот раздел находится в самом низу панели Tools) выбрать Ink, т.е. выбрать такой режим рисования линии, когда не происходит ни сглаживания нарисованной линии (опция Smooth ), ни ее выпрямления (опция Straighten ); при опции Ink, как нарисовали - так и будет. Хорошо бы это чудище закрасить. Возьмите для этого инструмент Paint Bucket Tool. Обратите внимание на раздел панели Tools, который называется Color, а в нем, в свою очередь есть опция Fill Color, там вы подберете подходящий цвет заливки. Еще ниже имеются опции, где, нажав на левую пиктограммку, желательно выбрать модификатор Close Large Gaps. Вот теперь можно кликнуть по чудищу курсором, дабы оно залилось все выбранным вами цветом.
Нарисовали? Теперь превратим чудище из набора графических примитивов в kuzdra, помните знаменитую фразу: "Глокая куздра штеко будланула бокра и кудрячит бокренка"? Мы подозреваем, что нарисованное вами чудище чем-то похоже на эту куздру. Так и напишите kuzdra, без кавычек.
Нажмите F9, чтобы зайти на панель Action, и, убедившись, что вы действительно на панели " Action - movie clip ", напишите следующий код:
onClipEvent (mouseDown) {
this._x -= 15;
}
Все! Готово! Нажимайте Сtrl+Enter. Ваш
Ну, вот, наконец-то мы выполнили 3 пункт нашей программы. Переходим к пункту четвертому.
Давайте посмотрим на структуру
Для этого воспользуемся панелью Movie Explorer, попасть на которую можно, нажав комбинацию клавиш Alt + F3. (ниже показан возможный вид этой панели - не для созданной нами анимации про куздру, а для другого простого

И посмотрите только, какая красота открывается нашему взору! Здесь можно увидеть все, что есть "за душой" у каждого кадра. Конечно, если вы видите только одну надпись - Scene 1, наши восторги вас удивляют. В таком случае, нажимайте последовательно на кнопки расположенные вверху панели, правее надписи Show, и перед вами постепенно возникнет поистине живописная картина. Кадры, слои, объекты, текстовые поля, фрагменты кода - все содержимое вашего
Без панели Movie Explorer не обойтись, если вам нужно разобраться в чужом
Если вы выделили на Display List какой-то участок дерева, то пункт первый - Go to Location - перекинет вас на рабочее поле соответствующего кадра. Если же вы выделили строку типа " Actions for Symbol 2 " и у вас была открыта панель Actions, то, выбрав пункт Go to Location, вы тут же сможете корректировать код соответствующий именно Symbol 2. Между прочим, все можно ускорить, если просто дважды кликнуть правой клавишей мышки по интересующему вас участку дерева - это действие соответствует выбору пункта Go to Location.
А вот еще один интересный пункт меню - Find in Library. Выделите строку дерева, где написано Symbol 1, а теперь выберите этот пункт. Вы оказались в библиотеке, где имеется всего два
И последнее, о чем просто нельзя не упомянуть: прямо на панели Movie Explorer вы можете изменить текст в любом кадре или же тип шрифта этого текста.
С
Как это ни странно, таких способов действительно довольно много. Первый из них - это нажать F9. Панель
В
А теперь про вторую исключительно полезную вещь в панели
Самым популярным разделом, безусловно, является раздел Objects. В нем особенно важны Core и Movie, а в Objects / Core первое место, несомненно, держит Array. Массивы во Флэше имеют богатую функциональность, и вам нередко придется заглядывать в этот пункт, дабы в очередной раз проверить, какой из методов - slice или - вам надлежит применить в данной ситуации; а также, в какую сторону сдвигает массив метод shift, а в какую - unshift. На первых порах вам также нужно будет часто заглядывать в Objects / Core / String и Objects / Core / Object.
Еще один важный раздел Reference - это Actions. Загляните в Actions / Variables и Actions / Miscellaneous. Если вы все-таки решите сделать какую-то рисованную анимацию, вам пригодится раздел Actions / Movie Control (не путайте с Actions / Movie Clip Control - в последнем речь идет о дублировании
Не забывайте также, что в справочнике есть индекс, так что можно искать какие-либо вещи не по разделам, а в алфавитном порядке.
К сожалению, в панели
Как посмотреть, что у нас в результате получилось, то есть, работу
Далее рассмотрим различные варианты запуска
Данный вариант запуска самый быстрый, простой и удобный для отладки. Выберите Control / Test Movie ( Ctrl+Enter ),
Для того чтобы вернуться к редактированию
Обратите внимание, что все сообщения об ошибках, а также результаты работы операторов trace будут выводиться в специальное окно вывода, закрыть или открыть которое можно, нажав клавишу F2. В это же окно выводятся и результаты работы команд List Objects и List Variables (учтите, что при выполнении этих команд предыдущее содержимое окна стирается). Если вы закроете это окно, его содержимое опять-таки будет стерто и при его повторном открывании окно появится пустым.


Недостатки запуска в среде:
Допустим, у вас уже есть скомпилированный
Недостатки:
Пользуйтесь данным типом запуска, если хотите посмотреть на работу

Недостатки:
Как мы уже писали, в процессе установки Флэш МХ на ваш компьютер будет установлен консольный (standalone) плеер, который позволяет запускать *.swf-файлы отдельно от среды разработки и браузера. Двойной клик на *.swf-файле приведет именно к запуску консольного плеера. Однако Флэш МХ предоставляет возможность запуска
После того, как вы запустили <OBJECT-EMBED>, пример которого приведен ниже и код которого вам на начальных этапах редактировать не придется. Вся остальная часть страницы в вашем полном распоряжении.
Имейте только в виду, что в следующий раз, когда вы нажмете Ctrl+F12, страница будет перегенерирована средой Flash MX, что может привести к потере ваших изменений.
Вот упомянутый выше html-код:
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash /swflash.cab#version=6,0,0,0" WIDTH="550" HEIGHT="400" id="run2" ALIGN=""> <PARAM NAME=movie VALUE="run2.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="run2.swf" quality=high bgcolor=#FFFFFF WIDTH="550" HEIGHT="400" NAME="run2" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE ="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>
А что делать, если у вас есть большой проект, в котором все страницы выглядят похожим образом, а
Нужно использовать
Итак, чтобы создать новый

Или вместо этого можно выбрать пункт меню Insert / New Symbol. В результате появится следующий диалог:

Если вы нажмете в нем кнопку Advanced, то увидите следующий вариант диалога

Этот же вариант диалога мог появиться перед вами и сразу - в том случае, если вы раскрывали предыдущий диалог этого типа кнопкой Advanced. Нам сейчас не нужны дополнительные возможности, поэтому можно вернуться к сокращенному виду, нажав кнопку Basic. Введите в текстовой строке имя . После нажатия ОК вы увидите, что в окне Library появилась новая строка с именем вашего

Вид этой полоски, изображенный на рисунке, соответствует редактированию Symbol 4. Напомним, что если вы захотите вернуться к редактированию основной сцены, вам нужно будет щелкнуть мышью по надписи Scene 1 (вообще-то, название основной сцены можно изменить и даже сделать несколько сцен; все это можно сделать с помощью панели управления сценами - знать бы только, зачем. На самом-то деле, сцена - это всего лишь сгруппированные кадры в корневом
Создать
Если вы хотите управлять созданными
Как управлять вертикальным порядком ( z-order 'ом) созданных
Заметим, что можно создавать новые createEmptyMovieClip. И затем в этих
Также можно дублировать уже имеющиеся duplicateMovieClip. Об этом мы подробнее поговорим в третьей лекции.
Вы уже видели, что в диалоге создания , и . То, что кнопка отличается от обычного отличается от ? Оказывается, имеет одну важную особенность: его кадры всегда синхронизированы с кадрами "родительского" 'a). И если мы программным образом управляем "родительским" автоматически останется синхронизирован с родителем. А вот если бы внутри лежал , то ему потребовалось бы отдельно подавать те же команды, что и родителю. Итак, использование - это тот достаточно редкий случай, когда все же используют гораздо чаще, чем ),
С кнопками вы уже немного знакомы по параграфу "Hello, World!". А если вы прочли его невнимательно - прочтите еще раз и проделайте все, что в нем описано, ибо там зарыты драгоценные крохи знаний о простейших приемах рисования и анимации, о которых мы в этой книге практически не говорим.
Но, предположим, вы умеете делать кнопки и описывать, как кнопка будет реагировать на нажатие. Однако нажатие - это ведь не единственное, что с кнопкой может происходить. Пользователь может, например, просто навести на нее мышь - а вы уже захотите выполнить по этому поводу какой-то программный код. Как реализовать такое поведение? Оказывается, каждому из этих случаев соответствует отдельное событие, посылаемое кнопке системой Флэш МХ. А значит, мы можем задать реакции на все эти события (и на каждое в отдельности). Кстати, сейчас как раз время запомнить одну общую вещь: где во Флэш МХ может встречаться выполняемый код. Мы уже говорили, что, как правило, он записывается в каком-то из кадров (и выполняется при демонстрации этого кадра). Кроме того, код может быть приписан к
Итак, сделать реакцию на событие можно тремя способами: с помощью одной из двух специальных конструкций языка ActionScript или с помощью методов класса . Мы рассмотрим несколько более подробно специальные конструкции и кратко расскажем о методе переопределения функций реакции на события класса . Последний рассказ будет кратким вынужденно, поскольку детали необходимых для него конструкций (например, определения функций во Флэш МХ) мы разберем позднее. Так вот, первая из специальных конструкций - конструкция on( ...){ /* Код */}. Вторая - это конструкция onClipEvent(...){ /* Код */ }. На самом деле, вместо двух конструкций можно вполне обойтись одной; то, что их именно две, обусловлено историческими причинами. Во Flash 5 конструкцию on(...){...} можно было использовать только с кнопкой, а onClipEvent(...){...} - только с 'ом. Во Флэш МХ они полностью равноправны и работают практически одинаково (но "обслуживают" различные события, характерные для кнопок и для обычных on(...){...} могут присутствовать следующие наименования событий:
press - кнопка нажата.release - кнопка отпущена.releaseOutside - мышь отпущена после того, как была нажата на кнопке, а затем выведена за ее пределы.rollOut - мышь в ненажатом состоянии вышла за пределы кнопки.rollOver - мышь в ненажатом состоянии вошла в область кнопки.dragOut - мышь в нажатом состоянии вышла за пределы кнопки (при этом реализуется механизм " capture ", то есть события по поводу мыши, перемещаемой в нажатом состоянии, посылаются только той кнопке, на которой она была нажата).dragOver - это событие может посылаться в двух случаях, которые слегка различаются между собой. Случай первый: мышь возвращается на кнопку в нажатом состоянии (после того, как была нажата на кнопке, а затем выехала оттуда). Это событие посылается для всех типов кнопок. Случай второй: мышь въезжает на кнопку в нажатом состоянии после того, как была нажата снаружи кнопки. В этом случае событие будет посылаться, только если для кнопки была выбрана опция " Track as Menu Item ". (По умолчанию выбрана опция " Track as Button "). Чтобы установить эту опцию, нужно выделить кнопку и зайти в панель Properties. Комбо-бокс с двумя вышеупомянутыми опциями размещен справа от кнопки Swap. Уточним, что если мышь въезжает на кнопку после того, как была нажата на другой кнопке, то событие dragOver не будет послано даже в том случае, когда выбрана опция " Track as Menu Item ". Это следствие работы механизма " capture ".keyPress - нажата определенная клавиша на клавиатуре. В данном случае после слова keyPress в кавычках должна быть указана нужная клавиша (например, keyPress "a" ). Если вы хотите указать какую-либо специальную клавишу, то нужно внутри кавычек в угловых скобках написать ее название (например, keyPress "<PageDown>" ). Набрав on и затем открывающую круглую скобку в keyPress и специальных клавиш. Вам может показаться странным, что указывается только одна клавиша - это является рудиментом тех времен, когда конструкция on(...){...} использовалась только для кнопок, а реакция на нажатие клавиши на клавиатуре делалась для создания акселераторов. Если вам все же хочется использовать on(...){...} для реакции на несколько разных
клавиш, вам придется написать конструкцию on(...){...} несколько раз.Все приведенные выше наименования событий пишутся без кавычек (мы не говорим здесь о коде клавиши, являющемся дополнением к событию keyPress ). Кроме того, в круглых скобках может быть перечислено несколько наименований событий; в этом случае они разделяются запятой.
Мы сейчас говорили о кнопке, но все то же самое может быть написано в коде, относящемся к любому on(...){...} в коде, относящемся к любому
Подчеркнем еще раз, что конструкции on(...){...} и onClipEvent(...){...} могут быть использованы только в специальном, довольно экзотическом месте - коде, относящемся не к on(...){...} и onClipEvent(...){...} являются устаревшими. Все-таки они предоставляют достаточно удобный способ прикрепить код реакции на события непосредственно к конкретному ). Это позволит сконцентрировать код только в
Однако, занявшись критикой конструкций on(...){...} и onClipEvent(...){...}, мы отвлеклись от их описания; а ведь мы еще не сказали, что пишется в фигурных скобках. Оказывается, в фигурных скобках может быть написан любой код на ActionScript 1.0 (кроме, разумеется, самих конструкций on(...){...} и onClipEvent(...){...} ).
Теперь опишем подробнее конструкцию onClipEvent(...){...}. В круглых скобках она может содержать следующее:
load - unload - enterFrame - вызывается в каждом кадре перед выполнением кода, который в этом кадре написан.mouseMove - мышь сдвинулась (ее координаты относительно начала координат данного _xmouse и _ymouse ).mouseDown - левая кнопка мыши нажата.mouseUp - левая кнопка мыши отпущена.keyDown - нажата клавиша на клавиатуре (получить ASCII-код этой клавиши можно, вызвав Key.getCode() - специальный метод класса Key. Затем можно воспользоваться методом String.fromCharCode, чтобы преобразовать этот код в строку).keyUp - отпущена клавиша на клавиатуре. Информацию об этой клавише получаем так же, как и для события keyDown.data - специфическое событие, связанное с ситуациями, когда Приведем примеры использования конструкций on(...){...} и onClipEvent(...){...}. Один из стандартных способов использования первой из них предназначен для реализации перетаскивания ( drag and drop ). Вот пример такого кода:
on(press){
trace("pressed");
startDrag(this);
}
on(release){
trace("released");
stopDrag();
}
Поместите этот код на
А вот пример использования 2.
onClipEvent(keyDown) {
if (Key.getCode() == Key.RIGHT) {
this._x += 10;
} else if (Key.getCode() == Key.LEFT){
this._x -= 10;
}
}
Если вы снабдите
Наконец, скажем пару слов о методах класса MovieClip. Все события, о которых мы здесь говорили, с помощью этих методов можно поймать и обработать. Собственно, это есть самый логичный и естественный способ работать с событиями. Выглядит эта работа примерно так:
clip.onEnterFrame = function(){
// Здесь пишется код обработки события
}
А более подробно мы об этом расскажем в начале третьей лекции.
Какая программа может обойтись без вывода текста?
Во Flash MX существует один-единственный контрол (элемент управления), позволяющий выводить (и вводить) текст, который также используется всеми стандартными компонентами Flash MX, и не предусмотрено никакой возможности (в том числе программной) вывести текст, минуя текстовые поля (разве что, скомпоновав его из картинок). Правда, создавать текстовые поля можно не только "вручную", но и программно (о чем мы поговорим позже, в третьей лекции).
В этом параграфе мы рассмотрим только самые основы работы с текстовыми полями, которые бывают трех типов:


У
Нужно упомянуть еще одну вещь (она относится к текстовым полям любых видов, не только
v = "new text", если v указано в поле Var. Переменная должна быть создана в том же Текст в
А что, если вы собираетесь заводить текстовые поля программно (для чего служит метод класса под названием createTextField )? Можно ли как-то встроить все необходимые шрифты? Для этого вам нужно как минимум завести в библиотеке (с отмеченной галочкой " Export in first frame ")
При работе с экзотическими шрифтами возникает также следующая проблема: предположим, вам необходимо подобрать шрифты для большого количества текстовых полей. И быстро поменять их все сразу, если понадобится сменить стиль оформления. Все это действительно можно сделать. Откройте панель библиотеки MyFont ). Если вы теперь создадите текстовое поле, то в выпадающем списке доступных шрифтов вы увидите и надпись MyFont (помеченную звездочкой - это должно напоминать вам о том, что данный шрифт является псевдонимом, определенным в библиотеке). Теперь, меняя в свойствах MyFont соответствующий ему шрифт, вы одновременно меняете шрифт во всех полях, в которых установлен шрифт MyFont (скорее всего, вам надо будет перевести фокус ввода на рабочую область, чтобы произошла перерисовка текста в текстовых полях). Но все это не значит, что после этого вы можете сохранить ваш *.fla-файл и переносить его на другую машину вместе с фонтом. Описанный нами механизм не сохраняет фонт внутрь *.fla-файла, он всего лишь делает псевдоним, и только.
Эти text ). Чтобы сделать такое поле, нужно в выпадающем списке левой части панели Properties выбрать Input Text.
Ситуация со встраиваемыми фонтами для текстовых полей типа Input Text полностью аналогична той, что имеет место для полей типа Dynamic Text. Если какие-либо знаки отсутствуют среди встроенных хотя бы в одно поле, загруженное к данному моменту, то пользователю эти знаки набрать не удастся.
Все три типа текстовых полей поддерживают элементарное форматирование (можно изменять цвет, шрифт, его размер и тип начертания, выравнивание). Кроме того, можно включать и отключать рамку ( Border ) у текстовых полей типа Dynamic и Input:

Многие параметры можно изменять программно (за это отвечают методы объектов TextField и TextFormat ).
Важным является тот факт, что в

После этого в свойство htmlText текстового поля можно записывать html-разметку. Например:
myTextField.htmlText = "<b>Bold</b>Not bold".
Еще раз подчеркнем: писать html-форматированную строку прямо в текстовом поле в процессе редактирования бессмысленно. Форматирование будет воспринято только в том случае, если строка будет передана через свойство htmlText.
Надо, конечно, отметить, что html-форматирование, которое можно применять при работе с текстовыми полями, довольно ограничено. Однако жирность текста, его наклон, подчеркивания, цвета, тип шрифта и настройки параграфа (для многострочных текстов) задавать можно. Кроме того, разрешается использовать гиперссылки.
Интересно, что, аналогично вызову JavaScript-кода из гиперссылки при помощи записи наподобие
myTextField.htmlText="<u><a href='javascript:alert(1)'>link</a></u>"
(в данном случае при нажатии на ссылку выводится диалоговое окно), можно по нажатию на нее вызывать и функцию ActionScript. Предположим, нами была определена функция reactionFunc(arg) (о том, как определять свои функции в ActionScript, подробно говорится в пятой лекции). Тогда по нажатию на ссылку, определенную с помощью следующего кода
myTextField.htmlText = "<u><a href='asfunction:reactionFunc,fromLink1'>link1</a></u>"
будет вызвана функция reactionFunc, причем в качестве аргумента ей будет передана строка " fromLink1 ". Будьте внимательны: между asfunction: и именем функции не должно быть никаких разделителей (иначе они будут проинтерпретированы как часть имени функции).
Наконец, заметим, что присвоить htmlText можно и
На тот случай, если вы не знаете (или знаете весьма смутно), что означает слово Flash на обложке книги, мы в двух словах это поясним. Flash МХ - это система для создания векторной анимации, имеющая достаточно развитые возможности программирования. Поскольку формат Flash стал стандартом и поддерживается всеми распространенными браузерами (в первую очередь, из-за его великолепной компактности и отличной переносимости), Flash в настоящее время используется не только для анимации, но и для интерактивных приложений и даже в качестве пользовательского интерфейса для сложных веб-ориентированных систем.
Как вы, без сомнения, догадываетесь, одним из самых употребительных слов в этой книге будет слово Flash. Так вот, чтобы не перегружать текст латиницей и сделать Flash MX для вас столь же родным, каким он стал для авторов книги, мы будем, как правило, писать слово Flash по-русски: Флэш или Флэш МХ (последний случай - это когда мы хотим подчеркнуть, о какой версии Флэш идет речь). А название Flash MX - латиницей - будем употреблять в основном в тех случаях, когда нам покажется уместным более официальный тон.
Наш курс лекций ориентирован на программистов. Сейчас Флэш стал достаточно мощной технологией, чтобы делать на ней крупные проекты. Крупные для Флэш - это, конечно, не проекты масштаба предприятия, а проекты, в которых занят десяток дизайнеров, делающих однотипные вещи. Этих дизайнеров нужно "пасти". Позаботиться о повторном использовании компонентов и об их расширении. Для этого такие общие компоненты надо написать и наладить коллективную работу с ними. Для подобной деятельности нужен опытный программист. Если так случилось, что этот программист - вы, то вам понадобится познакомиться с технологией Флэш. Вам нужно будет хотя бы в общих чертах представлять ее рисовательно-анимационные возможности. И максимально подробно - возможности программирования и организации коллективной работы. Для улучшения уровня подготовки дизайнера эта книга тоже может пригодиться - но только как дополнительное чтение. Посему в дальнейшем вас, читатель, я буду считать профессиональным программистом. А поскольку в наши дни довольно трудно найти профессионального программиста, который не знал бы либо С++, либо Java, то мы будем считать, что вы один из этих языков знаете. (Зубры ассемблера и Fortran, простите нас!)
Есть небольшая вероятность, что эта книга попадет в руки начальнику крупного флэш-проекта. Если этот начальник - вы, и проект еще не начался, послушайте нашего совета и не назначайте ответственным за технические вопросы самого опытного и искушенного дизайнера, если он прежде не работал программистом. Вы наверняка знаете, что для начальника проекта проект на пятьдесят человеко-месяцев - совсем не то же самое, что на пять. Поверьте, что с технической точки зрения разница тоже велика. Раньше проекты такого рода на Флэше не делались - технология была еще недостаточно разработана и применялась для создания отдельных анимационных модулей. Теперь на Флэше можно делать мощные интерфейсы, большие порталы (как бы ни ворчали на это те, у кого нет
В этой книге наиболее подробно описана версия Flash MX. В процессе подготовки книги к печати появилась версия Flash MX 2004. Она очень сильно расширена в первую очередь в сторону поддержки крупных проектов (крупных для Флэша). Тем не менее, информация по версии МХ все еще актуальна. Во-первых, многие компании работают с лицензионным программным обеспечением и еще не купили себе последнюю версию. Во-вторых, переход на новую версию - это всегда дело достаточно длительное. А начинать проект на инструментарии, который еще не изучен до конца, - дело рискованное. Так что, если ваши дизайнеры еще не перешли на версию МХ 2004, то и вам придется работать с тем, что есть. Многие советы по поводу Флэш МХ будут актуальны и для Флэш 5; но что для него годится, а что нет - об этом специально упоминать не будем. На сегодняшний день Флэш 5 уже бесспорно устарел.
Развитие "крупно-проектной" составляющей Флэш по версиям можно охарактеризовать следующим образом. В версии 4 можно было кое-как сделать кое-что. В версии 5 кое-что уже можно было сделать, как следует. В версии МХ кое-как уже можно было сделать все, что необходимо. Похоже, что в версии MX 2004 практически все уже можно сделать, как следует. Впрочем, совершенства, как известно, нет в этом мире. А мы уж постараемся, чтобы после прочтения этой книги вы смогли максимально снизить дозу "кое-как" в ваших проектах на Флэш МХ.
В предыдущем параграфе мы попытались рассказать о том, какая непосредственная польза от курса может быть получена. Однако польза - это даже в нашем материальном и меркантильном мире не единственный мотив познания. В конце концов, в программисты идут в первую очередь потому, что программировать интересно. Так вот, мы надеемся, что этот курс будет интересен программистам, которые любят изучать разнообразные языки. Несмотря на несомненное родство с Java и С++, ActionScript 1.0 (язык, встроенный в среду Флэш МХ) - весьма интересный и необычный язык. Чего стоит одно только прототипное наследование, на котором построена объектная модель языка. За счет отсутствия строгого контроля типов язык становится весьма гибким, несмотря на достаточно скромный набор языковых средств. И позволяет эмулировать даже такие сложные вещи, как множественное наследование (которого многим не хватает в Java). Да, конечно, есть язык, который чрезвычайно на ActionScript похож - это JavaScript. Оба они сделаны на основе стандарта
Кстати, даже если вы работаете с Flash MX 2004, ваши знания ActionScript 1.0 не пропадут даром. Во-первых, вы можете скомандовать среде Флэш МХ 2004 использовать при компиляции ActionScript 1.0 вместо ActionScript 2.0 (правда, это помешает вам использовать ряд встроенных компонентов). Кроме того, большая часть сведений, касающихся ActionScript 1.0 для ActionScript 2.0 также актуальна, просто во второй версии появились новые средства, которыми рекомендуется пользоваться вместо старых. (Последняя фраза касается в первую очередь объектной модели). Тем не менее, полной обратной совместимости между версиями языка нет; поэтому в МХ 2004 обратная совместимость реализована при помощи переключения используемой при компиляции версии ActionScript.
При написании курса мы старались помнить, что пишем отнюдь не справочник. Поэтому простого перечисления фактов здесь не будет. С другой стороны, нам хотелось ответить на те вопросы, которые рано или поздно возникают у программиста при знакомстве с такой технологией как Флэш МХ. Однако отвечать на вопросы до того, как их зададут - вещь малополезная. Поэтому в нашем курсе вы практически всегда будете сначала узнавать нечто, провоцирующее вопросы, а уж затем доберетесь до ответов. Разбор головоломок (с целью посмотреть, что же там внутри), как известно, один из наиболее эффективных методов обучения. Если вам такой метод не по душе, и вы хотите сразу добраться до ответов - читайте стандарт
А теперь, когда мы подробно описали достоинства нашего курса, перейдем к его недостаткам (которые мы, разумеется, тоже считаем достоинствами). Итак, недостает в нашем курсе информации, совершенно необходимой для дизайнера, но, как мы полагаем, совсем ненужной для программиста. А именно, информации о способах, приемах и инструментах, позволяющих создавать на Флэше все эти замечательные анимации, которые то и дело мешают нам бороздить просторы Internet. Если вы не только программист, но и художник - вам понадобится еще одна книга по Флэш МХ, на сей раз построенная стандартным способом и подробно рассматривающая все аспекты деятельности аниматора. В списке литературы вы найдете несколько таких книг. Мы же со своей стороны снабдим программистов исчерпывающей информацией по программному рисованию на Флэше. И еще неизвестно, кто же в результате - программист или аниматор - победит в этом художественном споре.
Лекции с первой по пятую являются безусловно необходимыми для понимания последующего материала. (Впрочем, если вы немного знакомы с тем, что собой представляет Флэш МХ, первую лекцию можно не читать. Однако при этом вы рискуете пропустить ряд важных тонкостей, например,
Теперь давайте обсудим, чем именно наш курс отличается от другой литературы по Флэш МХ. Во-первых, мы старались уделять максимальное внимание глубине изложения материала. Во-вторых, в курсе содержится и такая информация, которую читатель вряд ли сможет найти где-либо еще. В первую очередь это касается содержимого лекций 5, 7, 8, 10 и 13. Сейчас мы поясним, что конкретно в каждой из этих лекций читатель сможет найти только в нашей книге.
В лекциях 5 и 7 подробно описаны различные необычные ситуации, связанные с работой функций и с наследованием соответственно. В лекции 10 детально рассматриваются математические аспекты работы градиентных заливок и кривых Безье во Флэш МХ. В лекции 13 представлены разработанные авторами методики командной работы (автоматического обновления библиотечных компонентов и др.) в проекте, разделяющемся на "библиотечную" и "дизайнерскую" части.
Предметом особой гордости авторов является лекция 8, посвященная множественному наследованию. Фактически, в ней описано полноценное расширение языка ActionScript 1.0, применяемого в системе Флэш МХ (расширение это реализовано, разумеется, средствами самого ActionScript). Заинтересованные читатели могут попробовать перенести это расширение на очень близкий к ActionScript 1.0 язык JavaScript.
Но начнем мы, несмотря на все наши заверения о пренебрежении к анимационной части Флэш МХ, именно с нее. Очень краткое, на несколько страниц, введение в эти аспекты среды Флэш МХ, является безусловно необходимым. Иначе вы не будете знать, к чему же может быть применен ваш код, чем он сможет управлять.
В этом параграфе мы кратко упомянем основные концепции, относящиеся к "рисовательно-анимационной" части. Пока что вам не нужно добиваться их полного понимания, достаточно лишь знать, что такие вещи существуют. В следующем параграфе, посвященном по традиции программе "Hello world" вы увидите, как некоторые из этих концепций применяются.
Флэш - программа векторной анимации. Поэтому в ней, конечно, присутствует удобный
Теперь давайте условимся о терминологии.
Все, что нарисовано в готовом
Вообще-то
Каждый

Каждый прямоугольничек символизирует собой отдельный кадр. После компиляции и запуска , привязанных к родительским
Сейчас мы приступим к самому скучному разделу книг по программным продуктам - разделу пользовательского интерфейса среды разработки. Эта тема подробно освещается во множестве ранее вышедших книг по Флэш и при необходимости можно обратиться к любой из них. Мы же коснемся этой темы очень кратко, т.к. подавляющее большинство программистов старается в этот раздел вообще не заглядывать, а предпочитает быстренько со всем ознакомиться, используя "метод тыка". Правда, из-за этого можно оказаться в неведении о каких-то весьма полезных возможностях, например, не знать о существовании такой замечательной вещи как Movie Explorer, о котором мы в конце этого параграфа поговорим.
Итак, если вы чувствуете в себе силы одолеть скучный, но полезный кусок - читайте сей параграф сей же час. В противном случае пропускайте его и вернитесь к нему позже, когда захотите проверить, что, изучая интерфейс "методом тыка" не пропустили ничего существенного.
Интерфейс среды Flash MX состоит из набора панелей. Если вы зайдете в раздел главного меню - Window, то увидите полный перечень панелей, каждую из которых вы можете убирать и снова устанавливать.
Самая экзотическая панель - панель Timeline ("
Чтобы было не так скучно, давайте, играя с этой фразой, создадим простейший
Вот краткий сценарий предлагаемого
Надеемся, что вы поймете, что на такое обращение с ритуальной фразой нас подталкивает не только стремление быть оригинальными, но и богатые возможности Флэш МХ.
Произведем следующие действия. Слева на вертикальной панели Tools кликните на инструменте Text Tool (кнопка с буквой А ). В дальнейшем подобные последовательности будем записывать так: " Tools \ Text Tool ". Теперь кликните в любом месте рабочего поля и введите для пробы несколько
Если стало не намного лучше, придется увеличить шрифт. Для этого нужно взглянуть на панель Главное меню \ Window \ Properties, далее будем писать короче: " Properties ", ведь мы уже знаем, где можно разыскать все панели. Полное название панели Properties Inspector. Вполне возможно, что она у вас уже имеется где-то в главном окне, и возможно уже развернутая, если нет, то разверните ее, кликнув на любом месте свернутой панели, а еще точнее, по зоне серого цвета.
Это просто замечательная панель, на ней мы можем увидеть и изменить массу характеристик того, что выделено на рабочем поле. В данный момент выделенным является введенный нами текст. В центре панели имеется комбо-бокс (выпадающий список), где мы видим, какой шрифт был применен, а чуть правее находится окошко (элемент редактирования), где можно выставить размер шрифта. Также можно воспользоваться для этого ползунком, который появится, если нажать на кнопочку, расположенную справа от окошка. Поставьте шрифт побольше, например, 20, и наконец-то, давайте напишем: "Hello, World!". Написали? Теперь нажмите Ctrl + Enter, так запускается Test Movie ( Главное меню \ Control \ Test Movie ). Сейчас в окне предварительного просмотра вы видите желанную фразу - это перед вами первый и единственный кадр
Хотя фраза "Hello, World!" и написана, но что-то полного удовлетворения нет... ах да, конечно, мы ведь не написали ни строчки программного кода, а ритуал требует именно этого.
Давайте теперь используем для этой же цели язык программирования ActionScript. Но прежде всего, наверное, следует обнародовать программу наших действий, которая поможет воплотить в жизнь предложенный сценарий
Итак, приступим к выполнению намеченной программы. Чтобы создать второй кадр, на панели Timeline выделим второй кадр, кликнув мышкой, на "зебровидной"
Идем дальше. Выделим надпись "Hello, World!". Спрашивается, а как это сделать? А вот так: в верхнем левом углу панели Tools имеется инструмент Selection Tool, вот им и воспользуйтесь. Теперь давайте зайдем на панель Properties и увеличим размер шрифта на 10 единиц. Как это сделать, чтобы текст не обрезался границами текстового поля? Нужно сначала выбрать на панели Tools инструмент Text Tool и, кликнув на надписи, увеличить длину зоны, в которой будет располагаться увеличенная надпись, причем с запасом, не стесняясь, т.к. вплоть по шестой кадр мы с каждым кадром будем увеличивать шрифт на 10 единиц. Затем снова нужно выбрать инструмент Selection Tool, выделить им надпись и вот только теперь увеличить размер шрифта. Эту однообразную операцию проделайте вплоть до кадра шестого, в котором размер шрифта надписи достигнет 70 единиц, в седьмом кадре пусть тоже будет 70 единиц, а начиная с восьмого - уменьшайте шрифт тоже на 10 единиц в
каждом кадре и тогда в двенадцатом кадре размер шрифта снова будет равен 20 единицам. Запустите Test Movie ; вы сможете убедиться, что у нас получилась настоящая анимация. (Кстати, просмотреть последовательность кадров - без выполнения программного кода, который мы пока и не писали - можно непосредственно в том же окошке где происходит редактирование
Итак, результат мы получили. Конечно, можно было добиться того же, применив программирование, но зато какая наглядная демонстрация качеств панели Timeline при минимальных усилиях! (Надо сказать, что количество действий можно было радикально сократить, применив некоторые специфические анимационные приемы. Но эти приемы мы не будем обсуждать в нашей книге, ибо они все равно гораздо подробнее описаны в любой книге по Флэш для дизайнеров). Как бы то ни было, мы можем констатировать, что пункт первый программы действий нами выполнен.
Прежде чем мы пойдем дальше, мы должны сделать акцент на одной очень важной вещи. А именно, следует хорошо представлять себе, как сделать обычный кадр, а как -
Если же вы хотите создать
Нужно еще обратить внимание на то, что если на
А теперь вернемся к нашей анимации и продолжим выполнять намеченную программу действий.
Сделаем hello, в которой сейчас находится символьная строка "Hello, World!". (Пока что мы не будем обсуждать, где создана эта переменная, какой у нее тип и какова область видимости. Но в свое время мы обязательно до этого доберемся). В программном коде для тринадцатого кадра, мы собираемся присвоить переменной hello другое значение, например, "Hello, Flash!".
Терпение, еще немного. Теперь давайте перейдем на панель Actions (можно нажать F9 ). Если вы работаете с Флэш МХ, то вам нужно установить режим " Expert Mode ", а если вы работаете с Флэш МХ 2004 - вы и так в этом режиме. На правой части панели имеется горизонтальная линейка меню, а нам нужна крайняя правая кнопка этого меню: " View Options ". Воспользовавшись ею, и установите этот, так нужный нам, " Expert Mode ". Теперь хорошо бы проверить, что написано в combo box, расположенном ниже названия панели. Во Флэш МХ там должно быть следующее: "Actions for Frame 13 of Name Layer Layer 1", а для случая Флэш МХ 2004 подобную информацию можно получить, изучив дерево на панели, расположенной внизу слева на панели
Под уже, упоминавшейся горизонтальной линейкой меню имеется окно
hello = "Hello, Flash!";
Теперь взгляните на панель Timeline, в выделенном прямоугольнике тринадцатого кадра, наверху появилась маленькая буквочка "а", что означает, что к этому кадру имеется какой-то код. Чтобы иметь возможность полюбоваться на надпись "Hello Flash!" в течение одной секунды, вслед за тринадцатым кадром нужно ввести одиннадцать точно таких же кадров. Это делается так. Правой клавишей мышки кликнем на "зебровидной" полосе панели Timeline и на всплывающем меню выберем пункт " Insert Frame ". И так одиннадцать раз подряд. Конечно, можно и быстрее. Кликните по "зебре" левой мышкой и, не отпуская ее, протяните выделение до 24 кадра, а потом уже щелкайте по выделенному полю правой клавишей и выбирайте пункт " Insert Frame " (или нажимайте F5 ). Обратите внимание, мы вставляли не
Теперь превратим нашу надпись в кнопку. Это мы сделаем в 25 кадре, который следует сделать Symbol 1 ), а оно нас устраивает - нажимаем кнопку "OK". Вот
теперь можно написать код, который будет выполняться при нажатии на нашу надпись-кнопку. Заходим на панель Actions. Так как надпись-кнопка была выделена, на заголовке панели будет написано " Actions - Button ". Напишем следующий код:
on (press) {
gotoAndPlay("last");
stop();
}
Упрощенно говоря, этот код означает, что если произошло событие " press ", то нужно перейти к кадру, называющемуся " last ", выполнить его и остановиться. Кадр " last " может находиться в любом месте last ".
Учитывая все только что сказанное, выделим на панели Timeline 26 кадр, сделаем его last ".
Таким образом, мы уже начали выполнять третий пункт нашей программы. Однако не будем слишком увлекаться: мы ведь оставили несколько недоделанной нашу надпись-кнопку. Возвращаемся в 25 кадр, выделяем надпись, кликнем на ней правой клавишей мышки, в всплывающем меню выберем пункт " Edit ". Вот теперь мы находимся в таком окне редактирования нашей надписи, в котором мы можем изменять ее "кнопочные" свойства.
Не помешает несколько осмотреться: куда это нас закинуло. В общем-то, все знакомо, но панель Timeline совсем другая. Имеется только четыре кадра. Первый - естественно, Scene 1 ", теперь имеется надпись " Symbol 1 ". Чтобы вернуться на прежнее рабочее поле, т.е. в сцену 1, необходимо кликнуть на надписи " Scene 1 ", но это мы сделаем потом, а пока что продолжим редактировать нашу надпись-кнопку.
Давайте снова посмотрим на Timeline. Пожалуй, начнем пояснения с 4 кадра, который называется Hit. В нем можно обрисовать зону, достигнув которую, курсор мышки приобретает вид руки с вытянутым указательным пальцем, а сама кнопка приобретает такой вид, какой имеется в кадре Over. Естественно, все это будет при проигрывании готового Down. Первый кадр называется Up - в нем мы видим кнопку такой, какой она будет, если мышка вне зоны, обозначенной в кадре Hit.
Теперь будем действовать. Кадр Up оставим без изменений. Выберем кадр Over, сделаем его Down, пользуясь этим же инструментом, поверните надпись на 90 градусов. Не забудьте сделать этот кадр и следующий кадр Hit, Hit давайте сделаем следующее. На панели Tools выберем инструмент Oval Tool и нарисуем такой круг или овал, который бы закрывал надпись; пусть он будет закрашенный. Все, кнопка готова. Теперь нужно вернуться от редактирования кнопки к редактированию основной сцены. Для этого под

Например, надпись
Scene 1 Clip 1 Clip 5
означает, что вы редактируете Clip 5, который является частью Clip 1, который, в свою очередь, лежит на Scene 1. Так вот, вам надо щелкнуть мышью на надписи 2 и вы тут же вернетесь к ее редактированию.
Ну что ж, еще немного, и можно будет смотреть кино. Хотя нет: мы снова кое-что забыли. Видите ли, кнопку-то мы сделали, но воспользоваться ею мы не сможем, ибо как только мы попадем на 25 кадр и мельком увидим кнопку, как тут же перейдем на 26 кадр и нажать на нашу, созданную таким кропотливым трудом кнопочку, мы не успеем. Значит нам нужно в 25 кадре "остановиться, оглянуться".
Чтобы все происходило так, как нам надо, следует выделить на панели Actions 25 кадр и, убедившись, что на титульном поле панели написано: " ", написать в
stop();
Возвращаемся на 26 кадр. Давайте нарисуем на правом краю рабочего поля, напротив надписи "Hello, World!", чудище с широко открытой зубастой пастью. Для рисования следует взять Tools \ Pencil Tool, а в разделе Options (этот раздел находится в самом низу панели Tools) выбрать Ink, т.е. выбрать такой режим рисования линии, когда не происходит ни сглаживания нарисованной линии (опция Smooth ), ни ее выпрямления (опция Straighten ); при опции Ink, как нарисовали - так и будет. Хорошо бы это чудище закрасить. Возьмите для этого инструмент Paint Bucket Tool. Обратите внимание на раздел панели Tools, который называется Color, а в нем, в свою очередь есть опция Fill Color, там вы подберете подходящий цвет заливки. Еще ниже имеются опции, где, нажав на левую пиктограммку, желательно выбрать модификатор Close Large Gaps. Вот теперь можно кликнуть по чудищу курсором, дабы оно залилось все выбранным вами цветом.
Нарисовали? Теперь превратим чудище из набора графических примитивов в kuzdra, помните знаменитую фразу: "Глокая куздра штеко будланула бокра и кудрячит бокренка"? Мы подозреваем, что нарисованное вами чудище чем-то похоже на эту куздру. Так и напишите kuzdra, без кавычек.
Нажмите F9, чтобы зайти на панель Action, и, убедившись, что вы действительно на панели " Action - movie clip ", напишите следующий код:
onClipEvent (mouseDown) {
this._x -= 15;
}
Все! Готово! Нажимайте Сtrl+Enter. Ваш
Ну, вот, наконец-то мы выполнили 3 пункт нашей программы. Переходим к пункту четвертому.
Давайте посмотрим на структуру
Для этого воспользуемся панелью Movie Explorer, попасть на которую можно, нажав комбинацию клавиш Alt + F3. (ниже показан возможный вид этой панели - не для созданной нами анимации про куздру, а для другого простого

И посмотрите только, какая красота открывается нашему взору! Здесь можно увидеть все, что есть "за душой" у каждого кадра. Конечно, если вы видите только одну надпись - Scene 1, наши восторги вас удивляют. В таком случае, нажимайте последовательно на кнопки расположенные вверху панели, правее надписи Show, и перед вами постепенно возникнет поистине живописная картина. Кадры, слои, объекты, текстовые поля, фрагменты кода - все содержимое вашего
Без панели Movie Explorer не обойтись, если вам нужно разобраться в чужом
Если вы выделили на Display List какой-то участок дерева, то пункт первый - Go to Location - перекинет вас на рабочее поле соответствующего кадра. Если же вы выделили строку типа " Actions for Symbol 2 " и у вас была открыта панель Actions, то, выбрав пункт Go to Location, вы тут же сможете корректировать код соответствующий именно Symbol 2. Между прочим, все можно ускорить, если просто дважды кликнуть правой клавишей мышки по интересующему вас участку дерева - это действие соответствует выбору пункта Go to Location.
А вот еще один интересный пункт меню - Find in Library. Выделите строку дерева, где написано Symbol 1, а теперь выберите этот пункт. Вы оказались в библиотеке, где имеется всего два
И последнее, о чем просто нельзя не упомянуть: прямо на панели Movie Explorer вы можете изменить текст в любом кадре или же тип шрифта этого текста.
С
Как это ни странно, таких способов действительно довольно много. Первый из них - это нажать F9. Панель
В
А теперь про вторую исключительно полезную вещь в панели
Самым популярным разделом, безусловно, является раздел Objects. В нем особенно важны Core и Movie, а в Objects / Core первое место, несомненно, держит Array. Массивы во Флэше имеют богатую функциональность, и вам нередко придется заглядывать в этот пункт, дабы в очередной раз проверить, какой из методов - slice или - вам надлежит применить в данной ситуации; а также, в какую сторону сдвигает массив метод shift, а в какую - unshift. На первых порах вам также нужно будет часто заглядывать в Objects / Core / String и Objects / Core / Object.
Еще один важный раздел Reference - это Actions. Загляните в Actions / Variables и Actions / Miscellaneous. Если вы все-таки решите сделать какую-то рисованную анимацию, вам пригодится раздел Actions / Movie Control (не путайте с Actions / Movie Clip Control - в последнем речь идет о дублировании
Не забывайте также, что в справочнике есть индекс, так что можно искать какие-либо вещи не по разделам, а в алфавитном порядке.
К сожалению, в панели
Как посмотреть, что у нас в результате получилось, то есть, работу
Далее рассмотрим различные варианты запуска
Данный вариант запуска самый быстрый, простой и удобный для отладки. Выберите Control / Test Movie ( Ctrl+Enter ),
Для того чтобы вернуться к редактированию
Обратите внимание, что все сообщения об ошибках, а также результаты работы операторов trace будут выводиться в специальное окно вывода, закрыть или открыть которое можно, нажав клавишу F2. В это же окно выводятся и результаты работы команд List Objects и List Variables (учтите, что при выполнении этих команд предыдущее содержимое окна стирается). Если вы закроете это окно, его содержимое опять-таки будет стерто и при его повторном открывании окно появится пустым.


Недостатки запуска в среде:
Допустим, у вас уже есть скомпилированный
Недостатки:
Пользуйтесь данным типом запуска, если хотите посмотреть на работу

Недостатки:
Как мы уже писали, в процессе установки Флэш МХ на ваш компьютер будет установлен консольный (standalone) плеер, который позволяет запускать *.swf-файлы отдельно от среды разработки и браузера. Двойной клик на *.swf-файле приведет именно к запуску консольного плеера. Однако Флэш МХ предоставляет возможность запуска
После того, как вы запустили <OBJECT-EMBED>, пример которого приведен ниже и код которого вам на начальных этапах редактировать не придется. Вся остальная часть страницы в вашем полном распоряжении.
Имейте только в виду, что в следующий раз, когда вы нажмете Ctrl+F12, страница будет перегенерирована средой Flash MX, что может привести к потере ваших изменений.
Вот упомянутый выше html-код:
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash /swflash.cab#version=6,0,0,0" WIDTH="550" HEIGHT="400" id="run2" ALIGN=""> <PARAM NAME=movie VALUE="run2.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="run2.swf" quality=high bgcolor=#FFFFFF WIDTH="550" HEIGHT="400" NAME="run2" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE ="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>
А что делать, если у вас есть большой проект, в котором все страницы выглядят похожим образом, а
Нужно использовать
Итак, чтобы создать новый

Или вместо этого можно выбрать пункт меню Insert / New Symbol. В результате появится следующий диалог:

Если вы нажмете в нем кнопку Advanced, то увидите следующий вариант диалога

Этот же вариант диалога мог появиться перед вами и сразу - в том случае, если вы раскрывали предыдущий диалог этого типа кнопкой Advanced. Нам сейчас не нужны дополнительные возможности, поэтому можно вернуться к сокращенному виду, нажав кнопку Basic. Введите в текстовой строке имя . После нажатия ОК вы увидите, что в окне Library появилась новая строка с именем вашего

Вид этой полоски, изображенный на рисунке, соответствует редактированию Symbol 4. Напомним, что если вы захотите вернуться к редактированию основной сцены, вам нужно будет щелкнуть мышью по надписи Scene 1 (вообще-то, название основной сцены можно изменить и даже сделать несколько сцен; все это можно сделать с помощью панели управления сценами - знать бы только, зачем. На самом-то деле, сцена - это всего лишь сгруппированные кадры в корневом
Создать
Если вы хотите управлять созданными
Как управлять вертикальным порядком ( z-order 'ом) созданных
Заметим, что можно создавать новые createEmptyMovieClip. И затем в этих
Также можно дублировать уже имеющиеся duplicateMovieClip. Об этом мы подробнее поговорим в третьей лекции.
Вы уже видели, что в диалоге создания , и . То, что кнопка отличается от обычного отличается от ? Оказывается, имеет одну важную особенность: его кадры всегда синхронизированы с кадрами "родительского" 'a). И если мы программным образом управляем "родительским" автоматически останется синхронизирован с родителем. А вот если бы внутри лежал , то ему потребовалось бы отдельно подавать те же команды, что и родителю. Итак, использование - это тот достаточно редкий случай, когда все же используют гораздо чаще, чем ),
С кнопками вы уже немного знакомы по параграфу "Hello, World!". А если вы прочли его невнимательно - прочтите еще раз и проделайте все, что в нем описано, ибо там зарыты драгоценные крохи знаний о простейших приемах рисования и анимации, о которых мы в этой книге практически не говорим.
Но, предположим, вы умеете делать кнопки и описывать, как кнопка будет реагировать на нажатие. Однако нажатие - это ведь не единственное, что с кнопкой может происходить. Пользователь может, например, просто навести на нее мышь - а вы уже захотите выполнить по этому поводу какой-то программный код. Как реализовать такое поведение? Оказывается, каждому из этих случаев соответствует отдельное событие, посылаемое кнопке системой Флэш МХ. А значит, мы можем задать реакции на все эти события (и на каждое в отдельности). Кстати, сейчас как раз время запомнить одну общую вещь: где во Флэш МХ может встречаться выполняемый код. Мы уже говорили, что, как правило, он записывается в каком-то из кадров (и выполняется при демонстрации этого кадра). Кроме того, код может быть приписан к
Итак, сделать реакцию на событие можно тремя способами: с помощью одной из двух специальных конструкций языка ActionScript или с помощью методов класса . Мы рассмотрим несколько более подробно специальные конструкции и кратко расскажем о методе переопределения функций реакции на события класса . Последний рассказ будет кратким вынужденно, поскольку детали необходимых для него конструкций (например, определения функций во Флэш МХ) мы разберем позднее. Так вот, первая из специальных конструкций - конструкция on( ...){ /* Код */}. Вторая - это конструкция onClipEvent(...){ /* Код */ }. На самом деле, вместо двух конструкций можно вполне обойтись одной; то, что их именно две, обусловлено историческими причинами. Во Flash 5 конструкцию on(...){...} можно было использовать только с кнопкой, а onClipEvent(...){...} - только с 'ом. Во Флэш МХ они полностью равноправны и работают практически одинаково (но "обслуживают" различные события, характерные для кнопок и для обычных on(...){...} могут присутствовать следующие наименования событий:
press - кнопка нажата.release - кнопка отпущена.releaseOutside - мышь отпущена после того, как была нажата на кнопке, а затем выведена за ее пределы.rollOut - мышь в ненажатом состоянии вышла за пределы кнопки.rollOver - мышь в ненажатом состоянии вошла в область кнопки.dragOut - мышь в нажатом состоянии вышла за пределы кнопки (при этом реализуется механизм " capture ", то есть события по поводу мыши, перемещаемой в нажатом состоянии, посылаются только той кнопке, на которой она была нажата).dragOver - это событие может посылаться в двух случаях, которые слегка различаются между собой. Случай первый: мышь возвращается на кнопку в нажатом состоянии (после того, как была нажата на кнопке, а затем выехала оттуда). Это событие посылается для всех типов кнопок. Случай второй: мышь въезжает на кнопку в нажатом состоянии после того, как была нажата снаружи кнопки. В этом случае событие будет посылаться, только если для кнопки была выбрана опция " Track as Menu Item ". (По умолчанию выбрана опция " Track as Button "). Чтобы установить эту опцию, нужно выделить кнопку и зайти в панель Properties. Комбо-бокс с двумя вышеупомянутыми опциями размещен справа от кнопки Swap. Уточним, что если мышь въезжает на кнопку после того, как была нажата на другой кнопке, то событие dragOver не будет послано даже в том случае, когда выбрана опция " Track as Menu Item ". Это следствие работы механизма " capture ".keyPress - нажата определенная клавиша на клавиатуре. В данном случае после слова keyPress в кавычках должна быть указана нужная клавиша (например, keyPress "a" ). Если вы хотите указать какую-либо специальную клавишу, то нужно внутри кавычек в угловых скобках написать ее название (например, keyPress "<PageDown>" ). Набрав on и затем открывающую круглую скобку в keyPress и специальных клавиш. Вам может показаться странным, что указывается только одна клавиша - это является рудиментом тех времен, когда конструкция on(...){...} использовалась только для кнопок, а реакция на нажатие клавиши на клавиатуре делалась для создания акселераторов. Если вам все же хочется использовать on(...){...} для реакции на несколько разных
клавиш, вам придется написать конструкцию on(...){...} несколько раз.Все приведенные выше наименования событий пишутся без кавычек (мы не говорим здесь о коде клавиши, являющемся дополнением к событию keyPress ). Кроме того, в круглых скобках может быть перечислено несколько наименований событий; в этом случае они разделяются запятой.
Мы сейчас говорили о кнопке, но все то же самое может быть написано в коде, относящемся к любому on(...){...} в коде, относящемся к любому
Подчеркнем еще раз, что конструкции on(...){...} и onClipEvent(...){...} могут быть использованы только в специальном, довольно экзотическом месте - коде, относящемся не к on(...){...} и onClipEvent(...){...} являются устаревшими. Все-таки они предоставляют достаточно удобный способ прикрепить код реакции на события непосредственно к конкретному ). Это позволит сконцентрировать код только в
Однако, занявшись критикой конструкций on(...){...} и onClipEvent(...){...}, мы отвлеклись от их описания; а ведь мы еще не сказали, что пишется в фигурных скобках. Оказывается, в фигурных скобках может быть написан любой код на ActionScript 1.0 (кроме, разумеется, самих конструкций on(...){...} и onClipEvent(...){...} ).
Теперь опишем подробнее конструкцию onClipEvent(...){...}. В круглых скобках она может содержать следующее:
load - unload - enterFrame - вызывается в каждом кадре перед выполнением кода, который в этом кадре написан.mouseMove - мышь сдвинулась (ее координаты относительно начала координат данного _xmouse и _ymouse ).mouseDown - левая кнопка мыши нажата.mouseUp - левая кнопка мыши отпущена.keyDown - нажата клавиша на клавиатуре (получить ASCII-код этой клавиши можно, вызвав Key.getCode() - специальный метод класса Key. Затем можно воспользоваться методом String.fromCharCode, чтобы преобразовать этот код в строку).keyUp - отпущена клавиша на клавиатуре. Информацию об этой клавише получаем так же, как и для события keyDown.data - специфическое событие, связанное с ситуациями, когда Приведем примеры использования конструкций on(...){...} и onClipEvent(...){...}. Один из стандартных способов использования первой из них предназначен для реализации перетаскивания ( drag and drop ). Вот пример такого кода:
on(press){
trace("pressed");
startDrag(this);
}
on(release){
trace("released");
stopDrag();
}
Поместите этот код на
А вот пример использования 2.
onClipEvent(keyDown) {
if (Key.getCode() == Key.RIGHT) {
this._x += 10;
} else if (Key.getCode() == Key.LEFT){
this._x -= 10;
}
}
Если вы снабдите
Наконец, скажем пару слов о методах класса MovieClip. Все события, о которых мы здесь говорили, с помощью этих методов можно поймать и обработать. Собственно, это есть самый логичный и естественный способ работать с событиями. Выглядит эта работа примерно так:
clip.onEnterFrame = function(){
// Здесь пишется код обработки события
}
А более подробно мы об этом расскажем в начале третьей лекции.
Какая программа может обойтись без вывода текста?
Во Flash MX существует один-единственный контрол (элемент управления), позволяющий выводить (и вводить) текст, который также используется всеми стандартными компонентами Flash MX, и не предусмотрено никакой возможности (в том числе программной) вывести текст, минуя текстовые поля (разве что, скомпоновав его из картинок). Правда, создавать текстовые поля можно не только "вручную", но и программно (о чем мы поговорим позже, в третьей лекции).
В этом параграфе мы рассмотрим только самые основы работы с текстовыми полями, которые бывают трех типов:


У
Нужно упомянуть еще одну вещь (она относится к текстовым полям любых видов, не только
v = "new text", если v указано в поле Var. Переменная должна быть создана в том же Текст в
А что, если вы собираетесь заводить текстовые поля программно (для чего служит метод класса под названием createTextField )? Можно ли как-то встроить все необходимые шрифты? Для этого вам нужно как минимум завести в библиотеке (с отмеченной галочкой " Export in first frame ")
При работе с экзотическими шрифтами возникает также следующая проблема: предположим, вам необходимо подобрать шрифты для большого количества текстовых полей. И быстро поменять их все сразу, если понадобится сменить стиль оформления. Все это действительно можно сделать. Откройте панель библиотеки MyFont ). Если вы теперь создадите текстовое поле, то в выпадающем списке доступных шрифтов вы увидите и надпись MyFont (помеченную звездочкой - это должно напоминать вам о том, что данный шрифт является псевдонимом, определенным в библиотеке). Теперь, меняя в свойствах MyFont соответствующий ему шрифт, вы одновременно меняете шрифт во всех полях, в которых установлен шрифт MyFont (скорее всего, вам надо будет перевести фокус ввода на рабочую область, чтобы произошла перерисовка текста в текстовых полях). Но все это не значит, что после этого вы можете сохранить ваш *.fla-файл и переносить его на другую машину вместе с фонтом. Описанный нами механизм не сохраняет фонт внутрь *.fla-файла, он всего лишь делает псевдоним, и только.
Эти text ). Чтобы сделать такое поле, нужно в выпадающем списке левой части панели Properties выбрать Input Text.
Ситуация со встраиваемыми фонтами для текстовых полей типа Input Text полностью аналогична той, что имеет место для полей типа Dynamic Text. Если какие-либо знаки отсутствуют среди встроенных хотя бы в одно поле, загруженное к данному моменту, то пользователю эти знаки набрать не удастся.
Все три типа текстовых полей поддерживают элементарное форматирование (можно изменять цвет, шрифт, его размер и тип начертания, выравнивание). Кроме того, можно включать и отключать рамку ( Border ) у текстовых полей типа Dynamic и Input:

Многие параметры можно изменять программно (за это отвечают методы объектов TextField и TextFormat ).
Важным является тот факт, что в

После этого в свойство htmlText текстового поля можно записывать html-разметку. Например:
myTextField.htmlText = "<b>Bold</b>Not bold".
Еще раз подчеркнем: писать html-форматированную строку прямо в текстовом поле в процессе редактирования бессмысленно. Форматирование будет воспринято только в том случае, если строка будет передана через свойство htmlText.
Надо, конечно, отметить, что html-форматирование, которое можно применять при работе с текстовыми полями, довольно ограничено. Однако жирность текста, его наклон, подчеркивания, цвета, тип шрифта и настройки параграфа (для многострочных текстов) задавать можно. Кроме того, разрешается использовать гиперссылки.
Интересно, что, аналогично вызову JavaScript-кода из гиперссылки при помощи записи наподобие
myTextField.htmlText="<u><a href='javascript:alert(1)'>link</a></u>"
(в данном случае при нажатии на ссылку выводится диалоговое окно), можно по нажатию на нее вызывать и функцию ActionScript. Предположим, нами была определена функция reactionFunc(arg) (о том, как определять свои функции в ActionScript, подробно говорится в пятой лекции). Тогда по нажатию на ссылку, определенную с помощью следующего кода
myTextField.htmlText = "<u><a href='asfunction:reactionFunc,fromLink1'>link1</a></u>"
будет вызвана функция reactionFunc, причем в качестве аргумента ей будет передана строка " fromLink1 ". Будьте внимательны: между asfunction: и именем функции не должно быть никаких разделителей (иначе они будут проинтерпретированы как часть имени функции).
Наконец, заметим, что присвоить htmlText можно и
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.