Специальные текстовые блоки. Macromedia Flash MX - первые шаги


Лекционные материалы, домашние задания и тесты
дистанционного курса «Электронная школа Macromedia Flash MX»
Российская еженедельная методическая газета для учителей информатики. Издательский дом «Первое сентября» № 42 (2003 год)
«Аналог программы «Правилка» из пакета «Хиты Роботландии»
в среде Macromedia Flash».

Печатные публикации

ЭЛЕКТРОННАЯ ШКОЛА MACROMEDIA FLASH MX
III курс: Основы программирования в Macromedia Flash MX
Модуль IV: Команда with. Программа «Правилка»
Язык ActionScript

Экспресс-план модуля:
  • Команда with
  • Flash-дублёр программы «Правилка» из пакета «Хиты Роботландии».

Команда with

При использовании объектов в программном коде (скрипте) нетрудно заметить, что даже в небольшом блоке скрипта неоднократно повторяется название одного и того же объекта. Особенно часто подобные повторения происходят при использовании некоторых отдельных объектов, например объектов Math , относящихся к верхнему уровню. Например, следующий код является довольно распространённым:

A = Math.PI * r * r; x = r * Math.cos(Math.PI); y = r * Math.sin(Math.PI/2);

Здесь объект Math встречается неоднократно, что затрудняет восприятие скрипта. Эту запись можно значительно упростить, если блок скрипта заключить в скобки, воспользовавшись командой with. Тогда в пределах данного блока скрипта интерпретатор ActionScript будет обращаться к указанному объекту. Теперь код можно переписать в следующем виде:

With (Math) { a = PI * r * r; x = r * cos(PI); y = r * sin(PI/2); }

Давайте познакомимся с общим форматом команды:

with (object) {
statement(s);
}

object — экземпляр ActionScript объекта или Movie Clip.

statement(s) — команда или группа команд, заключенных в фигурные скобки.

Давайте разберём ещё один пример, в котором в качестве объекта используется MovieClip с именем someOtherMovieClip:

With (someOtherMovieClip) { _x = 50; _y = 100; gotoAndStop(3); }

Следующий отрывок скрипта показывает, как можно написать предшествующий пример без использования команды with:

SomeOtherMovieClip._x = 50; someOtherMovieClip._y = 100; someOtherMovieClip.gotoAndStop(3);

Возможно использование вложенных команд with для доступа к информации во многих контекстных областях.

Flash-дублёр программы «Правилка» из пакета «Хиты Роботландии»

В ходе программирования работы кнопок мы активно будем использовать оператор ветвления: if и if else. А также организуем работу счётчика, прибавляющего очки пользователю в случае правильного ответа и отнимающего очки, в случае когда, не исправив ошибку, или произведя некорректные исправления, пользователь нажмёт кнопку «Далее».

Организуем работу Movie Clip (priz), в котором будет размещён «Призовой фонд». В том случае если пользователь наберёт 10 очков, его приз будет представлять собой корзину с аппетитными фруктами. Если в копилке пользователя окажется 9 или 8 очков в качестве приза он получит кусок сыра, если пользователю «посчастливится» набрать 6 или 7 очков он получит тыкву, ну а в том случае если он наберёт 5 или менее 5 очков ему достанется помидор!

Для любителей пятибалльной оценки переведём вышесказанное на доступный для школьного журнала язык:

Корзина с фруктами — 5 ;
Кусок сыра — 4 ;
Тыква — 3 ;
Помидор — 2 .

При обращении к Movie Clip мы будем использовать команду with.

На нашей сцене будет использовано 11 кадров. Первые 10 кадров будут представлять собой «рабочие листы», на которых будут размещены словосочетания с грамматическими ошибками (Input Text). Обычно поля ввода оставляют пустыми, но в нашем случае они должны работать! На каждом листе будет запрограммирована работа динамического поля. В том случае если пользователь не исправит грамматическую ошибку, в него будет выведен текст: «Вы не исправили ошибку!».

В данной программе использованы два слоя. Нижний слой — background на нём размещён статический текст «Программа Правилка», и графический символ со шляпой.

В том случае если вы непременно хотите использовать в программе для написания заголовка какой-нибудь экзотический шрифт, установленный на вашей машине, не забудьте использовать для этого текста процедуру Break Apart из меню Modify. Иными словами, превратите текст в графику. И тогда ваш текст не превратится в абракадабру на машине, где этого шрифта нет!

Теперь всё по порядку. 1 кадру пропишем скрипт:

Stop(); fscommand("showmenu", "false"); i = 0;

При проигрывании ролика необходимо отключить «Меню». Таким образом, мы не позволим пользователю сделать «шаг назад». И ещё мы «включаем» счётчик.
2-10 кадру пропишем акцию:

Работу кнопок рассмотрим на примере первого кадра. Остальные кнопки вы сможете запрограммировать самостоятельно.

On (release) { if (t1=="Белая хризантема") { i++; gotoAndPlay(2); } else { i--; z1 = "Вы не исправили ошибку!"; } }

Теперь сформируем «Призовой фонд». Создадим новый символ типа Movie Clip с именем priz в котором будут работать 5 кадров. Всем кадрам клипа пропишем акцию:

Первый кадр клипа будет пустым.

Во втором кадре поместим корзину с фруктами и пропишем кадру метку: five .
В третий кадр поместим кусок сыра и пропишем кадру метку: four .
В четвёртый кадр поместим тыкву и пропишем кадру метку: three .
В пятый фрейм поместим помидор и пропишем кадру метку: two .

В данной программе всё это «продовольственное разнообразие» было импортировано из коллекции ClipArt97 (wmf-файлы). Впрочем, вы можете сформировать свой собственный «Призовой фонд», всё зависит исключительно от вашей фантазии.

Вернёмся на сцену и на последнем 11 кадре поместим созданный нами клип с призами. Не забудьте прописать его на сцене. Instance Name: priz . Этому кадру пропишем скрипт, который будет, анализируя содержимое счётчика, «выдавать» пользователю приз:

Stop(); sh = i; with (_root.priz) { if (i

Протестируйте ролик. И если это необходимо произведите его отладку.

Для упрощения процесса тестирования создайте на последнем кадре поле динамического текста с именем sh и в это поле выводите данные счётчика. Для этого в скрипт 11 кадра добавьте второй строкой:

После завершения процесса отладки удалите это поле и прописанную вами строку.

Домашнее задание: Основы программирования в Macromedia Flash MX

О, сколько нам открытий чудных
Готовят просвещенья дух
И опыт, сын ошибок трудных,
И гений, парадоксов друг,
И случай, бог-изобретатель.
Александр Сергеевич Пушкин, «Евгений Онегин»

Ваша задача состоит в создании ролика дублирующего материал, изложенный в этой лекции. Словосочетания вы можете подобрать самостоятельно.

Иллюстративный материал, использованный для формирования «призового фонда» ролика вы сможете найти в архиве, сопровождающем материал лекции. В этом архиве представлены файлы в формате wmf. Если этот призовой фонд не удовлетворяет вашим требованиям, можете смело фантазировать и использовать собственную библиотеку.

Выполненное задание представьте в виде файла в формате fla (если размер файла превысит 150 Кб, пожалуйста, упакуйте файл в архив) и вышлите учителю.

Желаю Вам успехов в самостоятельном изучении Macromedia Flash MX!

Разделы на этой странице:

А теперь давайте поговорим о так называемых специальных текстовых блоках, т. е. о текстовых блоках, выполняющих особые функции. В данный момент они нам, правда, не пригодятся, зато понадобятся тогда, когда мы начнем писать программы в среде Flash (программированию посвящена часть IV данной книги).

Поля ввода

Поле ввода - это своего рода небольшой текстовый редактор, помещенный в окно Windows-программы и предназначенный для ввода одно- или многострочного текста. При этом Windows сама управляет текстовым вводом: мы просто набираем символы, пользуемся клавишами-стрелками, клавишами , , выделяем текст, используем буфер обмена, как в любом "большом" текстовом редакторе. Программисты фирмы Microsoft много поработали над тем, чтобы сделать стандартные поля ввода Windows по-настоящему удобными.

Чтобы создать во Flash поле ввода, сначала нужно поместить на рабочий лист обычный текстовый блок и выделить его инструментом "стрелка" (при этом в текстовый блок необязательно вводить какой-либо текст). Далее находим в верхнем левом углу панели Properties небольшой раскрывающийся список (см. рис. 7.4) и выбираем в нем пункт Input Text. Если после этого мы откроем полученный текстовый блок, увидим то, что показано на рис. 7.9.


Итак, что мы видим? А видим мы полный набор маркеров изменения размера (они сохранятся и в том случае, если мы закроем поле ввода). Это значит, что мы можем менять также и вертикальный размер полученного поля ввода. А прямоугольный маркер из правого верхнего угла переместится в правый нижний - это знак того, что перед нами именно поле ввода.

Вид панели Properties после выделения поля ввода представлен на рис. 7.10. Как видим, там появились дополнительные элементы управления, которые нужно рассмотреть.


Прежде всего, прямо под списком, которым мы только что пользовались, появилось поле, в котором нам нужно будет указать уникальное имя, идентифицирующее созданное нами поле ввода Flash. Каждое поле ввода, созданное на рабочем листе, должно иметь уникальное имя. Это имя может содержать буквы русского и латинского алфавита, цифры и знаки подчеркивания, причем оно обязательно должно начинаться либо с буквы, либо со знака подчеркивания.

Ниже поля ввода задания трекинга находится другой раскрывающийся список. С его помощью выбирается вид поля ввода. В этом списке доступны четыре пункта:

? Single Line - обычное однострочное поле ввода ;

? Multiline - многострочное поле ввода (иначе говоря - область редактирования);

? Multiline no wrap - многострочное поле ввода, в котором не будет выполняться автоматический перевод строки (хотя пользователь все же может перенести строку вручную, нажав клавишу );

? Password - поле ввода пароля. Аналогично обычному однострочному полю ввода, но скрывает введенный в него текст, отображая вместо него строку из "звездочек".

Правее этого списка находится набор их трех кнопок-выключателей. Первая из них нам уже знакома - она позволяет пользователю выделять находящийся в поле ввода текст:


Как видно на рис. 7.10, эта кнопка нажата и недоступна, т. е. не может быть отключена.

Вторая кнопка-выключатель, будучи включенной, предписывает Flash обрабатывать все встретившиеся в тексте теги HTML:


Так, если мы заключим фрагмент текста в тег <В>.. , Flash выделит его полужирным шрифтом. Если же эта кнопка выключена, Flash выводит текст "как есть", вместе с любыми тегами HTML, которые там заданы.

Вообще говоря, эта возможность полезна, только если мы задаем содержимое поля ввода из сценария ActionScript, так что описана она здесь "с опережением". Подробную информацию о поддержке тегов HTML в полях ввода и динамических текстовых блоках можно найти в интерактивной справке Flash.

Третья кнопка-выключатель во включенном состоянии заставляет Flash показывать рамку вокруг поля ввода, отчего последнее напоминает стандартное поле ввода Windows:


Если же она отключена, поле ввода имеет "плоский" вид.

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

Правее этих трех кнопок расположено поле ввода Var . В этом поле задается имя переменной ActionScript, в которую будет помещен введенный в созданное нами поле ввода текст. Переменная - это своего рода "ячейка камеры хранения" данных, созданная в памяти компьютера и имеющая уникальное имя, по которому ее можно однозначно определить. Мы можем обратиться к этой переменной по имени, извлечь из нее данные или поместить в нее новое значение. Во всех подробностях переменные будут рассмотрены в главе 19.

В поле ввода Maximum characters задается максимальное количество символов, которое сможет вводить в него пользователь. Если мы не хотим ограничивать это количество, то введем туда значение 0 (таково, кстати, значение поля по умолчанию).

А теперь давайте вернемся к теме внедрения шрифтов, но уже применительно к полям ввода (точнее, ко всем специальным текстовым блокам). Дело в том, что в этом случае никакое внедрение не выполняется - Flash сохраняет только имена использованных шрифтов. При воспроизведении готового изображения проигрыватель Flash сначала ищет эти шрифты на компьютере клиента и, если они есть, использует их для вывода текста. Если же подходящий шрифт не будет найден, то проигрыватель использует ближайший к искомому подобный шрифт, отчего изображение может исказиться. А это не всегда приемлемо.

Но мы все-таки можем заставить Flash внедрить в результирующий файл Shockwave/Flash описания избранных символов заданного для данного поля ввода шрифта. Сейчас мы увидим, как это делается.

Выбор символов шрифта для внедрения выполняется в диалоговом окне Character Embedding (рис. 7.11). Это окно появится на экране после нажатия кнопки Embed панели Properties (см. рис. 7.10).


Большой список этого окна позволит нам выбрать целые группы символов, которые должны быть внедрены в результирующий файл Shockwave/Flash. Он содержит довольно много пунктов; те же из них, что гарантированно нам пригодятся, приведены ниже:

? All (39477 glyphs) - все символы данного шрифта в количестве 39 477. Этот пункт приведен только для ознакомления; в реальности вряд ли кто-то будет им пользоваться;

? Uppercase (27 glyphs) - большие латинские буквы (27 символов);

? Lowercase (27 glyphs) - малые латинские буквы (также 27 символов);

? Numerals (11 glyphs) - арабские цифры (11 символов);

?Punctuation [!@#$%…] (52 glyphs) - знаки препинания и специальные обозначения (52 символа);

? Basic Latin (95 glyphs) - буквы большинства европейских языков (95 символов);

? Cyrillic (499 glyphs) - буквы кириллицы (499 символов). Пожалуй, самый важный пункт в нашем случае.

Как правило, в этом списке выделяются сразу несколько пунктов (правильно - кому нужны буквы без цифр!). Для этого сначала щелкнем мышью на первом пункте из набора тех, которые хотим выделить, потом нажмем клавишу и, удерживая ее, щелкнем на остальных пунктах, пока не выделим все. После этого можно отпустить клавишу .

Под списком шрифтов находится поле ввода Include these characters. В нем мы можем вручную ввести символы, которые должны быть внедрены. Такой способ полезен, если мы хотим внедрить только определенные символы шрифта. А если мы нажмем кнопку Auto Fill, Flash сам подставит в данное поле ввода все символы, что мы использовали в тексте выделенного поля ввода.

В самом низу окна Character Options находится небольшое текстовое поле Total number of glyphs, показывающее, сколько символов мы уже выбрали для внедрения. Так что мы сможем вовремя остановиться.

Кнопка Don"t Embed позволит быстро удалить все символы, что мы выбрали для внедрения. При нажатии на нее будет очищено поле ввода Include these characters, а в большом списке с выбранных нами пунктов пропадет выделение.

Задав параметры внедрения шрифтов в диалоговом окне Character Embedding, следует нажать кнопку ОК, чтобы применить их. Если же нужно отменить эти параметры, нажмем кнопку Cancel.

Динамические текстовые блоки

Часто вместо того чтобы показывать обычный, неменяющийся текст, требуется выводить в текстовом виде результаты работы какого-либо сценария ActionScript. Например, такой сценарий может извлекать новости с сайта "Компьюленты", прогноз погоды - с сайта "Апорта", а курсы валют - с сайта "Рэмблера", добавлять к извлеченным данным текущее время и все это в виде текста выводить на экран. (Кстати, интересная идея…)

Вот как раз для вывода текста, являющегося результатом работы сценария, и применяются динамические текстовые блоки. (Обычные же текстовые блоки часто называют статическими.) Пожалуй, нужда в таких динамических текстовых блоках возникает чаще, чем в полях ввода.

Динамический текстовый блок создается практически так же, как поле ввода. Создаем обычный текстовый блок, выделяем его инструментом "стрелка" и находим в верхнем левом углу панели Properties небольшой раскрывающийся список (см. рис. 7.4). Вот только выбрать в этом списке нужно пункт Dynamic Text.

Выделенный динамический текстовый блок похож на поле ввода (см. рис. 7.9), да и панель Properties будет выглядеть примерно так же, как показано на рис. 7.10. Поэтому мы не будем давать описание находящихся в нем элементов управления, а ограничимся указанием на существующие отличия.

Для вывода текста в динамический текстовый блок используются все те же переменные. Сценарий ActionScript помещает в такую переменную выводимый текст, а сам вывод выполняет проигрыватель Flash. Имя этой переменной вводится во все то же поле ввода, что находится под списком, с помощью которого мы только что превратили обычный текстовый блок в динамический.

Теперь об отличиях. Отличие в плане интерфейса фактически имеется только одно и, вдобавок, оно нам уже знакомо. Кнопка-выключатель:


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

Отличие в плане возможностей состоит в том, что динамический текстовый блок может быть сделан прокручиваемым. Обычный динамический блок должен непременно иметь такие размеры, чтобы в нем помещалось все его содержимое. Для прокручиваемого же блока это не обязательно: подобно областям редактирования Windows, он может "прокручивать" содержащийся в нем текст. Для управления прокруткой же нам придется писать соответствующие сценарии ActionScript - прокручиваемый текстовый блок не содержит полос прокрутки.

Чтобы сделать динамический текстовый блок прокручиваемым, нужно сначала его выделить. После этого следует включить пункт-выключатель Scrollable меню Text или одноименный пункт контекстного меню текстового блока. Если текстовый блок в данный момент открыт, можно дважды щелкнуть на квадратном маркере, расположенном в правом нижнем углу прямоугольника выделения, удерживая нажатой клавишу . Готовый прокручиваемый текстовый блок показан на рис. 7.12; обратим внимание, что маркер, который мы щелкали, принял форму черного квадратика.


Под названием "Macromedia Flash 8: курс молодого бойца", посвященная этому замечательному программному продукту и технологии Flash. Начиная с сегодняшнего дня, темы нашего разговора о Flash станут более узкими. Поэтому впредь я буду опускать слова "курс молодого бойца" в заглавии. Однако это обстоятельство совсем не повлияет на способ изложения материала, основная цель которого - ответить на множество вопросов, возникающих у начинающих flash-дизайнеров, и дать пищу для размышлений бывалым.

Итак, сегодня на повестке дня компоненты пользовательского интерфейса Macromedia Flash Professional 8, а также способы их настройки.


Стандартные компоненты Flash 8

В последней версии мощного графического пакета Macromedia Flash 8, помимо кучи инструментов, методов и эффектов временной шкалы, предназначенных для создания качественной мультипликации, присутствуют полноценный объектно-ориентированный язык программирования ActionScript 2.0 и многочисленные компоненты (встроенные программные блоки типа Movie).

Зачем вообще нужны компоненты? Во многих случаях они значительно упрощают процесс разработки интерактивного приложения. С помощью полей ввода данных и всевозможных переключателей на web-сайтах легко создаются регистрационные формы, посредством загрузчиков можно управлять загрузкой текстовых и мультимедийных данных из различных источников и т.д. Сегодня мы познакомимся с одним из классов компонентов во Flash 8 - элементами пользовательского интерфейса (User Interface - UI).

Самым популярным объектом во Flash, конечно, является кнопка (button). Она присутствует во Flash и как тип символа, и как элемент UI. Реже используются компоненты RadioButton, CheckBox, MenuBar и др., но они отнюдь не являются менее важными. Окно компонентов вызывается по нажатию Ctrl+F8 или из меню Window -> Components. Основные компоненты UI см. в таблице.

Компонент Описание
Accordion Навигатор форм
Alert Текстовое сообщение
Button Простая кнопка
CheckBox Флажок
ComboBox Комбинированный список
List Список
Loader Контейнер-загрузчик
RadioButton Селекторный переключатель
TextArea Текстовая область
Window Контейнер в виде окна

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


Предварительная настройка свойств компонентов

Компонент Alert позволяет организовать небольшой диалог пользователя с компьютером. Сообразим что-то похожее на программу-говорилку Alice, созданную в 60-х годах и обладающую небольшим искусственным интеллектом, который позволял поддерживать беседу с человеком, используя его ответы на ранее заданные вопросы.

Сперва поменяем надписи на кнопках и напишем обработчик их нажатия. В зависимости от того, на какую кнопку кликнул пользователь, будет появляться особое сообщение. Это все достигается без применения стилей. Итак, перетащим на чистый лист из панели Components окошко Alert и снабдим его всеми нужными настройками. Вспомним, что в любом fla-файле Flash присутствует библиотека (вызывается через нажатие Ctrl+"L"), в которой хранятся экземпляры компонентов. Сюда же поместилось и окошко Alert. Поскольку нам не нужно, чтобы оно всегда болталось в рабочей области, то его можно оттуда удалить (с монтажного стола, разумеется). В библиотеке Alert останется.

Теперь выделяем первый кадр на временной шкале, переходим в раздел Actions (F9) и записываем следующий программный код: "import mx.controls.Alert" (подробнее смотри в листинге). Многие из требуемых настроек можно установить только при помощи ActionScript. Окно Alert вызывается процедурой Alert.show ("текст", "заглавие окна", "используемые кнопки", "окно", "обработчик нажатия", "выделенная кнопка") с множеством параметров, указанных в скобках. Для используемых кнопок в одинарных кавычках указывается "Alert.YES | Alert.NO" (еще бывают кнопки "OK" и "Cancel"), а для обработчика событий - функция "buttonclick", которую напишем немного погодя. Теперь изменим надписи на кнопках "YES" и "NO" при помощи свойств компонента Alert "yesLabel" и "noLabel". Потом установим требуемые размеры ("buttonWidth" и "buttonHeight"). Для подбора оптимальных параметров полезно запускать на тестирование ролик - клавиши "Enter" + Ctrl. Логика функции "buttonclick" следующая: когда нажимается кнопка "Замечательно", выскакивает сообщение "Так держать!", когда "Так себе" - "Не вешай нос!". Чтобы изменения приняли силу, описание данной функции и настройки компонента Alert должны предшествовать вызову процедуры Alert.show, как показано в листинге:

Import mx.controls.Alert; Alert.buttonWidth=150; Alert.buttonHeight=25; Alert.yesLabel="Замечательно"; Alert.noLabel="Так себе..."; buttonclick = function(evt){if (evt.detail == Alert.YES) {Alert.show("Так держать!", "Macromedia Flash 8");} if (evt.detail == Alert.NO) {Alert.show("Не вешай нос!", "Macromedia Flash 8");}} Alert.show("Как дела, дружок?", "Macromedia Flash 8", Alert.YES | Alert.NO, this, buttonclick, Alert.YES);

Подобным образом можно организовать и более сложный диалог с пользователем.


Работа со стилями

Для чего же используются стили? Сейчас поясню. Любой компонент во Flash имеет определенную цветовую гамму, размер шрифта и т.д. Но если вы занимаетесь разработкой, к примеру, собственного сайта, то, чтобы не нарушать целостность картины, вам придется "подстроить" компоненты под сайт. Я думаю, что не ошибусь, если скажу, что каждый flash-дизайнер стремится создать свои ролики в особенной, свойственной только ему, манере. С помощью стилей и тем во Flash 8 можно сделать каждый компонент уникальным. Но не будем распыляться и сосредоточимся пока на стилях.

Прикладной программный интерфейс форматирования (Styles API) предоставляет пользователю свойства и методы, с помощью которых можно изменить цвет компонента и отформатировать текст, содержащийся на нем. Обычно этого достаточно. Вместе с Flash 8 поставляются два стиля с набором параметров: "Halo" и "Sample", которые находятся в файлах HaloTheme.fla и SampleTheme.fla, соответственно. На рисунке показано их месторасположение в Windows 2000/XP. Нужно отметить, что у темы "Sample" свойств намного больше, поэтому целесообразнее использовать именно ее для модификации компонентов. А делается это следующим образом:

  1. Вызывается команда File -> Import -> Open External Library и в диалоговом окне указывается файл SampleTheme.fla. Затем на панели импортированной библиотеки выбирается Flash UI Components2 -> Themes -> MMDefault. Потом из этого окна необходимо перетащить папку с ресурсами нужного компонента (assets) в окно библиотеки символов текущего документа.
  2. При помощи методов setStyle (параметр, значение) и getStyle (параметр) можно установить или получить значение того или иного параметра выбранного стиля.

Поскольку мы работаем с компонентом Alert, то перетащим в библиотеку символов нашего документа папку "Alert Assets". Затем воспользуемся стандартными свойствами темы "Sample" (см. листинг).

Global.styles.Alert.setStyle ("color", "red"); _global.styles.Alert.setStyle ("themeColor", "haloBlue"); _global.styles.Alert.setStyle ("backgroundColor", "0xE0C5FE"); _global.styles.Alert.setStyle ("fontFamily", "times new roman"); _global.styles.Alert.setStyle ("fontSize", "15");

Теперь цвет диалогового окна Alert изменен на фиолетовый (0xE0C5FE), а надписи на нем стали синими, причем шрифт превратился в "Times New Roman" с размером 15 пунктов. Нужно отметить, что таким образом был модифицирован символ Alert, поэтому изменения скажутся на всех его экземплярах. Описание всех свойств тем "Halo" и "Samlpe" можно найти в справке Flash 8.


А если мне этого мало?

Если даже при использовании стилей внешний вид компонентов не отвечает вашим эстетическим требованиям, тогда можно попробовать написать свою собственную тему. Для этого достаточно отредактировать или заменить оболочки необходимых компонентов в одной из стандартных тем. Для этого сохраняем файл HaloTheme.fla или SampleTheme.fla под уникальным именем, загружаем его, переходим в окно библиотеки символов (Window -> Library или Ctrl+L), выделяем необходимый компонент и в контекстном меню выбираем опцию "Edit". Одни элементы пользовательского интерфейса состоят из множества частей, поэтому их можно легко преобразить, перерисовав или создав заново каждую деталь. Такими компонентами являются Button, CheckBox, ComboBox, DataGrid, RadioButton и пр. Другие оболочки рисуются программным способом. В этом случае для изменения внешнего вида компонента потребуется модифицировать исходный код. Это, например, компонент Alert. Поскольку создание пользовательской темы является трудоемким процессом, мы не будем его подробно рассматривать. По крайней мере, сейчас. Вот и все.

Начальство поставило задачу: нужно поддерживать в актуальном состоянии Flash Player. Масштабы: ~15000 компов, на половине из которых FP действительно нужен.

Казалось бы, в чём проблема - делаем доменную политику, запихиваем MSI пакет и радуемся… Но не тут-то было! Структура компании сильно распределена, т.е. в удалённые точки с каналом ~1мбит на 20 компов пропихнуть политиками даже 15мб уже проблема - утром сотрудники включают компьютер и по полчаса ждут загрузки, пока всё скачается и поставится (или просто отвалится по таймауту). Не говоря уже о том, что компы в подобных офисах имеют неприятное свойство периодически из домена выпадать.

Нужно было другое решение, которое будет работать независимо от политик, никак не напрягать пользователя, минимально использовать канал (хотя бы чтобы качали не все одновременно). Варианты со скриптами по очевидным причинам тоже не подошли.

Выручил, как обычно, Гугл: оказалось, что можно поднять внутренний сервер обновления и настроить на него встроенное средство обновления FP. При этом на клиенты нужно будет только распространить файл настроек. Подробности под катом.

Настройка сервера обновлений

1. Получаем лицензионное соглашение

Для распространения своего ПО Adobe требует получить лицензионное соглашение. Не будем нарушать условия использования и получим лицензию (благо, это совсем не сложно): FlashPlayer: Adobe Runtimes / Reader Distribution License Agreement . Лицензия выдаётся сроком на год. По истечении можно отправить запрос ещё раз.

2. Поднимаем веб-сервер

Платформа роли не играет, в моём случае вертится N-ным сайтом на IIS под Win2012. Ресурсов оно практически не жрёт даже при том, что уже ~3000 компьютеров настроены на этот сервер.

Настройки сервера:

  • Доступ по портам 80, 443 (http, https соответственно).
    Первый нужен, собственно, для скачивания, по второму FP будет ходить за XML-кой актуальной версии.
  • Валидный сертификат https.
    Я выписывал сертификат на основе корневого корпоративного, который по умолчанию есть на всех машинах.
  • Листинг директорий.
    Не проверял работу без него - в документации просят, я решил сделать как написано.
Подробно останавливаться на настройке сервера не буду.

Для наглядности назовём сервер FlashPlayerUpdate.domain.local .

3. Скачиваем ресурсы и выкладываем на сервер

В корне веб-сервера создаём дерево директорий: /pub/flashplayer/update/current/sau/ .

Дерево директорий на моём сервере:

Если вы запросили лицензию на первом шаге, то в ответ должно прийти письмо со ссылкой, откуда скачивать FlashPlayer - проходим по этой самой ссылке. Если не пришло, или не запрашивали, то идём сюда: https://www.adobe.com/products/flashplayer/distribution3.html и скачиваем архив по ссылке "Download Background Update Resources ":

Extended Support Release или Public Release

Тут нужно сделать ремарку. На страничке 2 варианта загрузок: стандартный (Public) и Extended Support Release. В моём случае важна стабильность работы и не нужны новые фичи, поэтому был выбран вариант ESR. При этом я добавил себе некоторое количество геморроя: паблик версию можно напрямую выкачивать скриптом с сайта Macromedia. Как выкачивать ESR, я так и не нагуглил, поэтому в моём случае обновление контента на внутреннем сервере происходит в ручном режиме.

В конце статьи приложил 2 скрипта PowerShell: для автоматического обновления (только для стандартной версии; легко портируется на bash), для проверки обновлений и оповещении по e-mail (для любой версии, в т.ч. ESR).


Скачанный архив распаковать в папку /pub/flashplayer/update/current/sau/ на сервере.

4. Распространяем на клиенты файл конфигурации

В зависимости от разрядности системы:

  • 32-bit: C:\Windows\System32 \Macromed\Flash\mms.cfg
  • 64-bit: C:\Windows\SysWOW64 \Macromed\Flash\mms.cfg
Распространять можно любыми способами. Я использовал сочетание доменной политики и сервера администрирования антивируса (для компов, которые вылетели из домена).

В файле включаем тихое автообновление, прописываем интервал обновлений (в днях), путь к нашему серверу, и на всякий случай логирование, чтобы проще было диагностировать проблемы, если они возникнут:

AutoUpdateDisable=0 SilentAutoUpdateEnable=1 AutoUpdateInterval=2 SilentAutoUpdateServerDomain=FlashPlayerUpdate.domain.local SilentAutoUpdateVerboseLogging=1
Если всё было сделано верно, то Flash Player на клиентских машинах должен начать обновляться по расписанию (согласно приведённому файлу выше - раз в 2 дня). Обычно сервис обновления Adobe запускается раз в час для проверки условий обновления - в это время Updater должен увидеть файл конфигурации, перенастроить обновления согласно прописанным настройкам и сходить на новый сервер проверить версию.

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

Автоматизация

Как классический представитель айтишного братства, я терпеть не могу рутинную ручную работу и просто ну никак не мог не автоматизировать процесс проверки и выкачивания новой версии. Однако, как отмечено выше, пока я не нашёл способа выкачивать версии ESR с сайта Macromedia, потому скриптом только проверяю обновления. Предложения приветствуются.
Скрипт для автоматического скачивания обновлений
Только для публичной версии!

Логика работы: скрипт в тупую скачивает файлы обновления напрямую с Macromedia для версий 11,15,16,17,18,19 (если какую-то версию уже убрали с сайта - скрипт просто ругнётся, что не смог скачать и пропустит) и кладёт с заменой на сервер обновления. Никаких проверок версий. На этапе тестирования я использовал этот скрипт: запускал через шедулер на сервере по ночам.

При желании можно скрестить этот скрипт и следующий и получить полную автоматизацию с проверкой версий, оповещениями и скачиванием только при наличии обновлений.

Параметры скрипта:

  • *FPRoot - путь к корневой папке сервера обновлений. Локальный, или сетевой. Естественно, у пользователя, от которого будет запущен скрипт, должны быть права на запись в эту папку.
  • FPDownloadRoot - путь на сайте Macromedia. Задан по умолчанию, но можно изменить при необходимости.
  • DownloadProxy http:// proxy.domain.local.
  • ProxyCreds
  • UserAgent
  • Force
* - обязательный параметр

Пример использования:

Powershell.exe -command "& ".\FPUpdater.ps1" -FPRoot "\\FlashPlayerUpdate\pub\flashplayer\update\current\sau" -DownloadProxy "http://proxy.domain.local" -ProxyCreds "DOMAIN\UserName" -UserAgent "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko""
Все параметры можно захардкодить в скрипт, если пугают длинные строчки запуска.

Скрипт для проверки обновления и оповещения по e-mail
Проверка обновлений идёт по стандартной версии, но поскольку обновляются они одновременно (security-фиксы никто не отменял), то прокатит и для ESR. Для работы скрипта нужно создать в корне веб-сервера (рядом с папкой pub) файл CurrentPublic , в который вписать текущую публичную версию для ActiveX (для проверки используется именно версия ActiveX).

Логика работы: скрипт сравнивает версию, полученную из файла CurrentPublic с вашего сервера с версией на сервере Macromedia. Версию на сервере смотрит по логике автообновлялки: сначала ищет в XML текущий мажорный билд, идёт в папку с мажорным и там смотрит полный билд.

Параметры скрипта:

  • *FPIntServerRoot - Адрес нашего сервера. Например: FlashPlayerUpdate.domain.local
  • FPDownloadRoot - путь на сайте macromedia. Задан по умолчанию, но можно изменить при необходимости.
  • ESR - проверять ESR версию (без этого флага будет проверять публичную).
  • DownloadProxy - прокси сервер, если используется в компании. Писать полностью: http:// proxy.domain.local.
  • ProxyCreds - имя пользователя для авторизации на прокси.
  • UserAgent - для изменения юзерагента, с которым PowerShell пойдёт качать. Например, у нас на прокси ограничение по UserAgent-ам, я хожу с агентом Internet Explorer.
  • Force - отключить проверку сертификатов командлета Invoke-Webrequest (точнее, заставить доверять всем сертификатам).
  • *MailTo - e-mail адреса, на которые будут приходить уведомления.
  • *MailFrom - от кого будут приходить уведомления. Например: [email protected]
  • SmtpServer - smtp-сервер, через который будет производиться отправка сообщения.
* - обязательный параметр

Пример использования:

.\FPCheckUpdate.ps1 -FPIntServerRoot "fp-update.domain.local" -ESR -Proxy "http://proxy.domain.local" -UserAgent InternetExplorer -Force -MailTo "[email protected]","[email protected]" -MailFrom "[email protected]" -SmtpServer "smtp.company.com"

Использованные ресурсы

UPD

Слегка запоздалый апдейт от 17.06.16.

С момента написания статьи Adobe успели 2 раза поменять порядок доступа к странице загрузки FlashPlayer"а. В итоге теперь чтобы получить доступ к странице для скачивания, нужно сперва авторизоваться в Adobe ID. Т.е. вариант с парсингом страницы на предмет версии ESR больше не прокатывает.

Морочиться с авторизацией, получением-отправкой cookie через PowerShell пока не стал. В итоге переделал скрипт для проверки ESR на страницу distribution3 , которая может пропасть в любой момент. Пока так, дальше будет видно.

Я ещё в начале года задавал вопрос на форуме Adobe на тему проверки обновлений версии ESR. Обещают что-то придумать, но пока воз и ныне там.

UPD2

На днях на странице распространения Flash Player (ссылку на которую вы получили, получив лицензию на распространение) появилась следующая информация:

ВНИМАНИЕ! Важные изменения с Extended Support Release

Изначально выпуск Extended Support Release создавался с целью свести к минимуму время, которое тратят ИТ-администраторы на сертифицирование каждого нового выпуска Flash Player: Extended Support Release ограничивал изменения, вносимые в выпуск, до изменений в системе безопасности и исправлений критических функциональных неполадок. На тот момент функциональных изменений в каждом выпуске Flash Player было намного больше, чем изменений в системе безопасности. Однако сейчас ситуация изменилась: число упреждающих и ответных мер безопасности намного превышает функциональные изменения. На практике Extended Support Release больше не ограждает ИТ-организации от огромного количества изменений, вносимых в стандартные выпуски Flash Player, а лишь снижает функциональные риски. В связи с этим было принято решение прекратить выпуск Extended Support Release и сконцентрироваться на разработке только стандартных выпусков. Добавить метки

Прошлая статья была посвящена анимации. Мы создавали анимацию на основе motion tweening, shape tweening и просто составляли движение из отдельных кадров. Думаю, пора перейти к более сложной теме, рассмотрению инструмента, который создает основу для большинства качественных Flash-фильмов (Flash movies).

Этот инструмент - ActionScript - событийно-управляемый язык, встроенный во Flash. Последняя версия ActionScript, (которая присутствует во Flash 5), существенно отличается от ActionScript, который был в 4-м Flash. Если в прошлой версии, это был ограниченный набор команд, позволяющий осуществлять лишь основные действия, и вводимый с помощью не очень удобного интерфейса, то новый ActionScript - это мощный язык, с увеличенным набором команд, поддержкой классов, наследования (!), и гораздо более удобным интерфейсом.

ActionScript делает ваши страницы интерактивными. Вы можете реагировать на события с мышки или с клавиатуры, можете выполнить какие-либо действия при проигрывании определенного кадра.

Для того, чтобы овладеть ActionScript в полной мере, желательно уже иметь опыт программирования (предпочтительно на С++, JavaScript, etc.). Однако, одним из достоинств языка Flash, является то, что вам не нужно быть профессионалом во Flash, или полностью знать ActionScript, чтобы писать на нем качественный код. Вы можете использовать те возможности языка, которые сочтете необходимыми для своей работы.

Так как эта статья посвящена основам языка, в ней мы рассмотрим:

  • Панель действий (Actions panel), на которой происходит практически все общение с ActionScript.
  • Кнопки - как их заставлять работать, как нам требуется.
  • Пути - как обращаться к нужным объектам?
  • Основные действия с Flash-мультиками (movie clips) - мы будем управлять процессом проигрывания фильма, как нам будет угодно.
  • Отладку в ActionScript - окошки Output и Debugger.

Цель этой статьи, дать вам почувствовать ActionScript, показать, что этот язык может служить, как для создания весьма внушительных программ, так и для выполнения элементарных действий, которые сделают вашу страницу гораздо привлекательней.

Термины

Прежде чем мы перейдем к конкретным действиям, несколько терминов из области ActionScript:

  • Действия (Actions) - это инструкции, которые говорят Flash-мультику что делать. От них произошло название языка - ActionScript (дословно - сценарий действий). Давайте договоримся, что в рамках этой статьи, мы будем использовать термин "инструкция", дабы не путаться с настоящими действиями, которые будем производить.
  • События (Events) - это действия, которые происходят, когда проигрывается мультик. События, например, могут происходить, когда заканчивается загрузка какого-то кадра, когда мы достигаем какого-то кадра, когда пользователь нажимает клавишу на клавиатуре или курсор мышки оказывается над нашим объектом.
  • Выражения (Expressions) - это любая часть инструкции, которая порождает значение. Следующие примеры являются выражениями: 2 + 2, 2 * 2, a + b, 2*pi*r, (15 + k) * random(10) .
  • Функции (Functions) - это блок кода, который можно многократно использовать. Функции можно передавать значения и получать от нее возвращаемый результат. Например, number = get_color(15, 24) . 15 и 24 являются аргументами (или параметрами) функции get_color, возвращаемое значение которой записывается в переменную number.
  • Классы (Classes) - это типы объектов. Например, класс дерева - растение. Во Flash есть некоторое количество предопределенных классов (очень похожих на классы JavaScript). Вы можете создавать свои классы, или модифицировать существующие.
  • Экземпляры (Instances) - это буквально экземпляры определенных классов. Например, экземпляром растения могут являться дерево, куст или цветок. Экземпляр - это уже конкретный реальный объект. Если класс - это определение объекта (экземпляра), то экземпляр - это уже конкретное воплощение, это класс в действии. Каждому экземпляру можно присвоить имя, чтобы через него обращаться к функциям или переменным объекта.
  • Обработчики (Handlers) - это специальные инструкции, которые обрабатывают события. Например onClipEvent - обработчик действий, связанных с конкретным символом (см. ).
  • Операторы (Operators) - это элементы языка, которые вычисляют значения, исходя из одного или более аргументов. Например, оператор сложения (+) возвращает сумму двух значений, стоящих слева и справа от него.
  • Переменные (Variables) - это идентификаторы, которые могут хранить значения. Например, a = 5; или name = "Michael".

Эти термины мы будем использовать при обсуждении ActionScript. Итак…

Панель действий (Actions Panel)

Панель действий служит для отображения и ввода ActionScript программ (рис. 1). Существует два режима работы с панелью - нормальный (для "чайников") и экспертный. В экспертном режиме список команд - это простое поле для ввода текста. В нормальном же режиме, мы не можем напрямую редактировать команды. Для этого используется панель параметров.

Добавить инструкцию можно, нажав на кнопку "+" (см. рис. 1) или выбрав соответствующую инструкцию в списке элементов языка. Кроме того, для всех действий во Flash имеются последовательности клавиш, с помощью которых это можно сделать гораздо быстрее. Они приведены справа от каждого действия в меню кнопки "+". Например, чтобы добавить функцию stop() , нужно нажать Esc+st (последовательно: Esc, затем "s", затем "t").

Удалить инструкцию можно, выбрав ее, и нажав кнопку "-" (или просто клавишу Delete).

Я рекомендую вам не начинать сразу же пользоваться экспертным режимом, если у вас нету опыта программирования на Java-подобных языках (С++, Java, JavaScript). У нормального режима есть большое достоинство, делающее его незаменимым для новичков - в нем есть гораздо меньше шансов ошибиться с синтаксисом языка. Новичкам это поможет быстрее понять тонкости ActionScript.


Рис. 1 - Панель действий

В панели действий отображаются действия объекта, либо кадра, выбранного в данный момент.

Кнопки

Первое, что хочется, когда начинаешь изучать интерактивность Flash - сделать что-нибудь, что бы откликалось на действия пользователя, "оживить" ваше творение, добавить обратную связь. Самый простой способ сделать это - кнопки. Поэтому с них-то мы и начнем.

Как вы знаете, во Flash существует специальный тип символа для создания кнопок - Button (см. ). Будем считать, что вы уже научились создавать кнопки, теперь научимся отслеживать нажатия на эти кнопки.

Кнопки в Macromedia Flash обладают обширным списком событий, на которые мы можем реагировать:

  • press - клавиша мышки нажата, когда курсор находится в пределах кнопки;
  • release - клавиша мышки отжата, когда курсор находится в пределах кнопки;
  • releaseOutside - клавиша мышки отжата, когда курсор находится вне пределов кнопки;
  • rollOver - курсор мыши входит в пределы кнопки;
  • rollOut - курсор выходит за пределы кнопки;
  • dragOver - курсор входит в пределы кнопки, при этом была нажата кнопка, и нажата клавиша мыши;
  • dragOut - курсор выходит за пределы кнопки, при этом была нажата кнопка, и нажата клавиша мыши;
  • keyPress ("клавиша") - была нажата "клавиша". Список клавиш можно посмотреть в справке по Flash (объект Key), или использовать панель параметров для вводу нужной клавиши.

К сожалению, Flash "понимает" только левую клавишу мыши. Правая используется для вызова контекстного меню (щелкните правой клавишей на каком-нибудь Flash мультике). Способов отлавливать во Flash среднюю клавишу или "колесико" (mouse wheel), я пока не встречал, думаю, что их не существует.

Перехватываются эти события с помощью директивы on() . Синтаксис ее таков:

On (событие) { ... // Наши действия }

Ниже вы можете сами попробовать вызвать некоторые события:

Очень часто используемый пример - переход по ссылке при нажатии на кнопку:

On (release) { getURL("http://rubs.boom.ru"); }

Чтобы проверить этот сценарий, выделите вашу кнопку, нажмите Ctrl+Alt+A и введите программу.

Вот так просто можно перехватить все события, связанные с кнопкой. Ну а как их использовать - это дело исключительно вашего воображения.

Основные действия с Movie Clips

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

С помощью сценариев на ActionScript вы можете выполнять практически любые действия над символами. Надо только помнить, что выполнить эти действия можно только либо в ответ на действие пользователя, либо при наступлении какого-то кадра на временной шкале.

Итак, что же у нас есть? Я перечислю только основные (на мой взгляд) инструменты. Остальное вы найдете в списке элементов языка или в помощи.

Функции клипов (movie clip), которые можно вызывать:

  • play() - начинает или возобновляет воспроизведение клипа;
  • stop() - останавливает воспроизведение клипа;
  • gotoAndPlay() - переходит на определенный кадр (сцену) и продолжает воспроизведение;
  • gotoAndStop() - переходит на определенный кадр (сцену) и останавливает воспроизведение.

Свойства (параметры) клипов, которые можно считывать/изменять:

  • _x, _y - координаты клипа (в пикселях);
  • _xscale, _yscale - масштаб клипа (в процентах), соответственно по горизонтали и по вертикали;
  • _width, _height - ширина и высота клипа (в пикселях);
  • _rotation - угол поворота клипа (в градусах);
  • _alpha - прозрачность клипа (в процентах);
  • _visible - видимость.

Это далеко не все, что можно делать с клипами. Используйте другие параметры, экспериментируйте, творите!

Имена

Для того, чтобы обращаться к клипам, нам потребуется разобраться с понятием имени объекта (instance name) и пути до объекта (target path). Договоримся, что клип (movie clip) и объект для нас - одинаковые вещи.

Имя объекта - это имя конкретного экземпляра символа. Скажем у нас может быть символ - машинка, а экземпляры этого символа будут называться "Машинка1", "Машинка2", "Pickup", "Запорожец"…

Для того чтобы дать имя объекту нужно выделить объект, и в панели Instance (Window->Panels->Instance, Ctrl+I) в графе Name ввести имя объекта (рис. 2). Имена могут состоять только из букв, цифр и символа подчеркивания ("_"), причем имя не может начинаться с цифры.


Рис. 2 - Панель Instance

Пути

Путь до объекта - это запись имени объекта с учетом иерархии. Попытаюсь объяснить, что это такое.

Вы знаете, что во Flash объекты можно "вкладывать" друг в друга, составляя, таким образом, иерархию. Так вот, эта вложенность обеспечивает не только удобство в обращении с объектами, она еще и ограничивает видимость имен объектов. Видимость ограничивается своим уровнем. Объект может напрямую (по имени) обращаться только к объектам, входящим в него, стоящим на 1 уровень ниже в иерархии.

Для того чтобы обратиться к объекту другого уровня, нужно знать путь до него. Причем путь может указываться как абсолютно (с самого верхнего уровня иерархии), так и относительно (с текущего уровня).

Путь включает в себя объекты, через которые нужно "пройти" по дереву иерархии, чтобы добраться до нужного нам объекта, перечисленные через точку. Кроме того, существует несколько указателей (можно их назвать "виртуальными объектами"), которые часто очень полезны:

this - указатель на "самого себя" (т.е на текущий объект). Бывает нужен, например, когда нужно передать в функцию указатель на объект, из которого эта функция вызывается.

_parent - указатель на "родителя". Указывает на объект стоящий уровнем выше в иерархии.

_root - "корень". Это начало иерархии. Без него не обойтись при указании абсолютного пути.

Путь выглядит так:

leaf.play(); - у подобъекта leaf (лист) вызывается функция play();

_parent.tree.leaf.stop(); - подразумевается, что на одном уровне имеется объект tree, у которого есть объект leaf , у которого и вызывается функция stop();

_root.banner._visible = false; - сделать клип banner , находящийся на 1-м уровне, невидимым.



Рис. 3 - Иерархия клипов

Для иллюстрации возьмем иерархию из 5-ти объектов (рис. 3). Объекты 1-4 находятся на 1-м слое, объект 5 - на 2-м слое. Объект 2 вложен в объект 1, а объект 3 вложен в объект 2. Объекты на рисунке визуально вложены друг в друга, но это ни в коем случае не означает, что так должно быть и "в жизни". Здесь они так сгруппированы для наглядности. Так как имя объекта не может начинаться с цифры, пусть объекты у нас называются obj1-obj5 .

Теперь займемся путями. Для начала посмотрим, какие объекты могут обращаться друг к другу по имени. obj1 может обращаться к obj2, а obj2 - к obj3 , но при этом obj1 не может обратиться к obj3 напрямую, т.к. тот содержится не в obj1 , а в obj2 .

Скажем первому объекту нужно, чтобы объект 3 начал заново воспроизводиться с 1-го кадра. Вот как это делается:

Obj2.obj3.gotoAndPlay(1);

Чтобы 4-му объекту сделать 1-й объект (заметьте со всеми подобъектами!) полупрозрачным, ему нужно в своем сценарии написать следующее:

Parent.obj1._alpha = 50;

Root.obj1._alpha = 50;

Т.к. obj4 у нас находится на первом уровне иерархии, то для него _root и _parent - одно и то же.

Теперь для объекта 3 напишем скрипт, который сделает объект 5 невидимым при нажатии клавиши мыши. В сценарии для объекта 3 пишем:

OnClipEvent (mouseDown) { _root.obj5._visible = false; }

В этом фрагменте мы использовали абсолютный путь. Если бы мы использовали относительный, это выглядело бы как:

Parent._parent._parent.obj5._visible = false;

Надеюсь, я прояснил момент с путями.

Приведенные выше примеры показали не только как выглядят пути, но и как вызываются функции и присваиваются значения свойствам.

Публикации по теме