Урок 2. Переменные и типы данных
- Понятие переменной
- Имена переменных
- Массивы
- Типы данных в языке ActionScript
- Строки
- Выражения
- Логические выражения
- Числа
- Объекты
- Клипы
- Создание и размещение переменных
- Тестирование и отладка сценариев ActionScript
- Изменение значений переменных с помощью кнопок
- Пример фильма. Кнопки с текстовыми полями
- Работа с переменными в кадрах
- Строки с логическими выражениями
- Пример фильма. Вывод данных, генерируемых сценариями кадров
- Адресация переменных в разных кинолентах
- Пример фильма. Отслеживание путей
- Корректное округление
- Пример фильма. Округление вещественных чисел
- Проект. Работа с входной информацией для базы данных
- Слой Buttons
- Слой Forms
- Что нового мы узнали?
В ActionScript, как в любом языке программирования, одно из центральных мест принадлежит структурам данных. Понимание природы данных и механизма их хранения в ActionScript — основа успешного освоения этого языка. Другим важным шагом на этом пути является изучение уникального метода задания сценария ActionScript.
Понятие переменной
Понятие переменной (variable) во многих отношениях является одним из краеугольных камней программирования. В полном соответствии с названием основная характеристика переменных — это их способность изменяться. Пожалуй, переменную проще всего представить себе в виде ящика, в котором могут находиться разные предметы. В программировании переменные способны содержать различного вида данные, обладающие разными значениями. При этом переменная похожа на магазин, на полках которого одни товары приходят на смену другим. Допустим, сначала наш магазин торговал только макаронными изделиями. Затем хозяин решил, что торговлю следует расширить, и включил в ассортимент товаров мясо, рыбу и овощи. Магазин остался тем же самым, возможно, над его дверями даже сохранилась старая вывеска, но теперь его полки заполнены совершенно новыми товарами. Следовательно, изменилось его содержимое.
С точки зрения программиста одной из важных характеристик языка Action-Script является контекстно-зависимая природа переменных. В таких языках, как C++, существуют жесткие правила, требующие, чтобы при объявлении переменной был обязательно указан ее тип — строковый, целочисленный, вещественный и т. п. В ActionScript, как и в других языках сценариев, такие объявления не нужны. При исполнении сценариев ActionScript система автоматически распознает тип данных, хранящихся в той или иной переменной.
Имена переменных
Имя, которое вы даете переменной, должно служить указанием на ее назначение. Такие имена, как VariableA, Variables и им подобные, фактически бесполезны. В отличие от них осмысленные имена переменных, например ItemCost (цена за штуку) или Tax (налог), подсказывают программисту, какая информация хранится в той или иной переменной — такую переменную легко найти, запомнить и использовать в соответствии с ее назначением. Краткие имена переменных, такие как а, Ь, с, хороши при написании очень коротких сценариев, однако при работе над большими и сложными фильмами следует, закончив очередной сценарий, подвергнуть ревизии все использованные идеитификаторы, чтобы переменные получили значимые, «говорящие» имена. Применение осмысленных имен переменных в фильмах Flash важно еще и потому, что сценарии ActionScript обычно невелики по объему и разбросаны по всему фильму. Допустим, вам захотелось изменить значение переменной, которая используется в некоем кадре, входящем в клип, в свою очередь являющийся частью другого клипа. Думаете, вам легко будет вспомнить, что означает в таком контексте переменная k? Определенно нет.
Имя переменной должно представлять собой цепочку символов, в которой нет пробелов между словами. Такие имена, как Pet Store или John Smith, недопустимы. Следует использовать имена вида petstore, Pet_Store или PetStore. Следует также учитывать, что регистр в именах переменных ActionScript не учитывается. Если вы уже назвали какую-то переменную PetStore, то вы не сможете завести другую — с именем PETSTORE или petstore. Однако имя Pet_Store не будет рассматриваться как имя той же самой переменной, поскольку здесь присутствует «лишний» символ — знак подчеркивания. С одной стороны, тот факт, что в именах переменных регистр не имеет значения, облегчает жизнь, поскольку программисту не нужно помнить о том, как именно он назвал некую переменную, BIGSTORE или bigstore, но, с другой стороны, при этом появляется риск случайно использовать идентификаторы BIGSTORE и bigstore как имена разных переменных, каковыми они никак не могут быть. Вы, конечно, вольны считать их разными переменными, но ActionScript с вами никогда не согласится.
Еще одно условие, которое необходимо соблюдать при выборе имен переменных, — это ограничение на использование зарезервированных, или ключевых, слов. Ключевые слова в ActionScript не могут служить именами меток, переменных и функций. Всего в ActionScript существует 16 ключевых слов: break, continue, delete, else, for, function, if, in, new, return, this, typeof, var, void, while, with.
Существуют также два особых литерала (literals) — true и fal se, — которые обозначают логические значения и не могут употребляться как имена переменных. Кроме того, следует избегать использования имен операций, встроенных функций и идентификаторов, которые легко перепутать с «грамматическими» словами языка сценариев ActionScript.
Массивы
В версии Flash 5 появился новый тип переменных — массивы (arrays). В языках сценариев, таких как JavaScript, применяются встроенные массивы, на основе которых создается значительная часть структуры Web-страниц, включая графические изображения и формы. Строго говоря, массивами называются переменные с индексами, которые могут изменяться по одному или нескольким измерениям. Массивы рассматриваются как разновидность объектов (objects). Объектами называются структуры данных, представляющие собой объединение свойств; в данном случае свойствами являются элементы массива. Рассмотрим пример массива Fruits (фрукты), состоящего из четырех элементов:
Fruit[0] = "яблоки" Frint[l] = "апельсины" Fruit[2] = "персики" Fruit[3] = "сливы"В виде массивов часто представляются таблицы данных. Доступ к элементу данных осуществляется через указание имени массива и ряда целых чисел — индексов, соответствующих различным измерениям. В табл. 2.1 показан двухмерный массив, содержащий данные обычной матрицы.
Столбец 1 | Столбец 2 | |
---|---|---|
Строка 1 | Var (1,1) | Var (1,2) |
Строка 2 | Var (2,1) | Var (2,2) |
Переменная с индексами Var (2,1) позволяет легко и наглядно адресовать ячейку, находящуюся на пересечении первого столбца и второй строки. Именно поэтому массивы пользуются столь большой популярностью у программистов. В дальнейшем вы узнаете, как создавать массивы, — эта тема будет рассмотрена в разделе, посвященном объектам.
Типы данных в языке ActionScript
Строки
Строку легче всего представить себе в виде последовательности слов или текста. В программировании строки часто используются в качестве содержания различных сообщений. Строковой переменной можно присваивать строковые значения, как показано ниже:
Airplane = "Фарман"Именем переменной, представляющей тип самолета, здесь является Ai rpl ane, а строковым литералом (literal) — "Фарман". Строковыми литералами называются данные, которые могут использоваться в качестве значения строковой переменной. В отличие от переменных (тип самолета может измениться в любой момент), литералы всегда остаются сами собой — «Фарман» всегда останется «Фарманом». Иногда в виде строк записывают числа:
StreetNumber = "250"Значением переменной StreetNumber является строковый литерал, который состоит из десятичных цифр. Вообще говоря, в виде строки можно представить практически любую цепочку алфавитно-цифровых символов. Кроме букв и цифр такая цепочка символов может включать в себя знаки препинания и пробелы. Буквы и цифры могут присутствовать в строковом литерале в любой последовательности. Приведенная ниже строка скорее всего будет иметь смысл лишь для разработчика фильма в формате Flash и для самой системы Flash; подобные строки не демонстрируются пользователям:
MixUp = "Juan2Tree4"Учтите, что строки — это не числа. Строковый литерал всегда заключается в кавычки. В приведенном выше примере со строкой StreetNumber литерал "250" заключен в кавычки. Если мы сложим "250" и "250", то получим "250250", а не "500".
Выражения
О выражениях принято говорить как о составных (compound) конструкциях, потому что они состоят из двух или нескольких элементов. Приведем пример простого выражения в языке ActionScript: [ Под выражением автор здесь имеет в виду 7+5, а не всю приводимую им строку сценария. — Примеч. перев.]
Total =7 + 5:Значение переменной Total после выполнения этой инструкции будет равно 12. Рассматриваемое выражение является составным (здесь два слагаемых — 7 и 5), однако значение переменной Total целостно и равно 12, поскольку значение переменной не разбивается на какие бы то ни было поля свойств. Возможно, вы спросите, зачем нужно писать в тексте сценария 7+5, когда можно просто написать 12. Действительно, программисты редко используют настолько простые выражения. Смысл понятия выражения станет для вас более очевидным, если вы взглянете на следующий пример:
Total = ItemCost + Tax;Переменная Total здесь получает значение суммы значений двух других переменных. В общем случае нам неизвестно, какие именно у них будут значения в момент вычисления данного выражения, потому что мы имеем дело с переменными. Язык ActionScript избавляет нас от необходимости выяснять, какие значения имеют переменные-слагаемые. Все вычисления производятся автоматически. Рассмотрим, к примеру, следующий сценарий, в котором используются переменные и выражения.
ItemCost =12: Tax = ItemCost * .08; sum = ItemCost + Tax;Сначала мы определяем переменную ItemCost — присваиваем ей значение числовой константы 12. Другая переменная — Tax — получает значение выражения, в котором используется переменная ItemCost, — ее значение умножается на 0,08 (что соответствует 8-процентной ставке торгового налога). Наконец, переменная sum принимает значение еще одного выражения, представляющее собой сумму значений двух упомянутых выше переменных.
До сих пор мы имели дело с довольно простыми выражениями, призванными продемонстрировать лишь общий принцип использования выражений в сценариях. В то же время выражения могут быть и очень сложными, особенно если в них имеется несколько взаимосвязанных переменных. Однако, каким бы сложным ни было то или иное выражение, о том, чтобы правильно вычислить его значение, во всех случаях позаботится компьютер — вам не понадобится ничего высчитывать вручную. Тем не менее при использовании сложных выражений рекомендуется всегда четко и ясно оформлять в тексте сценария все составляющие эти выражения части. Редактор сценариев Action-Script в версии Flash 5 всячески помогает программисту создавать «допустимые», то есть корректные, выражения. Средства создания сложных выражений в ActionScript более подробно рассматриваются в уроке 4.
Конкатенация строк
Операция соединения, или склейки, двух или нескольких строк носит название конкатенации (concatenation). Конкатенация всегда записывается в виде выражения. Для соединения строк в языке ActionScript используется оператор сложения + или строковый оператор add. Рассмотрим пример.
Both = "Джонни" + "Салли"; Both = "Джонни" add "Салли":В обоих случаях при выполнении конкатенации получается строка "Джонни -Салли". Именно эта строка будет значением переменной Both. Конкатенация часто используется при необходимости соединить строки, связанные в смысловом отношении, например имя и фамилию человека. Вам наверняка не раз доводилось заполнять анкеты, где имя вписывается в одну графу, а фамилия — в другую. Чтобы получить полное имя, при обработке анкеты содержимое соответствующих граф следует объединить. Поскольку между именем и фамилией обычно ставится пробел, необходимо учесть его в конкатенации, как показано ниже:
WholeName = "Джон" + " " + "Дэвис":Нам потребовались два плюса (+). Первый из них соединяет строку "Джон" с пробелом (две пары кавычек с пробелом между ними), а второй присоединяет к получившейся строке фамилию "Дэвис". В результате мы получаем строку "Джон Дэвис", а не маловразумительное слово "ДжонДэвис".
Другие операции над строками мы рассмотрим в уроке 4.
Логические выражения
В ActionScript используются также логические, или булевы, выражения. Логическое выражение может принимать значения 0 (нет, ложь) и 1 (да, истина). Булевы выражения названы так в честь Джорджа Буля (George Boole), блестящего британского математика. Логические выражения обладают особым статусом в современной науке и программировании. (Краткую биографическую справку о Буле можно найти в Интернете по ссылке http:// encarta.msn.com/find/Condse.asp?ti=058D1000.)
В следующем примере в переменную Bi ддег помещается логическое значение высказывания «10 больше 15». Поскольку это высказывание неверно, переменная Bigger получает значение «ложь». Bigger = 10 > 15
Логическое значение здесь выражается в форме 10 > 15, а не в виде константы (0 или 1). Любому программисту хорошо известно, какую важную роль булевы выражения играют в самых разных алгоритмах. Если у вас совсем нет опыта программирования, поначалу это утверждение может показаться вам сомнительным, однако со временем вы наверняка по достоинству оцените значение логических выражений.
Логические объекты
Применение логических значений весьма разнообразно. Вы можете, например, присвоить логическое значение какой-либо переменной:
BooVar= 9 < 10;В результате получается значение «истина», однако его можно интерпретировать и как число 1. Предположим, в некоем сценарии используется следующая последовательность команд:
BooVar= 9 < 10; Total=BooVar + 20;После выполнения этих инструкций присваивания переменная Total получит значение 21. Чтобы явным образом указывать, какое именно значение имеется в виду в том или ином случае — логическое или какое-то иное, — следует применять логические объекты. Логические объекты служат контейнерами свойств логического типа. В ActionScript предусмотрены три логических объекта:
- new Boolean () — действует в качестве контейнера логического свойства;
- toString() — преобразует логическое выражение в строку "true" или "false";
- valueOf() — возвращает значение логического типа.
В следующем сценарии используются все три вида объектов.
- Создается переменная bool Var, которая являет собой имя логического объекта со значением "true", то есть 1, поскольку 8 больше 7.
- В переменную s помещается строковое значение переменной bool Var, то есть "true".
- В переменной v также сохраняется значение переменной bool Var, то есть логическая константа "true", или 1.
- В инструкции присваивания для переменной textVal используется символ + (плюс), который в данном случае обеспечивает конкатенацию, то есть эквивалентен ключевому слову add. Поскольку при конкатенации строки с любым другим (нестроковым) значением возвращается исходная строка с приписанным сзади числом, мы получаем строку true2.
- Когда логическое выражение интерпретируется как число, символ + (плюс) трактуется как знак сложения. Получаем 3 (1 + 2 = 3). Именно это число сохраняется в переменной realVal.
Переменная output представляет здесь текстовое поле, и результат вычислений будет выведен на экран. Функция newline автоматически позаботится о «возврате каретки»; поэтому результаты предъявляются пользователю в текстовом поле в ясной и четкой форме:
true2 3Если у вас совсем нет опыта программирования, поначалу вы можете недооценить значимость логических выражений, однако со временем вы наверняка поймете, насколько важен этот механизм. Пример работы с логическими выражениями вы найдете в конце урока, где логическое значение используется при переключении режима округления в функции, которая отбрасывает лишние цифры в десятичном представлении числа.
Числа
С числами все гораздо проще. В отличие от строк числа могут представляться единственным способом. Любые некорректные символы, использованные для представления числа, приведут к возникновению проблем, если только они не являются частью имени переменной. Переменная, определенная как числовая, может использоваться для хранения только числовых значений и обладает всеми признаками чисел.
Числа бывают положительными и отрицательными. Эти разновидности чисел арифметически совместимы. Вы можете создать переменную, в значении которой используются как положительные, так и отрицательные величины. Примеры:
Nuts = -5 + 15; ReallyNuts = -5 + -15 + 3;Целые числа
Целые числа в языке ActionScript — это обычные математические целые числа. У них отсутствует дробная часть. При создании числовой переменной вы не обязаны указывать, какой именно числовой тип вам нужен — целочисленный или вещественный. Но если вы хотите создать именно целочисленную переменную, то должны сообщить системе ActionScript о том, что эту переменную необходимо трактовать как целочисленную. Объявление целых чисел осуществляется с помощью функции int.
Пример: whole = int(AllStuff / Parts):
Выражение All Stuff / Parts здесь означает, что значение переменной All Stuff делится на значение переменной Parts. Вне зависимости от результата деления функция int обеспечивает на выходе целое число, отбрасывая дробную часть. Например, число 17,9 будет округлено до 17. (Если вы возьмете значение 17,84563, все равно получите 17. Количество десятичных цифр в дробной части здесь не играет никакой роли.)
В фильмах Flash числа часто используются при организации цикла. (Всестороннее рассмотрение проблем, связанных с циклами, вы найдете в уроке 5.) Поскольку каждый шаг любого цикла обычно выполняется целиком как единый шаг программы, некоторые создатели фильмов в формате Flash считают, что все шаги цикла должны обозначаться только целыми числами. Сходным образом, если вы вычисляете номер кадра, следует позаботиться об округлении результата вычислений, поскольку в качестве номеров кадров также используются целые числа (не может быть кадра 7,5).
СОВЕТ
ОКРУГЛЕНИЕ. Если вам нужно, чтобы числа округлялись до ближайшего целого (то есть в большую сторону, когда дробная часть числа больше или равна 0,5, и в меньшую сторону в противном случае), следует применить логическое выражение. Как именно должно выглядеть такое выражение и где его надо использовать, вы увидите в примере, приведенном в конце этого урока. Имейте в виду, что лучше всего ваш компьютер умеет обращаться именно с числами. Вы должны максимально задействовать его вычислительный потенциал.
Вещественные числа
Чтобы предотвратить потерю дробной части числа и добиться большей точности, большинство программистов применяют в работе вещественные числа (real numbers), или числа с плавающей точкой (floating point numbers). По умолчанию все числа в сценариях ActionScript рассматриваются именно как числа с плавающей точкой. Более того, все целые числа в составе различных выражений представляются в форме чисел с плавающей точкой, если отсутствует явное обращение к функции int. Рассмотрим следующий пример.
whole = int(All Stuff / Parts); SplitWhole = whole / 7;Если в результате деления значения переменной whole на 7 получится дробное число, переменная SplitWhole также получит дробное значение, несмотря на то что как whol e, так и 7 — числа целые.
Объекты
В ActionScript объектом (object) называется любая коллекция свойств (properties). Вы можете создавать собственные и использовать готовые, предопределенные объекты. Каждое поле свойства обладает именем (name) и значением (value). Например, у объекта может быть свойство с именем _rotation, обозначающее угол поворота и способное принимать значения в интервале от О до 360. Кроме свойств объекты могут располагать методами (methods), или действиями, выполняющими те или иные вычисления или производящими определенные преобразования. К примеру, у логических объектов существует метод, преобразующий логическую константу в строку. Все вопросы, связанные с применением объектов, будут рассмотрены в уроке 8. Кроме того, целый ряд различных типов объектов будет появляться в других уроках. Здесь мы рассмотрим лишь объекты-массивы.
Массивы
Массивом (array) называется объект, содержащий несколько свойств. В общем случае массивы можно считать коллекциями переменных — элементов массива, — снабженных числовыми индексами. Каждый элемент представляет собой отдельное свойство; значением элемента массива является строка, логическая константа или число, соответствующее индексу этого элемента. Элементы массива нумеруются, начиная с нуля; индекс последнего элемента на единицу меньше длины массива. Приведем пример массива из шести элементов.
Friends[0]="Делия": Friends[l]="Pn4apfl"; Friends[2]="Билл"; Friends[3]="Мелани"; Fnends[4]="Дэвид"; Friends[5]="Патрик";Чтобы создать массив, следует использовать объект Array. К примеру, массив, состоящий из перечисленных выше элементов, можно организовать с помощью вызова конструктора new Array, как показано ниже.
Friends=new Аrrау('Делия", "Ричард", "Билл", "Мелани", "Дэвид", "Патрик");Альтернативный метод предполагает указание при создании нового массива лишь количества его элементов с последующим присваиванием им соответствующих значений:
Friends=new Аrrау(6); Friends[0]="Делия";Важность роли, которую играют массивы, становится особенно очевидной, когда в сценарии необходимо организовать цикл для ввода или пересылки некоторых данных. Объект Array располагает целым рядом методов. Их характеристика приводится в табл. 2.2.
Метод | Описание | Пример | Результат |
---|---|---|---|
concat() | Конкатенация двух или нескольких массивов | Group = friends, concat(neighbours) | Новый массив group будет состоять из всех элементов массивов friends и neighbors |
join() | Элементы массива преобразуются в строки и конкатенируются с заданным разделителем | pair= new Array ("Джо" , "Мэй"); together» pair.join(" * "); | Переменная together будет содержать строку Joe * Мае |
length | Возвращает длину массива без аргументов | trio=new Array ("Король" , "Королева", "Принц"); royal=length.trio; | Переменная royal получает значение 21. Это суммарное количество символов во всех элементах массива trio |
рор() | Удаляет последний элемент из массива; используется без аргументов | Landers=new Array ("Спок", "Боунс", "Сулу", "Смит"); Zapped=landers.pop(); | Переменная Zapped будет иметь значение "Смит", а в массиве lenders остаются только три элемента: "Спок", "Боунс" и "Сулу" |
push() | Добавляет к концу массива новый элемент и возвращает новое значение длины массива | usTwo= new Array ("Мэй", "Ларри"); оnеMоrе=usTwo.рush("Керли"); | Переменная оnеMоrе получает значение 3, а массив usTwo будет содержать три элемента: "Мэй", "Ларри" и "Керли" |
reverse() | Инвертирует порядок следования элементов массива | right= new Array ("Хуан", "Чуи","Тереза"); rightreverse(); | В массиве right будут содержаться три элемента, причем порядок их следования таков: "Тереза", "Чуй", "Хуан" |
shift() | Удаляет первый элемент массива и возвращает этот элемент | adios=new Array ("рэп", "свинг", "опера"); diglt=adios.shift(); | После выполнения метода shift в массиве adios будут два элемента: "свинг" и "опера", а переменная digit будет иметь значение "рэп" |
slice (start, end) | Исходный массив не меняется, но из него берется подмассив с элемента с индексом start до элемента с индексом end (исключая последний). Для получения всех элементов массива, начиная с элемента с индексом start, значение параметра end следует опустить | Pizza=new Array ("грибы", "килька", "маслины"); piece=pizza.slice(0,2); | Массив piece будет состоять из двух элементов: "грибы" и "килька". Содержимое массива pizza не меняется |
sort() | Сортировка элементов массива | bakeArray=new Array ("M", "B", "D","P"); chooseEm=bakeArray.sort(); | Массив chooseEm содержит элементы исходного массива в алфавитном порядке: "В", "D", "М" и "Р" |
splice (start, deleteN, v0 vl...vN) | Удаляет заданное параметром deleteN число элементов массива, начиная с элемента с индексом start, а также добавляет к массиву элементы v0 — vN на место удаленного | weather=new Array ("дождь", "снег", "мокрый снег", "град"); weather.splice(3, 1, "хорошая погода"); | В результате вызова метода splice четвертый элемент массива weather — строка "град" (не забудьте, что нумерация начинается с 0) — удаляется, а строка "хорошая погода" добавляется к массиву. В результате он будет состоять из четырех элементов: "дождь", "снег", "мокрый снег" и "хорошая погода" |
unshift (v0) | Ничего не удаляя, размещает в начале массива новый элемент и возвращает новое значение длины | pigHouse=new Array ("солома", "древесина", "кирпич"); a=pigHouse. unshift ("сталь"); | Массив pigHouse будет состоять из элементов "сталь", "солома", "древесина" и "кирпич". Переменная а получает значение 4 |
Клипы
В языке ActionScript существует особый тип данных для представления клипов. Это единственный тип данных, который обеспечивает ссылку на графическую информацию. Так же как у массивов, у объекта клипа MovieClip есть особые методы. В последующих уроках вы будете периодически сталкиваться с объектами MovieClip; подробные сведения о работе с ними будут предоставляться по мере необходимости. В целом можно сказать, что клипы чаще выступают объектами, на которые направлено воздействие со стороны других объектов, нежели источниками команд для иных объектов. Клипы способны лишь отдавать команды другим клипам и переходить к определенным кадрам. Ниже приводится несколько примеров, связанных с использованием объектов MovieClip. В этих примерах экземпляр flame представляет собой ссылку на некоторый клип.
f1ame.gotoAndStop( 8 ); flame.gotoAndPlay(6); flame.play(); flame.stop(): flame.nextFrame();Один из важнейших элементов клипа — это имя его экземпляра. Множество ошибок в сценариях ActionScript связано с тем, что разработчики забывают включить в текст сценария имя экземпляра. Это имя не обязано совпадать с меткой клипа. Чтобы поставить в соответствие всем клипам определенные имена экземпляров, следует воспользоваться средствами панели Instance (Экземпляр). Рекомендуется позаботиться о назначении имени экземпляра сразу по завершении работы над клипом.
Создание и размещение переменных
Итак, вы получили представление о типах данных. Теперь вам нужно познакомиться со способами их использования в сценариях ActionScript и в фильмах Flash. Система Flash облегчает задачу разработчика, предоставляя в его распоряжение редактор сценариев в панелях Object Actions (Операции объекта) и Frame Actions (Операции кадра); с другой стороны, переменные могут быть связаны также с редактируемыми текстовыми полями. Чтобы показать принцип действия обоих механизмов, в текст книги включен пример, в котором используются оба варианта размещения и инициализации переменных. Загрузите программу Flash и выполните описанную ниже последовательность шагов.
- Создайте новую страницу.
- Дважды щелкните на имени слоя Layer 1 (Слой 1) и переименуйте его в Sales Tax (Налог с продажи).
- Выполните команду Window > Panels > Text Options (Окно > Панели > Параметры текста), чтобы вывести на экран панель Text Options (Параметры текста). Создайте редактируемое текстовое поле с помощью инструмента Text (Текст), выбрав его в наборе инструментов. Выделите вновь созданное редактируемое текстовое поле и выберите в верхнем раскрывающемся списке панели Text Options пункт Dynamic Text (Динамический текст).
- Установите флажки HTML и Border/Bg (Граница/Фон) в панели Text Options (Параметры текста).
- Введите имя.переменной result в поле Variable (Переменная). Примите наши поздравления. Вы создали переменную, связанную с редактируемым текстовым полем.
На рис. 2.1 показано, как в данном случае должна выглядеть панель Text Options (Параметры текста).
Рис. 2.1. Задание имени для редактируемого текстового поля, обеспечивающего ввод и вывод значения переменной
Возможность использовать редактируемое текстовое поле в рабочей области — чрезвычайно полезная возможность ActionScript; с другой стороны, работа с таким полем позволяет хорошо разобраться в некоторых механизмах использования переменных. Запустив разрабатываемый фильм, вы сможете наблюдать за тем, что происходит в ваших сценариях, присваивая определенные значения переменной, связанной с редактируемым текстовым полем (в нашем примере — result). Но мы еще не создали никакого сценария. Для ввода сценария мы воспользуемся редактором сценариев.
- Щелкните на первом (ключевом) кадре.
- Выберите команду Window > Actions (Окно > Операции) или нажмите комбинацию клавиш Ctrl+Alt+A (Windows) либо Cmd+Option+A (Macintosh), чтобы открыть панель Frame Actions (Операции кадра) с полем редактора сценариев ActionScript (справа).
- В левой части панели вы увидите ряд папок, в том числе Basic Actions (Основные операции) и Actions (Операции). Щелкните на папке Actions, чтобы раскрыть ее.
- Дважды щелкните на пункте Set Variable (Присвоить значение переменной) в списке Actions.
- В нижней части панели операций появятся редактируемые поля Variable (Переменная) и Value (Значение), как показано на рис. 2.2. Введите приведенный ниже сценарий, в котором присутствуют другие переменные и устанавливаются их значения. Все значения представлены в виде выражений — не забудьте установить для них флажок Expression (Выражение) справа от поля Value.
Рис. 2.2. Установка значений переменных в панели операций
По завершении ввода всех переменных и соответствующих им значений протестируйте сценарий, выполнив команду Control > Test Movie (Управление > Тестировать фильм) или воспользовавшись комбинацией клавиш Ctrl+Enter (Windows) либо Cmd+Return (Macintosh). Обратите внимание, что в сценарии есть переменная result, которая связана с редактируемым текстовым полем. Присваивая этой переменной значение, вычисленное на основе значений других переменных, мы добиваемся его появления в рабочей области запущенного фильма.
Тестирование и отладка сценариев ActionScript
Одна из наиболее распространенных ошибок у начинающих программистов — это опечатка в тексте программы, когда в имени какой-то переменной пропущен или присутствует лишний символ. В результате программа делает совсем не то, что нужно. Опечатки на этапе кодирования действуют на программу убийственно — следует проявлять крайнюю осторожность и тщательно вычитывать все сценарии. (У опытных программистов также встречаются подобные ошибки, но в намного более сложных программах; к тому же опытные программисты, как правило, значительно больше, чем начинающие, проявляют изобретательности в устранении опечаток.) Вам нужно запомнить, одну чрезвычайно полезную аксиому: человек умнее компьютера, хотя есть и другая, столь же полезная: компьютер всегда умнее программиста.
Для начала попробуйте догадаться, что появится у вас на экране, когда вы запустите приведенный выше сценарий. Давайте последовательно рассмотрим, что происходит.
- В первой строке сценария константа 12 присваивается переменной ItemCost. В результате получаем 12.
- Во второй строке значение переменной ItemCost умножается на 0,08. Получаем 0,96.
- В третьей строке происходит сложение результата выполнения первой строки с результатом выполнения второй строки. Получается 12,96.
Поскольку для вывода значения переменной result предусмотрено особое редактируемое текстовое поле, при запуске фильма на экране должна появиться строка 12.96. Выделив кадр, который был использован для размещения вашего сценария, вы можете повторно проверить его. Сценарии всех объектов и кадров при выделении последних отображаются в поле редактора сценариев. Но не следует выделять несколько объектов одновременно, потому что в этом случае в поле редактора никаких сценариев не окажется. Если фильм работает некорректно, проще всего сразу обратиться к средствам редактора сценариев. На рис. 2.3 показано, как выглядит в рабочей зоне законченный фильм, процесс создания которого описан выше. Пустой прямоугольник в рабочей зоне — это редактируемое текстовое поле, где выводятся результаты вычислений. Чтобы протестировать фильм, вы обязательно должны выполнить команду Control > Test Movie (Управление > Тестировать фильм) или воспользоваться комбинацией клавиш Ctrl+Enter (Windows) либо Cmd+Return (Macintosh), так как тестирование непосредственно в рабочей зоне невозможно.
Глобальные переменные
У любой переменной есть определенная область видимости (scope). В качестве области видимости переменных могут выступать как целые фильмы, так и их компоненты. До появления версии Flash 5 все переменные в сценариях ActionScript были глобальными. При условии корректной адресации в любом сценарии можно было получить доступ ко всем переменным, находящимся где угодно в пределах фильма — в любом слое, в любой сцене. В пакете Flash 5 появилась возможность работать не только с глобальными переменными. По умолчанию переменные, введенные с помощью команды Set Variable, рассматриваются как глобальные. Скажем, все переменные, которые мы использовали в сценарии, описанном в предыдущем разделе, обладают глобальной областью видимости.
Рис. 2.3. Законченный фильм и сценарий ActionScript в поле редактора сценариев панели операций
Глобальные переменные могут совместно использоваться всеми кинолентами при условии правильного задания пути к этим переменным. У глобальной переменной, «закопанной» в сценарии, относящемся к кнопке, находящейся на три уровня ниже в иерархии клипов, такой же статус, как у переменных, определенных в первом кадре главной киноленты. Изменение значения глобальной переменной может быть произведено любым объектом; такое изменение в общем случае способно повлиять на все объекты программы. При необходимости координировать действия нескольких объектов на основании значения определенной переменной глобальная область видимости как нельзя кстати. Но если вы используете в разных местах фильма одноименные переменные, очень легко запутаться. К примеру, в программировании принято обозначать переменную — параметр цикла литерой i (от английского слова «increment» — приращение). Если в качестве параметра цикла в двух разных сценариях, находящихся на одной киноленте, будет применяться одна и та же переменная, возможна ситуация, когда изменение ее значения в одном из этих сценариев будет влиять на работу другого. Обобщая, можно сказать, что, хотя глобальные переменные играют важную роль в ActionScript, в ряде случаев их использование сопряжено с определенными проблемами.
Локальные переменные
Локальными называются переменные, объявленные в тексте сценария с помощью ключевого слова var. Если переменная объявлена в конструкции van внутри фигурных скобок, обозначающих начало и конец сценария, то значение этой переменной может изменяться лишь внутри этого сценария. Как только для какой-либо кнопки определяется сценарий, автоматически создается блок кода, находящийся между фигурными скобками. Любую переменную, относящуюся к данному сценарию, можно локализовать в его пределах, то есть сделать локальной переменной кнопки. Взгляните на образец сценария с локальными кнопками:
on(release) { var retail=50; var wholesale=30; var markup=(retail - wholsale); output=markup; }В пакете Flash 5 одно и то же имя переменной может использоваться в нескольких разных сценариях — подобную ситуацию мы уже наблюдали, рассматривая ситуацию с клипами и кадрами. Значение ни одной из перечисленных выше переменных, за исключением переменной output, не может меняться в других сценариях.
Изменение значений переменных с помощью кнопок
Прежде чем пользователь увидит значение той или иной переменной на экране, оно может меняться сотни, тысячи, миллионы раз в результате различных вычислений. Значение других переменных, например отражающих текущий счет в игре, выводится мгновенно. В играх принято сообщать пользователю о каждом набранном им очке. В примерах, которые мы будем в ближайшее время рассматривать, для представления значений переменных используются редактируемые текстовые поля.
Поскольку кнопки, с одной стороны, могут обладать собственными сценариями ActionScript, а с другой стороны, обеспечивают взаимодействие с пользователем, их следует признать важнейшим источником динамических изменений в значениях переменных. Применение команды Set Variable в сценариях кнопок во многом отличается от тех способов установки значений переменных, которые используются в кадрах и редактируемых текстовых полях. Если в сценарии присутствует команда Set Variable для кнопки, автоматически генерируется обработчик соответствующего события. (С полным списком обработчиков событий вы познакомитесь в уроке 6.) На рис. 2.4 показано, как выглядит панель операций, когда разработчик выбирает команду Set Variable для какой-то кнопки.
Пример фильма. Кнопки с текстовыми полями
На компакт-диске, приложенном к настоящей книге, вы найдете файл фильма Button I/O.fla. В этом фильме есть три кнопки, для которых предусмотрены сценарии, демонстрирующие технику манипуляции данными, вводимыми через редактируемые текстовые поля. Фильм включает в себя несколько слоев:
- Concatenate Strings (Конкатенация строк);
- Add Numbers (Сложение чисел);
- Test Boolean (Проверка логического условия);
- Output Window (Окно вывода);
- Input Windows (Окна ввода).
Рис. 2.4. Заготовка сценария ActionScript для кнопки при выборе команды Set Variable. Обратите внимание на автоматическую вставку обработчика события on(release)
Чтобы познакомиться с механизмом взаимодействия кнопок с переменными, выполните следующую последовательность шагов, позволяющих создать соответствующую страницу и связать с ней сценарий.
- Создайте символ кнопки и назовите его ChangeVariable (можно просто взять готовую кнопку в библиотеке).
- Создайте три экземпляра кнопки — по одному в слоях Concatenate Strings (Конкатенация строк), Add Numbers (Сложение чисел) и Test Boolean (Проверка логического условия).
- Добавьте слой Output Window (Окно вывода), который будет содержать текстовые поля.
- Добавьте слой Input Windows (Окна ввода), где пользователи смогут изменять значения переменных и наблюдать за результатами своих действий. Обратите внимание на то, что в фильме присутствуют два окна ввода.
На рис. 2.5 представлены рабочая зона, кинолента и все объекты страницы. Как видно на рисунке, в каждом слое находится лишь один кадр.
Рис. 2.5. Кнопки и текстовые поля в рабочей зоне, предназначенные для проверки механизма изменения значений переменных с помощью кнопок
В сценариях всех трех кнопок применяется команда Set Variable. Конструкция on(release) автоматически добавляется к сценарию кнопки, когда разработчик выбирает команду Set Variable (Установить значение переменной) в редакторе сценариев. Чтобы создать необходимую сцену, следует выполнить следующие шаги.
- Создайте символ, нарисовав кнопку в рабочей зоне, затем выполните команду Insert > Convert to Symbol (Вставка > Преобразовать в символ) или нажмите клавишу F8. Можно также создать кнопку средствами редактора символов, вызываемого командой Insert > New Symbol (Вставка > Новый символ) или комбинацией клавиш Ctrl+F8 (Windows) либо Cmd+F8 (Macintosh).
- В диалоговом окне Symbol Properties (Свойства символа) установите переключатель Button (Кнопка). Введите имя символа в поле Name (Имя). В нашем примере употребляется имя ChangeVariable.
- Выполните команду Window > Library (Окно > Библиотека) или воспользуйтесь комбинацией клавиш Ctrl+L (Windows) либо Cmd+L (Macintosh), чтобы открыть окно библиотеки. Перетащите мышью экземпляры кнопки в рабочую зону — всего экземпляров должно оказаться три — по числу слоев (в нашем случае это Concatenate Strings (Конкатенация строк), Add Numbers (Сложение чисел) и Test Boolean (Проверка логического условия)).
- Выделите одну из кнопок и введите сценарий ActionScript в поле редактора сценариев. Если на экране нет панели операций, откройте ее командой Window > Actions (Окно > Операции) или нажатием комбинации клавиш Ctrl+Alt+A (Windows) либо Cmd+Option+A (Macintosh). При выделении кнопки сценарий автоматически связывается с ней. Повторите этот шаг для двух других кнопок.
Слой Concatenate String
Слой Concatenate String (Конкатенация строк) используется для создания кнопки ChangeVariable (Изменить переменную), с которой связан следующий сценарий ActionScript, демонстрирующий изменение значения строковой переменной на основе данных, вводимых пользователем.
Сценарий кнопки Concatenate, являющейся экземпляром кнопки ChangeVariable
on (release) { а = inputA; b = InputB; output = a + b; }Для конкатенации строк может использоваться либо оператор add, либо оператор сложения (+). Оператор сложения является контекстно-зависимым, что позволяет ему выполнять разные операции для чисел и для строк. В приведенном выше сценарии значение переменной с именем output (а именно так называется переменная, связанная с текстовым полем, обеспечивающим вывод информации в нашем фильме) определяется как результат конкатенации двух строк, являющихся значениями переменных inputA и inputB (эти переменные также созданы на основе текстовых полей).
Слой Add Numbers
Слой Add Numbers (Сложение чисел) используется для создания кнопки Change-Variable (Изменить переменную), с которой связан следующий сценарий Action-Script, демонстрирующий прием изменения значения числовой переменной на основе данных, вводимых пользователем.
Сценарий кнопки Add, являющейся экземпляром кнопки ChangeVariable
on (release) { а = Number(inputA): b = Number(inputB); output = a + b; }Этот сценарий практически идентичен приведенному выше для кнопки Concatenate (Конкатенировать) с той лишь разницей, что для преобразования в числа данных, введенных пользователем в редактируемых текстовых полях, здесь применяется функция Number. Вы можете ввести число как строковый литерал, чтобы поместить ее в переменную, даже если в дальнейшем требуется работать с этим числом именно как с числом (в нашем случае необходима сумма двух чисел, а не результат конкатенации двух строк). Однако для преобразования строки в число следует использовать особую функцию — Number. Впоследствии мы будем также пользоваться функциями Parselnt () и Parse-Float(), позволяющими получить на основе строки или данных редактируемого текстового поля соответственно целочисленное или вещественное числовые значения. (Более подробно эти функции мы рассмотрим в уроке 4.)
Слой Test Boolean
В слое Test Boolean (Проверка логического условия) мы будем работать с логическими выражениями, способными принимать лишь два значения: истина и ложь. Если значение переменной inputA оказывается больше, чем значение inputB, выражение будет считаться истинным; в противном случае оно будет трактоваться как ложное. Следующий сценарий демонстрирует принцип работы такого механизма.
Сценарий кнопки Find String Boolean, являющейся экземпляром кнопки ChangeVariable
on (release) { а = InputA; b = inputs; output = a> b; }Если вы введете в таком фильме два числа, то можете получить довольно интересный результат. Так, введя константу 8 в поле inputA и константу 10 в поле inputB, вы получите на выходе значение true (истина). Но ведь число 8 меньше 10! Возможно, вы ожидали увидеть слово false (ложь). Но не цадо забывать о том, что оба введенных значения здесь трактуются как строки, а не как числа, а сравнение строк в данном случае сводится к сопоставлению символа 1 — первого символа строки 10 — с символом 8. Если для обеих сравниваемых переменных в сценарии использовать функцию преобразования Number, будет выведено значение false.
Слои Output Window и Input Windows
Слой Output Window (Окно вывода) обеспечивает возможность вывода на экран результата работы того или иного сценария ActionScript.
Редактируемые текстовые поля мы будем создавать на основе данных табл. 2.3. Все соответствия между переменными и текстовыми полями устанавливаются с помощью панелей Text Options (Параметры текста) и Paragraph (Абзац).
Таблица 2.3. Параметры переменных в панели Text Options
Имя переменной | Флажок Border/Bg | Способ выравнивания |
---|---|---|
Output | Снят | По правому краю |
Input1 | Установлен | По правому краю |
Input2 | Установлен | По правому краю |
- Откройте панель Text Options командой Window > Panels > Text Options (Окно > Панели > Параметры текста) либо воспользовавшись комбинацией клавиш Ctrl+T (Windows) или Cmd+T (Macintosh). Создайте редактируемые текстовые поля инструментом Text (Текст). Поочередно выделяя каждое поле, в панели Text Options выберите пункт Input Text (Набираемый текст) в верхнем раскрывающемся списке и введите имя переменной в поле Variable (Переменная).
- Задайте способ выравнивания текста в панели Paragraph (Абзац), которая вместе с панелью Text Options (Параметры текста) является частью одной комбинированной панели.
По завершении работы над фильмом выполните команду Control > Test Movie (Управление > Тестировать фильм) или воспользуйтесь комбинацией клавиш Ctrl+Enter (Windows) либо Cmd+Return (Macintosh), чтобы посмотреть, что произойдет. Попробуйте вводить различные значения, в том числе отрицательные числа. На рис. 2.6 показан пример корректной работы фильма.
Это действующий фильм формата Button_I-O.swf. Скачайте файл проекта фильма Button_I-O.fla
Рис. 2.6. Кнопки и текстовые поля в рабочей зоне могут применяться для изменения значений переменных
Попробуйте использовать множество различных комбинаций. Вы можете, к примеру, ввести значения, представленные на рисунке, и щелкнуть на кнопке Concatenate (Конкатенировать). Посмотрите также, что будет происходить при щелчке на кнопке Find String Boolean (Логический результат поиска строки), вводя различные строки. Необходимо еще раз подчеркнуть, что наши кнопки не содержат переменных (все используемые здесь переменные относятся к киноленте), но у кнопок могут быть сценарии, изменяющие значения переменных. Все переменные в нашем примере являются глобальными, поскольку ни одна из них не описана с ключевым словом var. Если вы встретитесь с какими-то трудностями, взгляните на соответствующий фильм, находящийся на компакт-диске. Откройте файл с расширением FLA и сверьте его компоненты с соответствующими частями вашего фильма.
Работа с переменными в кадрах
В кадрах могут использоваться данные, источниками которых являются другие кадры и кнопки; кроме того, кадры способны получать информацию, находящуюся в редактируемых текстовых полях. В предыдущем примере, где мы применяли кнопки для изменения значений переменных, нам было достаточно одного кадра. В примере, который мы будем рассматривать в данном разделе, нам понадобится множество кадров, но здесь не будет ни одной кнопки. Все сценарии мы разместим в кадрах, а результаты их выполнения будут отображаться на экране. На рис. 2.7 вы можете увидеть базовый экран фильма; один из сценариев открыт в поле редактора панели операций.
Рис. 2.7. Все сценарии содержатся в кадрах. Результаты выводятся в текстовых полях, находящихся в рабочей зоне
Строки с логическими выражениями
Поскольку логические выражения являются исключительно важной категорией в языке ActionScript, уже сейчас пора поближе познакомиться со способами работы с ними. В предыдущем примере мы использовали логический оператор «больше» (>) для строк. В версии Flash 4 оператор > применялся только к числам. Но в версии 5 этот оператор работает для всех типов данных. Наряду с ним исключительно для сравнения строк можно использовать оператор gt: выражения "Смит" gt "Джоунз" и "Смит" > "Джоунз" синонимичны и устанавливают, что значение строки «Смит» больше значения «Джоунз». Поскольку понятие значения строк при их сравнении основано в первую очередь на позиции первого символа строки в алфавите, строка «Смит» действительно больше строки «Джоунз». Следовательно, указанные выражения возвращают значение «истина». В справедливости этого утверждения вы убедитесь, познакомившись со следующим образцом сценария ActionScript.
Пример фильма. Вывод данных, генерируемых сценариями кадров
На компакт-диске, приложенном к настоящей книге, вы найдете файл Frame I / O.fla. В фильме, который находится в этом файле, демонстрируется техника вывода на экран данных, генерируемых сценариями кадров. Выходная информация отображается в окне вывода, представляющем собой обычное текстовое поле. Фильм состоит из двух слоев:
- Frame Action (Операция кадра);
- Output (Вывод).
Все ключевые кадры, в которых присутствуют сценарии ActionScript, маркированы комментариями. Мы используем здесь комментарии, а не метки, потому что в данном случае нет необходимости адресовать кадры. Фильм последовательно переходит от кадра к кадру, активизируя различные сценарии в тех местах киноленты, где кадры помечены литерой а. Создав необходимые слои и разметив в них комментарии, можно приступать к вводу сценариев.
- Добавьте новый слой к уже существующему в фильме. Назовите верхний слой Frame Action (Операция кадра), а нижний — Output (Вывод).
- В слое Frame Action щелкните на кадре 60. Не отпуская кнопки мыши, перетащите указатель вниз, чтобы кадр 60 оказался выделенным в обоих слоях.
- Вставьте кадр с помощью команды меню Insert > Frame (Вставка > Кадр) или нажатием клавиши F5. Теперь в обоих слоях фильма будет по 60 кадров.
Итак, все готово к вводу сценариев и других объектов фильма.
Слой Frame Action
В слое Frame Action (Операция кадра) необходимо определить ключевые кадры.
- Щелкните на нужном номере кадра и выполните команду Insert > Keyframe (Вставка > Ключевой кадр) либо нажмите клавишу F6.
- Дважды щелкните на ключевом кадре, чтобы вызвать появление на экране панелей Frame (Кадр) и Frame Actions (Операции кадра).
- В поле Label (Метка) панели Frame введите соответствующий комментарий, предваряя текст двумя косыми чертами (//).
- Вставьте необходимые инструкции средствами редактора сценариев.
Комментарии и текст сценария, которые следует ввести для ключевых кадров, приведены ниже.
Кадр 3 — Boolean String Output = "Smith" > "Jones" Кадр 14 — Concatenated String Output = "Action" + "Script" Кадр 29 — Numeric Boolean Output = -80 > 5 Кадр 42 — Numeric Expression Output = 10 + -7 + 4Слой Output
Слой Output (Вывод) содержит только текстовые поля и метки для них; в нем нет ключевых кадров. Однако имена переменных, связанных с текстовыми полями, используются в качестве выходных данных сценариев, определенных для ключевых полей.
- Чтобы ввести информацию, которая будет располагаться в слое Output, поместите курсор в начало киноленты и выделите этот слой.
- Выполните команду Modify > Movie (Модифицировать > Фильм) и щелкните на кнопке Background Color (Цвет фона), чтобы выбрать цвет фона (на рис. 2.7 фон черный). Щелкните на кнопке выбора цвета в панели Character (символ), чтобы определить цвет текста (с черным хорошо сочетается желтый цвет, — если вы в этом сомневаетесь, загляните в файл Frame I/O.fla, находящийся на компакт-диске, приложенном к книге).
- Выберите вариант Input Text (Набираемый текст) в верхнем раскрывающемся списке панели Text Options (Параметры текста) и наберите в поле Variable (Переменная) имя Output. Установите флажок Border/Bg (Рамка/Фон).
Адресация переменных в разных кинолентах
Всякий раз, когда вы создаете новый клип, автоматически создается дополнительная кинолента. В дальнейшем вы узнаете, как с помощью команды Tell Target (Указать цель) и других средств организовать обмен данными между кинолентами.
В версии Flash 4 для обозначения пути к клипам и их переменным применялся синтаксис с разделителем в виде косой черты. Этот символ разграничивал имена уровней иерархии; имя переменной необходимо было предварять двоеточием, как в следующем примере:
/mc1/mc2/:variableДля клипов, относящихся к другим кинолентам, применялась несколько иная форма указания пути. К примеру, чтобы адресовать какую-то переменную в сценарии, относящемся к клипу, вложенному в другой клип, находящийся на главной киноленте, требовалось использовать конструкцию следующего вида:
../../variableТакой синтаксис доступен и в пакете Flash 5, но в нем предусмотрена также более совершенная система адресации с точками. Такой формат представления переменных хорошо знаком тем, кто имеет опыт объектно-ориентированного программирования или работы с языком JavaScript, но и новички должны по достоинству оценить простоту и естественность нотации с точками. Ее главный принцип состоит в том, что свойства объектов должны перечисляться через точку, выражающую иерархические связи между вложенными полями. Скажем, если ваш клип содержит другой клип, в котором определена нужная вам переменная, ее полное имя будет выглядеть следующим образом: mc1.mc2.variable
Редактор сценариев ActionScript оказывает программисту значительное содействие в корректном вводе исходного текста. Тем не менее при его применении требуется определенная осторожность. Все константы, которые мы использовали в приведенных ранее сценариях, представляют собой выражения. Вводя числа и строки в поле Value (Значение) панели операций, удостоверьтесь, что установлен режим ввода выражения, то есть установлен флажок Expression (Выражение).
Чтобы обеспечить согласованность данных сценария, перед именем переменной вместо двоеточия (:) здесь используется точка. Аналогичные правила существуют для методов, функций и свойств, связанных с клипами. Например, допустимы конструкции следующего вида:
airplane.propeller._rotation=75Здесь airplane является именем клипа, содержащего вложенный клип propeller. Значение cвойства _rotation клипа propeller устанавливается равным 75.
Для продвижения вверх по иерархической структуре объектов вместо комбинации символов ../ необходимо использовать идентификатор _parent, как показано ниже.
_раrent._parent.variableВ такой нотации отражается продвижение по иерархии объектов от клипа к его родительскому, а затем и к «прародительскому» объекту — главной киноленте. Впрочем, обычно для обращения к объектам главной киноленты применяется идентификатор _root, обозначающий верхний уровень иерархии. Пример:
_раrent._parent.variable _root. variableПриведенные конструкции обозначают одну и ту же переменную.
Чтобы проиллюстрировать механизм адресации кинолент, далее мы приведем пример клипа, в сценариях которого осуществляется обращение к переменным, относящимся к различным уровням иерархии объектов.
Пример фильма. Отслеживание путей
Одна из наиболее важных особенностей пакета Flash 5 — это способ взаимодействия объектов, расположенных на разных кинолентах. В файле Data-Paths.fla, находящемся на прилагаемом к книге компакт-диске, вы найдете образец фильма, демонстрирующего механизм обмена данными между клипом и главной кинолентой. В этом фильме присутствует несколько слоев и клипов, содержащих сценарии:
- главная кинолента;
- клип Indie;
- слой DataLine;
- слой Buttons;
- слой Output.
Фильм DataPaths показывает, как различные объекты могут использовать информацию, получаемую из кинолент. В сценарии, определенном для некоторого кадра клипа, устанавливается значение строковой переменной. Кнопка, находящаяся на главной киноленте, включает в себя сценарий, пересылающий данные клипа в редактируемое текстовое поле, относящееся к главной киноленте; в результате указанные данные отображаются на экране. Кнопка, определенная в клипе, позволяет задать значение текстового поля главной киноленты. При щелчке на этой кнопке соответствующее значение будет отражено в текстовом поле, принадлежащем главной киноленте. Наконец, кнопка, созданная на главной киноленте, позволяет генерировать значение переменной текстового поля главной киноленты. Для адресации каждой из кнопок применяется особый путь, однако все кнопки решают одну и ту же задачу — отображают строковое значение в текстовом поле.
Слой Mainline
Слой Mainline (Главная кинолента) применяется для задания значения переменной, определенной в одном из кадров этого слоя. Кроме того, этот слой является базовым для клипа. Чтобы получить описанную ситуацию, выполните следующие действия.
- Создайте новый клип с помощью команды Insert > New Symbol (Вставка > Новый символ). Установите в диалоговом окне Symbol Properties (Свойства символа) переключатель Movie Clip (Клип). Назовите клип indie. При этом вы переходите в режим редактирования символов.
- В режиме редактирования символов создайте символ кнопки, определив для него высоту и ширину равными 47 точкам. Назовите кнопку Mbutt.
- Выполните команду Window > Panels > Info (Окно > Панели > Информация), чтобы вывести на экран панель Info (Информация). Введите в этой панели константу 47 в качестве значения полей W (Ширина) и Н (Высота). Описанные действия следует выполнить для всех кнопок фильма, как показано на рис. 2.8.
По приведенным ниже образцам введите сценарии для кадров кнопок и клипа.
Для кнопки Mbutt относящейся к клипу indie
on (release) { _раrent.output = "...from afar/.."; }Комментарий к кадру 1 клипа indie, находящегося на главной киноленте
iData = "Label your MCM";Комментарий к кадру 1 главной киноленты
Data = "Main TimeLlne Frame";
Рис. 2.8. Клип в режиме редактирования символов
- Щелкните на имени сцены Scene 1 (Сцена 1), находящемся в левом верхнем углу главного окна, чтобы вернуться к главной киноленте. Вы увидите на экране кнопку, которую создали в качестве клипа. Выполните команду Window > Panels > Instance (Окно > Панели > Экземпляр) либо воспользуйтесь комбинацией клавиш Ctrl+I (Windows) или Cmd+I (Macintosh), чтобы открыть панель Instance (Экземпляр). Введите имя экземпляра клипа. Щелкните на кнопке ОК, чтобы закрыть окно и вернуться к главной киноленте.
На рис. 2.9 имя экземпляра, присутствующее в поле Name (Имя), совпадаете введенным нами ранее именем символа, однако они вовсе не обязаны совпадать. Более того, если в фильме используется несколько экземпляров клипа, имена символа и экземпляра не могут совпадать.
- Определите кадр, который будет использоваться в фильме.
- Еще раз проверьте корректность введенных ранее сценариев для копки и клипов, а затем переходите к слою Buttons (Кнопки).
Рис. 2.9. Всегда проверяйте, не забыли ли вы ввести имя экземпляра клипа, адресуемого в сценариях
Слой Buttons
Слой Buttons (Кнопки) в полном соответствии со своим именем предназначен для размещения кнопок на главной киноленте. Прежде всего средствами панели Info (Информация) нужно создать два символа, задав для них ширину и высоту, равную 47 точкам, как было описано в предыдущем разделе. На рис. 2.10 вы видите эти кнопки и их метки. Назовите один из символов Main (Главная), а другой — Remote (Удаленная).
Сценарий для кнопки Main
on (release) { Output = Data; }С помощью инструмента Text (Текст) справа от кнопки разместите надпись Main TimeLine (Главная кинолента).
Сценарий для кнопки Remote
on (release) { output = indle.iData; }С помощью инструмента Text (Текст) справа от кнопки разместите надпись Remote TimeLine (Удаленная кинолента).
Рис. 2.10. Создайте в слое Buttons еще две кнопки
Слой Output
В слое Output (Вывод) находится редактируемое текстовое поле, с которым связана переменная Output, как показано в табл. 2.4.
Таблица 2.4. Имя переменной и значения соответствующих параметров
Имя переменной | Флажок Border/Bg | Способ выравнивания |
---|---|---|
Output | Снят | По правому краю |
Над редактируемым текстовым полем разместите статическую надпись Output (Вывод). Фильм готов. Можно приступать к тестированию.
Запустив вновь созданный фильм, вы увидите, как в окне вывода главной киноленты появляются различные сообщения. Кнопка, находящаяся в клипе, выводит сообщение Form afar... (Издалека), напоминая вам о том, что соответствующая переменная определена в киноленте клипа. Кнопка с меткой Main TimeLine (Главная кинолента) обрабатывает кадр главной киноленты, сообщающий вам о том, что данные поступили из сценария, включенного именно в такой кадр. Наконец, кнопка Remote TimeLine (Удаленная кинолента) выводит сообщение Labelyour MC! (Снабжайте свои клипы метками), исходящее из кадра, относящегося к киноленте клипа, а не к главной киноленте.
Корректное округление
В уроке 4 вы научитесь применять условные инструкции в качестве механизма принятия решений в сценариях ActionScript. Однако использование логических констант позволяет, в частности, произвести сравнение и в зависимости от его результатов осуществить ту или иную последовательность действий, не прибегая к условным инструкциям. (Разумеется, логические выражения широко применяются и в условных инструкциях.) Нам понадобится написать простейший сценарий, состоящий из трех строк, причем все вычисления здесь сосредоточены в одной-единственной строке. Этот сценарий прост не только по форме, но и по функции. С его помощью можно округлять дробные числа. Округление производится в большую сторону, если дробная часть числа больше или равна 0,5, и в меньшую сторону в противном случае. Польза подобных сценариев объясняется, в частности, тем обстоятельством, что функция into производит округление лишь в меньшую сторону, превращая число 2,99 в целое число 2. Впрочем, в уроке 8 вы познакомитесь с объектом Math, позволяющим справиться с этой задачей стандартными средствами — методом Math.round. На рис. 2.11 представлен вид рабочей зоны по завершении разработки фильма.
Рис. 2.11. Текстовые поля для ввода и вывода информации через механизм кадров
Пример фильма. Округление вещественных чисел
В фильме RoundUp.fla, который вы найдете на компакт-диске, демонстрируется применение логических выражений для проверки соответствия реальной ситуации определенному условию. Фактически в этом фильме используется усовершенствованная функция into, позволяющая производить округление как в меньшую, так и в большую сторону. В фильме присутствуют два слоя:
- Output (Вывод);
- Input (Ввод).
Подготовить такой фильм довольно просто. Сначала на основе информации, содержащейся в табл. 2.5 и 2.6, следует создать слои Input (Ввод) и Output (Вывод). Выделите мышью один и тот же кадр в обоих слоях, а затем выполните команду Insert > Frame (Вставка > Кадр) либо нажмите клавишу F5. Для этого фильма нам понадобятся лишь два кадра.
Таблица 2.5. Имя переменной и значения соответствующих параметров для слоя Output
Имя переменной | Флажок Border/Bg | Способ выравнивания |
---|---|---|
Output | Снят | По левому краю |
Input | Установлен | По левому краю |
Введите в качестве комментария к кадру 1 слово Calculate. При вводе текста сценария обращайте особое внимание на парность скобок. Каждой открывающей скобке должна соответствовать закрывающая.
Сценарий для кадра 1 с комментарием Calculate
fraction = Input: whole = int(fraction); output = whole + ((fraction-whole)>=.5);По завершении ввода сценария протестируйте фильм, воспользовавшись комбинацией клавиш Ctrl+Enter (Windows) или Cmd+Return (Macintosh). Фильм выполняется в цикле; он работает чрезвычайно быстро, поскольку здесь лишь два кадра, а это значит, что сценарий практически всегда либо находится в состоянии ожидания, либо обновляет содержимое экрана. Не успеете вы ввести какое-либо число, как сценарий выдаст результат его округления. Алгоритм работы сценария выглядит так.
- В первой строке сценария производится ввод значения входной переменной — числа, обладающего дробной частью. Число набирает на клавиатуре пользователь.
- Введенное на предыдущем шаге число преобразуется к целочисленному виду, при этом дробная часть просто отбрасывается.
- Полученное целочисленное значение складывается со значением логического выражения. При этом сначала мы получаем дробную часть числа, вычитая округленное значение из исходного. (Заметим, что округленное число не может быть больше исходного, так как функция into во всех случаях производит округление в меньшую сторону.) Логическое выражение можно интерпретировать как высказывание, согласно которому дробная часть исходного числа не больше константы 0,5. Если это утверждение соответствует истине, значением выражения будет значение 1; в противном случае мы получим 0. Мы хотим округлять в сторону увеличения лишь те числа, дробная часть которых больше или равна 0,5. Таким образом, единица прибавляется к результату обычного округления лишь в тех случаях, когда упомянутое логическое выражение истинно. Если дробная часть исходного числа меньше 0,5, результат первоначального округления с помощью функции into остается неизменным.
Проект. Работа с входной информацией для базы данных
Система Flash представляет собой прежде всего мощное средство создания фильмов, которые способны выполняться в Интернете и должны производить впечатление на людей, «прогуливающихся» по Сети. Однако фильмы Flash могут также сохранять информацию, предоставленную пользователем, в базе данных, с которой работает соответствующий Web-сайт. На прилагаемом к книге компакт-диске есть файл DataEntry.fla, содержащий образец фильма, в котором через систему кнопок и редактируемых текстовых полей осуществляется ввод определенных сведений, подлежащих дальнейшему сохранению в базе данных; записи базы по одной выдаются на экран; для очистки экрана применяется кнопка Reset (Сброс). В рассматриваемом фильме присутствуют два слоя:
- Buttons (Кнопки);
- Forms (Формы).
На рис. 2.12 представлена основная рабочая зона, в которой наличествует шесть «форм» — редактируемых текстовых полей, две кнопки и поле вывода информации, поставляемой базой данных. Кнопка Submit (Отправить) обеспечивает сбор всех введенных данных и переправляет их в отдельную анкетную форму, одновременно слегка перестраивая пересылаемую информацию. Для выполнения поставленной задачи удобной оказывается функция chr(N). (Информацию обо всех функциях, необходимых для успешной работы со сценариями ActionScript, вы найдете в уроке 7.) При необходимости изменить средствами ActionScript форматирование текста вы можете столкнуться с проблемой ввода различных специальных символов. Так, если вы набираете текст и захотели разбить одну строку на две, вам достаточно нажать клавишу Enter или Return. Сценарий ActionScript не может выполнять подобные действия без участия пользователя, поэтому возникает необходимость в применении функции chr(N), где N — число. Код символа перехода на новую строку равен 13, и этот код можно вставить в любое место строки, если надо произвести ее разделение. (В некоторых случаях можно также использовать инструкцию newline.) На рис. 2.13 показан переход на новую строку после строки с фамилией и почтовым кодом, — в сценарии, приписанном к кнопке Submit (Отправить), вызов функции chr(13) конкатенируется со строками, полученными из соответствующих текстовых полей. Кнопка Reset (Сброс) предназначена для установки во всех полях нулевых значений.
Рис. 2.12. Рабочая зона состоящего из двух слоев фильма, который предназначен для ввода данных
Рис. 2.13. Порядок представления выходных данных изменен для большей наглядности
Слой Buttons
В данном фильме вся обработка сценариев осуществляется щелчками на кнопках Submit (Отправить) и Reset (Сброс). Кнопка Submit позволяет получить данные, введенные пользователем, и вывести их в слегка модифицированном виде. Кнопка Reset осуществляет сброс всех установленных пользователем значений, обнуляя соответствующие поля. Чтобы создать такой фильм, необходимо выполнить следующую последовательность действий.
- Создайте две кнопки с именами Submit (Отправить) и Reset (Сброс).
- С помощью инструмента Text (Текст) поместите на изображениях кнопок текстовые метки. Сначала следует нарисовать овал, а затем-сделать соответствующую надпись.
- Для каждой кнопки выделите овал вместе с текстом метки и выполните команду Modify > Group (Модифицировать > Группировать) либо воспользуйтесь комбинацией клавиш Ctrl+G (Windows) или Cmd+G (Macintosh), чтобы сгруппировать изображение кнопки и надпись.
- Нажмите клавишу F8, чтобы преобразовать выделенную группу в символ.
Кнопка Submit
Значения переменных, связанных с текстовыми полями, переносятся в другие переменные. Фамилия и имя (в обратном порядке) помещаются в переменную name. Название города, штата и почтовый код соединяются в значении переменной address. Для соединения нескольких строковых значений в одно применяется оператор конкатенации (+). Для перехода на новую строку используются либо вызов функции chr(13), либо инструкция newline. Наконец, для окна вывода вновь применяется конкатенация — соединяются значения имени, почтового адреса и адреса электронной почты.
on (release) { name = fname + " " + Iname + chr(13); address= city + " " + State + " " + zip + newline; database=name + address + email; }Кнопка Reset
Чтобы ввести нулевое значение, достаточно оставить поле незаполненным. Следующий сценарий обеспечивает сброс всех значений, введенных в редактируемых текстовых полях.
on (release) { lname = ""; fname = ""; city = "": state = ""; zip = ""; email = "": database = ""; }Слой Forms
Работа с текстовыми полями в слое Forms (Формы) весьма проста. Для каждого поля определена особая переменная, обеспечивающая доступ к данным этого поля. Все текстовые поля позволяют вводить данные; поля выделяются на экране рамкой и цветом фона. Для всех полей, перечисленных в табл. 2.7, установлен темно-коричневый цвет шрифта, чтобы они хорошо выделялись на экране. Возможно, вы предпочтете какой-то другой цвет. Для установки цветов в соответствующих панелях Flash 5 предусмотрены кнопки выбора цвета. Для текстовых полей, в которых пользователь вводит информацию, в панели Text Options (Параметры текста) всегда следует выбирать вариант Input Text (Набираемый текст). Размещая рядом с текстовыми полями метки, выбирайте вариант Static Text (Статический текст).
Таблица 2.7. Текстовые поля базы данных
Имя переменной | Флажок Border/Bg | Способ выравнивания |
---|---|---|
Lname | Установлен | По левому краю |
Fname | Установлен | По левому краю |
City | Установлен | По левому краю |
Что нового мы узнали?
В этом уроке мы научились...
- Идентифицировать типы данных в языке ActionScript.
- Создавать и размещать переменные.
- Изменять значения переменных с помощью кнопок.
- Создавать кнопки с текстовыми полями.
- Работать с переменными в кадрах.
- Выводить данные, генерируемые сценариями кадров.
- Адресовать переменные в разных кинолентах.
- Корректно округлять десятичные значения.