Язык ActionScript 2.0

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

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

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

Для начала необходимо изучить возможности специального редактора для написания кода программ на языке ActionScript 2.0. Этот редактор существенно облегчает процесс написания программ, особенно для новичков. О нем пойдет речь далее. В рамках небольшого раздела невозможно полное изложение всех команд (около 500 лексем) программной среды ActionScript 2.0, поэтому будем считать, что в дальнейшем процесс программирования Вы будете совершенствовать уже с использованием специальной литературы для профессионалов.

К моменту написания данного пособия была выпущена в свет седьмая по счету версия программы корпорации Macromedia - Flash MX Professional 2004. Ее можно найти в русской и английской версии. Советуем всегда использовать английскую версию, во избежание путаницы, связанной с возможностью разного толкования понятий и терминов при переводе.

Рисунок 3.28 изображает развернутую панель редактора кода Actions - Frame. Можно считать, что редактор кода - это обычный, несколько упрощенный текстовый редактор. По своим возможностям он напоминает Блокнот в составе Windows и допускает копирование и перенос кода программ в другие текстовые редакторы и наоборот. Обратите внимание -в нем имеется возможность отката и возврата: Undo и Redo. Вызвать меню с этими командами можно щелчком правой кнопки мыши на рабочем поле редактора. Кроме того, слева к рабочему полю добавлены еще две маленькие панели - с библиотекой всех элементов языка ActionScript 2.0 и деревом объектов ролика.

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

Панель редактора кода Actions - Frame

Рис. 3.28. Панель редактора кода Actions - Frame.

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

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

При этом необходимо обязательно проконтролировать, как изменится название панели Actions в соответствии с тем, к какому типу объектов он относится. Их может быть только три: Actions - Frame - код, помещаемый в кадр (при выделении ключевого кадра на временной шкале Timeline, не обязательно главной), Actions - Movie Clip - код, помещаемый в клип (при выделении клипа) или Actions - Button - код, помещаемый в кнопку (при выделении кнопки).

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

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

Пример всплывающих меню

Рис. 3.29. Пример всплывающих меню

Сообщение

Рис. 3.30. Сообщение

Иначе будет выведено окно Flash MX с тревожным предупреждением и вспомогательная панель редактора кода Output с подробным описанием совершенной ошибки (рис. 3.31). Здесь для примера специально была пропущена открывающая круглая скобка в команде attachMovie ).

Кроме того, панель Output выполняет важнейшую роль по обеспечению обратной связи, доставляя нам информацию из глубин программной среды ActionScript 2.0. Существует специальная функция (команда) языка - trace () для формирования запроса на визуализацию в окне Output оперативной информации о любом элементе создаваемой программы. Это первая команда, с которой мы познакомимся в разделе, посвященном переменным.

Сообщение об ошибке

Рис. 3.31. Сообщение об ошибке

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

Участок кода до форматирования

Участок кода после форматирования

Участки кода

Рис. 3.32. Участки кода

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

Седьмая кнопка на панели инструментов редактора кода служит для вызова оперативной подсказки о требуемых для данного метода или функции параметрах. Для того чтобы подсказка появилась, необходимо предварительно поместить курсор между круглыми скобками метода или функции и затем нажать кнопку'5'. Например, для метода attachMovieQ -подсказку смотрите на рис. 3.33. Подсказка в данном случае означает, что вначале в круглых скобках данного метода необходимо указать idName (Идентификационное имя клипа), копию которого предполагается создать (имя библиотечного экземпляра), затем после запятой должно располагаться newName (Новое имя, т.е. имя создаваемой копии клипа), далее после запятой должен располагаться depth (Номер слоя), на который Вы желаете поместить создаваемую копию и, наконец, потом могут быть указаны необязательные параметры initObject - свойства копии клипа (координаты и пр.).

Подсказка

Рис. 3.33. Подсказка

В заключении, рекомендуем установить режим нумерации строк листинга программы. Для его включения, достаточно вызвать главное меню панели редактора ActionScript 2.0 при помощи кнопки, расположенной в ее правом верхнем углу и поставить галочку на строчке View Line Numbers (Показывать номера строк) - (рис.3.34).

? Actions - Frame

[л] Globiil Functions fx] Global Ргорігііи |j] St4«m»r*s

Operators

Га] BuiHn Classes

fa] Constants

Гл I Compile- Directives

A) Types

Jtj Deprecated a| Data CcmpontrMts

X] Component

l*i Index

ffi [x| Current ScleAion

S

Ph Script

Ctrl+=

Go to Line... Ctrl+G

Auto Format

Ctrl+Shift+F

Check Syntax

СІГІ+Т

Import Scr pt...

Ctrl+Shift+I

Export Script..

ctrl+Shift+x

Prht...

View Esc Shortcut Keys

VewLne Numbers

Ctrl+Shift+L

word

ctrl+shift+w

Auto Format Options...

Preferences...

Ctrl+U

Help

Maximize Panel

Close Panel

Рис. 3.34

Рассмотрим подробнее:

  • • архитектуру и содержание языка ActionScript 2.0;
  • • методику разработки программ.
  • 1. ActionScript 2.0 - это полнофункциональный язык сценариев, позволяющий писать программы по модульному принципу, т.е. частями. При этом он является объектно-ориентированным языком, таким как Java и C++, однако он не так жестко структурирован и более всего похож на JavaScript.

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

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

В языкознании определение предложения ограничивается указанием на то, что оно должно отражать законченную мысль, начинаться с большой буквы и заканчиваться точкой. В ActionScript 2.0 предложение предполагает выполнение какого-либо действия, чаще всего, начинается с новой строки и завершается, как правило, точкой с запятой. Почему, чаще всего, и, как правило? Потому что правила эти не строгие и даже в отсутствие, например, точки с запятой в конце предложения, интерпретатор (обработчик) языка, в данном случае Флеш плеер, попытается понять и выполнить команду.

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

Главным действующим лицом в объектно-ориентированном языке является, естественно, объект. Это сложное понятие для начинающего программиста и для начала можно не ломать себе голову, пытаясь до конца уяснить его смысл. Однако для особенно дотошных и любознательных можно дать краткое пояснение.

Объект - это неупорядоченное множество свойств тех или иных типов данных. В ActionScript 2.0 семь типов данных: числа - namber, строки - string, булевы величины - boolean, пустое значение - null, неопределенность - undefined, объекты - object и клипы - movieclip. Последние два типа являются сложными, так как сами содержат структурные компоненты. При этом свойство представляет собой именованную область памяти, хранящую величину какого-либо типа данных: числа, строки, булевой величины, объекта, клипа или функции. Если свойством сложного типа данных является функция, то такое свойство называется методом. Объекты создаются на базе некоторого шаблона, называемого классом, и потому наследуют свойства и методы класса. Обратите внимание, что среди указанных типов данных нет массивов. Массивы можно создавать при помощи объектов класса Array, а, применяя соответствующие методы этого класса, можно модифицировать их свойства.

С версии ActionScript 2.0 во Flash MX появилась возможность давать имена клипам, меткам кадров, текстовым полям и кнопкам, писать названия переменных и функций на любом языке мира, в том числе и на русском. Однако по-прежнему имена (идентификаторы) не должны начинаться с цифр, знака подчеркивания, иметь в своем составе пробелы и содержать специальные символы, совпадающие с операторами и разделителями, а также совпадать с лексемами и служебными словами, зарезервированными для языка ActionScript. Важно также помнить, что в одном проекте не должно быть объявлено двух одинаковых имен.

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

Так, примеры неправильного задания имен:

  • 1) _объект
  • 2) 1 _объект
  • 3) объект-1
  • 4) clip А
  • 5) function
  • 6) ves Gruza, где 1) - не следует начинать имя со знака подчеркивания. 2) - имя не может начинаться с цифры. 3) - в имени не должно быть дефиса. 4) - в имени не должно быть пробелов. 5) - нельзя использовать служебные слова, зарезервированные для языка ActionScript. 6) - в имени не должно быть пробелов.

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

  • 1) объект
  • 2) объект1
  • 3) объект_ 1
  • 4) clipA
  • 5) vesGruza
  • 6) весГруза

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

Одной из фундаментальных составляющих любого языка программирования являются переменные.

Как следует из названия, переменные могут изменяться, на то они и переменные. В классическом программировании принято делить переменные на типы, по принципу хранения цифровой или символьной (строковой) информации и, кроме того, необходимо их инициализировать (объявлять) при помощи специального оператора var (переменная). В ActionScript 2.0 переменные не имеют формальных отличий (типов) и потому могут хранить числа (17, Збб или 5.78), строки

(последовательность текстовых символов - "Дом №25.’’, "Любое предложение."), выражения (формулы, например, а + Ь) и логические выражения (например, а > Ь). Чтобы лучше понимать, чем являются переменные в ActionScript 2.0, можно представить себе, что это просто именованные области памяти, хранящие какую-либо информацию. Объявляя переменную, мы тем самым связываем ее имя с определенным участком памяти и можем сохранять в этом секторе все что угодно, в том числе, обновлять или изменять его содержимое. В общем виде, переменную можно рассматривать как ссылку на объект каких-либо данных, а их тип определяется интерпретатором (плеером) динамически по ходу выполнения сценария.

Как результат, процесс инициализации переменных в ActionScript 2.0 максимально упрощен. Для объявления переменной достаточно просто упомянуть ее в любом месте программы. Например:

весГруза = 15;

первыйЛозунг = "Привет, мир!";

в данных предложениях мы объявили переменные с именами весГруза и первыйЛозунг, а также при помощи оператора присвоения = определили им соответствующие значения. Переменная весГруза или, если хотите, участок памяти с таким названием будет хранить число 15, переменная первыйЛозунг - текст. Обратите внимание, что текст обязательно заключается в кавычки, что и указывает на принадлежность данной переменной к строковому типу, причем кавычки могут быть и одинарные, например: 'Привет, мир!'.

Исходя из уровня иерархии переменные могут быть глобальными и локальными. К глобальным относится подавляющее число переменных, к ним можно обратиться из любого места программы, к локальным - только в пределах той функции, в которой они объявлены. При объявлении локальной переменной внутри функции обязательно применение специального, зарезервированного для ActionScript 2.0 ключевого слова var, иначе интерпретатор (обработчиком является, в данном случае, Flash-проигрыватель) автоматически присвоит ей статус глобальной. Пример локальной переменной:

function движениеВверх() {

for (var і = 1000; і<1800; і++) {

var М = Math.random()*10;

МассивА[і]._у -= М;

}

}

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

Рассмотрим также числовые переменные. Над переменными, хранящими числа, можно совершать математические операции, их можно складывать, вычитать, умножать, делить и т.д., создавая тем самым выражения. Их можно включать в формулы, например:

а = 15;

Ь = 7;

с = а + Ь;

Так, мы объявили переменные а и Ь, и с помощью оператора присвоения = присвоили им значения 15 и 7, затем объявили переменную с и присвоили ей значение суммы двух предыдущих переменных а и Ь. В результате переменная с хранит значение 22. Если мы возьмем объявленную ранее переменную весГруза и прибавим к ней единицу, то это будет выглядеть так:

весГруза += 1;

Видно, что произошла операция сложения, и затем, операция присваивания, теперь переменная весГруза будет хранить значение 16. Эту же операцию увеличения переменной на единицу, называемую в ActionScript 2.0 инкрементированием, можно записать и по-другому:

весГруза ++;

Подобная запись употребляется очень часто и в современном программировании имеет весьма важное значение, вот почему в названии языка С, с началом использования операции инкрементирования, появилась приставка C++. Однако прибавлять и присваивать можно любые числа, в том числе и переменные, например:

весГруза += с;

теперь значение переменной весГруза будет равно 16 + 22 = 38.

Также можно усложнить задачу:

весГруза += весГруза*2-с;

что означает увеличение переменной весГруза на умноженное значение переменной весГруза на два и вычитание от полученной величины значения переменной с, то есть: (38 х 2) - 22 = 54. В результате переменная весГруза принимает новое значение: 38 + 54 = 92. Как видите, многое совпадает с привычными со школы действиями над числами, но есть и отличия.

В случае, если мы хотим произвести ряд математических действий над несколькими переменными, то можно это сделать, вводя, например, новую переменную и присваивая ей значение, вычисленное, например, по формуле:?/4 + с2, где Р - вес груза, равный 92, а с принимает значение 22:

новыйВесГруза = весГруза/4+с*с;

в результате переменная новыйВесГруза будет хранить следующее значение: 92/4 + 222 = 23 + 484 = 507.

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

Далее откроем новый документ во Flash MX - Untitled 1, выделим на главной временной шкале Timeline первый кадр, преобразуем его в ключевой кадр, например, вызвав при помощи правой кнопки выпадающее меню и выбрав команду Convert to Keyframes. Преобразование в ключевой кадр обязательно, ибо программный код можно размещать только в ключевых кадрах ролика. Теперь откроем панель Actions - Frame и аккуратно скопируем в нее ряд выражений:

  • 1 а = 15;
  • = 7;
  • 3 с = а + Ь;
  • 4 trace(c);
  • 5 весГруза = 15;
  • 6 весГруза ++;
  • 7 Ігасе(весГруза);
  • 8 весГруза + = с;
  • 9 ігасе(весГруза);
  • 10 весГруза += весГруза*2-с;
  • 111 гасе(весГруза);
  • 12 новыйВесГруза = весГруза/4+с*с;
  • 13 trace(новыйВесГруза);
  • 14 первыйЛозунг = "Привет, мир!";
  • 15 trace(первыйЛозунг);

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

Далее попробуем разобраться в приведенном сценарии. Здесь предыдущие выражения собраны вместе и объединены в единый сценарий, а в строчки 4, 7, 9, 11, 13 и 15 добавлена уже упомянутая функция trace (). Функция trace О, в данном случае, должна помочь нам узнать значения переменных, заключенных между ее скобками. По ходу выполнения сценария она будет передавать эти данные панели Output для отображения их оперативных значений в текстовом окне.

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

Отметим, что с помощью функции trace () можно тестировать код сценария только внутри программы Flash MX. При публикации проекта в файл swf все участки кода, содержащие функцию trace (). будут удалены. Как же этот сценарий должен выполняться? Кто и когда будет его выполнять? Ответ прост: при тестировании ролика в программе Flash MX, как только загрузка тестируемого файла swf (не опубликованного еще) в проигрыватель Flash закончится, проигрыватель определит, что в ролике всего один кадр и в нем кроме сценария ничего нет. Далее, по установленному порядку плеер обязан хотя бы один раз сначала и до конца выполнить скрипт, находящийся в ключевом кадре главной временной шкалы, что он непременно и сделает.

Таким образом, если Вы правильно скопируете приведенный сценарий в редактор кода и протестируете его через выпадающее меню Control по ссылке Test Movie, то в окне Output обязательно получите желаемую информацию (рис. 3.35).

Окно Output

Рис. 3.35. Окно Output

Используя такой прием, Вы сможете теперь составлять собственные сценарии с использованием числовых переменных и вычислять их значения по нужным Вам формулам.

Переменная первыйЛозунг - строковая переменная. Функция trace () предыдущего примера (рис. 3.35), не ошиблась и правильно передала ее строковое (текстовое) значение в окно Output. Наличие открывающих и закрывающих двойных или одинарных кавычек, оказывается, действительно обеспечивает плееру возможность распознавания текста среди цифр.

В строковых переменных можно хранить и цифры, но тогда их нельзя будет умножать или делить, так как они будут отображаться только в символьном (текстовом) виде. Однако их можно складывать, то есть объединять, и эта операция называется конкатенацией строк. Например:

первыйЛозунг = "Привет, мир!";

мойЛозунг = "Это я!";

общийЛозунг = первыйЛозунг+мойЛозунг;

trace( общийЛозунг);

проверив по ссылке Test Movie этот сценарий, в окне Output обнаружим, что текст двух фраз слился: Привет мир! Это я!. Разделить строковые переменные пробелом можно с помощью вставки пробела заключенного в кавычки:

общийЛозунг = первыйЛозунг^ " "+мойЛозунг;

trace( общийЛозунг);

теперь в окне Output текст общего лозунга будет отображен правильно. Того же результата можно добиться, если заранее добавить пробел в конце текста первой переменной:

первыйЛозунг = "Привет, мир!

или в начале текста второй переменной:

мойЛозунг= "Это я!";

Кроме того, к строковой переменной можно прибавлять числовую переменную, в результате получится строковая переменная, конкатенированная с числовым выражением:

весГруза = 72;

всего = мойЛозунг + весГруза;

При этом можно прибавлять просто число с пробелом:

всего = мойЛозунг+ " "+2005;

Вместе с тем, операция увеличения строковой переменной на единицу (операция инкрементирования) дает неопределенное число NaN, стирая всю строковую информацию:

всего ++;

Результат тестирования приведенных выражений показан на рис. 3.36. Обратите внимание, что операция переопределения, в десятой строчке сохраняя текст, переопределяет число. А в одиннадцатой строчке, переменная меняет (переопределяет) свой тип со строкового, на числовой, хотя бы и неопределенного NaN значения.

  • 2
  • 3
  • 4
  • 5
  • 6
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

первыйЛозунг “ "Привет, мир!"; мойЛозунг = "Это я!";

обшийЛозунг = первыйЛозунг+мойЛозунр; trace(обшийЛозунг);

"+мойЛозунг;

обшийЛозунг = первыйЛозунг+" trace(обшийЛозунг);

весГруза = 72;

всего = мойЛозунг+весГруза;

trace(всего);

всего ? мойЛозумг+" "+2005;

trace(всего);

всего++;

trace(всего);

Результат тестирования

Рис. 3.36. Результат тестирования

При помощи конкатенации к строковым переменным можно прибавлять числа и переменные, хранящие числа. Например:

весГруза = 75.5;

текстВесГруза = "Вес груза =

итого = текст Вес Груза+весГруза + " кг. trace( итого);

строковая переменная итого хранит сумму строковых и числовых

данных. Результат

выполнения данного сценария показан на

рис. 3.37:

Рис. 3.37. Результат сценария

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

На практике чаще всего конкатенацию проводят одновременно с объявлением строковой переменной:

т = 20;

температура - "Температура воздуха = градусов по

Цельсию.

trace( температура);

результат показан на рис. 3.38:

й й Ф V' f (S Ф ЕО.

  • 1 т = 20;
  • 2 температура = "Температура воздуха = "+т+" градусов по Цельсию.";
  • 3 trace(температура) ;
  • 4
Результат

Рис. 3.38. Результат

Так, знак і использован для обозначения неразрывности строки, потому что в редакторе кода строку переносить нельзя, иначе интерпретатор тут же запутается, приняв строку по Цельсию. ”; за еще одно предложение и воспримет перенесенную часть как новую переменную.

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

Далее рассмотрим вопрос прочих переменных. Так как переменная является, по сути, простой ссылкой на объект данных, для ActionScript 2.0 все объекты данных являются переменными, в том числе, и константы, и объекты, и клипы, ибо все они являются именованными участками памяти. Учитывая, что тип переменной определяется динамически по ее значению, переменную можно переопределить в любой момент, например:

весГруза;

здесь переменная не определена и потому имеет тип undefined -неопределенность, далее, если написать:

весГруза = 7 5.5;

переменная имеет тип namber - число со значением 75.5, далее, если написать:

весГруза += "00";

переменная изменила тип на string - теперь это строка со значением 75.500, далее, если написать:

весГруза -= 5;

переменная опять namber - число со значением 70.5, далее, если написать:

весГруза = весГруза > 0;

переменная весГруза становится типом boolean - это булева величина с логическим значением true (истина), а если написать:

весГруза = весГруза < 0;

переменная весГруза, оставаясь типом boolean (булевой величиной), примет логическое значение false (ложь), но если написать:

весГруза = "весГруза";

это снова string - строка с текстом: весГруза.

Это подтверждается тем, что в окне Output при тестировании данного сценария, если предварительно скопируем эти выражения в окно редактора кода ActionScript 2.0 и добавим функцию trace () для определения промежуточных значений переменной весГруза -рис.3.39.

В окне Output логическое выражение принимает только два значения: true (истина) или false (ложь), то есть 1 или 0, и потому может использоваться, как часть математического.

Определение промежуточных значений переменных

Рис. 3.39. Определение промежуточных значений переменных

Некоторые операторы могут выполнять несколько функций, например, оператор + служит, как для сложения чисел, указания знака числа, так и для конкатенации строк. Оператор - служит для вычисления разности чисел и может указывать на отрицательное значение числа. Оператор () может использоваться для разделения очередности выполнения математических операций (изменения приоритета) и для вызова функций. Операторы инкрементирования ++ и декрементирования — могут применяться, как перед переменной (это будет префиксное использование), так и после - постфиксное использование. При префиксном инкрементировании значение переменной увеличивается на единицу и в выражение возвращается полученный результат (рис. 3.40):

весГруза = 75.5;

Р=3+(++весГруза);

trace( весГруза );

trace(P);

1 весГруза = 75.5;

Р = 3+(++весГруза);

И

? Output

:=

  • 76.5
  • 79.5

Рис. 3.4. Результат

При постфиксном инкрементировании значение переменной увеличивается на единицу, а в выражение возвращается первоначальная величина (рис. 3.41):

весГруза = 75.5;

Р=3+( весГруза++);

trace( весГруза );

trace(P);

Значение переменной

Рис. 3.41. Значение переменной

При этом в ActionScript 2.0 все операторы имеют строго определенный иерархический приоритет по порядку выполнения операций, например, в выражении:

весГруза = 75.5+5*10-3;

сначала будет выполнена операция умножения, а затем операции сложения и вычитания, результат вычислений: 122.5.

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

весГруза = (75.5+5)*10-3;

результат вычислений: 802.

Таблица 3.1 перечисляет основные операторы языка в порядке убывания приоритета.

Таблица 3.1

Оператор

Функция

+

Плюс - знак числа

і

Минус - знак числа

Логическое НЕ (not) - логическое отрицание при операциях над булевыми величинами

++

Постфиксное инкрементирование, увеличивает число на 1

0 п

Постфиксное декрементирование, уменьшает число на 1

Оператор вызова функции

Оператор доступа к свойствам объекта

Оператор доступа к свойствам объекта

Префиксное инкрементирование, увеличивает число на 1

Префиксное декрементирование, уменьшает число на 1

new delete typeof

*

/

%

+

Оператор для создания объекта класса

Оператор для удаления переменной, свойства или функции

Оператор для определения типа объекта данных

Умножение

Деление

Остаток от деления

Суммирование чисел и конкатенация строк

<

Вычитание чисел

Оператор сравнения - Меньше чем

>

Оператор сравнения - Меньше или равно Оператор сравнения - Больше чем

>=

Оператор сравнения - Больше или равно

1-

&&

II

Равенство

Неравенство

Логическое И(and)

Логическое ИЛИ (or)

Оператор условия

*—

/=

+=

%=

Присваивание

Умножение и присваивание

Деление и присваивание

Сложение и присваивание

Вычитание и присваивание

Вычисление остатка от деления и присваивание

Оператор последовательного вычисления

Также рассмотрим операторов условия и циклы (операторы условия if и if - else) .

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

Если данное условие верно, то нужно сделать то-то и то-то. Например, если Вы хотите выйти на улицу во время дождя, то нужно надеть плащ и взять зонтик. Здесь желание выйти на улицу, несмотря на то, что идет дождь - это верное условие, а раз так, то нужно надеть плащ и взять зонтик. Чтобы передать эту мысль компьютеру, и он понял бы нас, достаточно написать:

если (есть желание выйти на улицу во время дождя){

Плащ нужно одеть;

Зонтик нужно взять;

}

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

если (мы уже вышли на улицу во время дождя){

Зонтик нужно открыть;

}

Этим способом можно передавать компьютеру логические инструкции, и он будет понимать их. Так как программа пишется на английском языке, оператор условия: если (if) - выглядит следующим образом:

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

if (светофор= = "красный"'){

Движение = 0;

}

if (светофор== "желтый "){

Движение = 0;

}

If (светофор= = "зеленый "){

Движение = 1;

} если строковая переменная светофор имеет значение - "красный" или "желтый", то переменной Движение необходимо присвоить значение О, что, кстати, эквивалентно значению false (ложь) в булевом отображении, и, если ее значение - "зеленый", то переменной Движение необходимо присвоить значение 1, что эквивалентно значению true (истина) в булевом отображении. Обратите внимание, что в круглых скобках используется оператор равенства ==, а не присваивания =!

Оператор условия можно дополнить ключевым словом else:

if(){} else {}

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

К примеру, учитывая, что у светофора могут быть только три состояния и строковая переменная светофор, в данном случае, может принимать только три строковых значения: "красный", "желтый" или "зеленый", предыдущий сценарий, состоящий из трех условных операторов if можно записать более компактно:

іф((светофор=="красньш")(светофор=="желтьій" )){

Движение = 0;

} else {

Движение = 1;

}

если значение строковой переменной светофор равно "красный" или "желтый", то переменной Движение необходимо присвоить значение О, в противном случае, ей следует присвоить значение 1. Однако этот же скрипт с помощью оператора условия

if - else можно записать и по-другому:

if (светофор- = "зеленый "){

Движение = 1;

} else {

Движение = 0;

}

Навыком компактно выражать инструкцию обладают опытные программисты, но это вовсе не означает, что написанный Вами избыточный код плох, ибо, если компьютер его понимает и выполняет, значит, достигнуто главное - сценарий работает! А со временем придет и опыт. Операторы условия if и if - else могут быть вложены друг в друга сколь угодно раз, и создавать при этом ветвящиеся конструкции. Например:

if (светофор-^ "зеленый "){

Движение = 1;

if (числоЛвтомобилейВпереди==0){

номерПередачи = 1;

}

} else {

Движение = 0;

}

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

Кроме того, в ActionScript 2.0 есть еще два условных оператора ? : и switch, но ввиду специфичности использования, здесь их рассматривать не будем.

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

ActionScript 2.0 содержит четыре способа создания циклов. Для этих целей применяются следующие конструкции: for, for...in, while и do...while.

Одним из самых универсальных и востребованных является цикл for. Синтаксис его строится следующим образом: for () {}.

В круглых скобках задаются три параметра, разделенных точкой с запятой:

  • а) - начальное значение переменной счетчика циклов,
  • б) - верное условие,
  • в) - порядок изменения значения переменной счетчика цикла.

В фигурных скобках - команды, которые необходимо при этом выполнить.

Переменную счетчика цикла принято обозначать буквой і, по первой букве английского термина increment - приращение.

Далее рассмотрим простейший цикл:

for (i=0;i<10;i++){

trace( і);

}

Результат его выполнения приведен на рис. 3.42.

Результат цикла

Рис. 3.42. Результат цикла

Видно, что компьютер добросовестно выполнил эту программу. Он перебрал все значения переменной счетчика от і=0 до і=9 с шагом ++ (+=1), пока соблюдалось логическое условие: і<10.

Циклы могут быть вложены друг в друга, но тогда при выполнении очередной операции внешнего цикла, внутренний каждый раз будет прокручиваться полностью. Циклы применяют, например, тогда, когда нужно размножить и упорядоченным образом расположить несколько одинаковых объектов: клипов, кнопок или графических изображений на рабочем поле ролика (программное заполнение рабочего поля). Увидеть их в таком случае можно будет только при тестировании готового swf файла.

Однако чаще всего циклы используют при работе с массивами.

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

Циклы for...in, while и do...while принципиально не отличаются от цикла for, к тому же используются довольно редко и потому рассматриваться здесь не будут.

Также в данном разделе рассмотрим понятие массивов. Чтобы понять, что это такое, достаточно представить себе шкаф с ячейками, или просто список ячеек, или перечень каких-либо объектов с указанием порядковых номеров их позиций, начиная с номера 0. Причем при помощи специальных команд можно оперативно редактировать этот список, можно добавлять или удалять какие-то позиции, можно заменять в позиции один объект на другой, можно в любой момент затребовать какой-либо объект, хранящийся в массиве под данным номером, можно узнавать длину всего списка и пр. В массивах удобно хранить однотипные объекты, например, копии одного клипа, обновляемые числовые данные физического процесса, вопросы и ответы тестирующей программы и т. д. Для простоты можно считать массив совокупностью (списком) переменных, хранящихся в пронумерованных областях памяти, где нумерация начинается с 0. Именно с 0, а не с 1, как можно было бы предположить, в связи с тем, что в программировании наименьшее двоичное число - это 0.

Массив обозначается ключевым словом Array, которое и служит для объявления массива, например:

новыйМассив = Аггау();

таким образом, мы объявили пустой массив с названием новыйМассив, не содержащий пока ни одного объекта данных.

При этом если элементы массива в момент его создания известны и число их не велико, то они могут быть сразу прописаны в качестве параметров внутри круглых скобок, например:

весГруза = 15;

новыйМассив = Аггау(весГруза,9,8,2005,"Это дата");

здесь в ячейке под номером 0 будет храниться значение переменной весГруза, а в следующих ячейках под номерами 1, 2, 3, 4 будут лежать соответственно числа: день - 9, месяц - 8, год - 2005 и текст - Это дата.

Узнать полностью содержание массива или только значение объектов данных, хранящихся в определенных ячейках, можно с помощью следующих обращений:

trace( новыйМассив);

или:

trace( новыйМассив[0]);

или:

trace( новьійМассив[4 ] );

где в квадратных скобках указываются номера нужных ячеек массива.

Удостовериться, что эти утверждения справедливы помогает окно Output (рис. 3.43).

  • ?fe Р ‘Й Ф V и (S Ф
  • 1 весГруза = 15;
  • 2 новыйМассив = Array(весГруза, 9, 8, 2005, "Это дата");
  • 3 trace(новыйМассив);
  • 4 trace(новыйМассив[0]);
  • 5 trace (новыйМассив[4] ) ;
Окно Output

Рис. 3.43. Окно Output

В случае, если нужно переопределить или добавить элементы массива, это можно сделать так:

новыйМассив[4] = "Это новая дата";

новыйМассив[5] = "Это еще одна дата";

новыйМассив[8] = "Это будущая дата";

Следует обратить внимание, что, создавая ячейку с номером 8, автоматически создаются пустые ячейки б и 7 с неопределенным (undefined) значением (рис. 3.44).

  • 1 весГруза - 15;
  • 2 новыйИассив = Array(весГруза, 9, 8, 2005, "Это дата");
  • 3 trace(новыйМассив);
  • 4 trace(новыйИассив[0]);
  • 5 trace(новыйМассив!4] ) ;
  • 6 новыйМассив[4] = "Это новая дата";
  • 7 новыйНассив[5] - "Это еще одна дата";
  • 8 новыйМассив[8] = "Это будущая дата";
  • 9 trace(новыйМассив);
  • 10 trace(новыйМассив[4] );
  • 11 trace(новыйМассив(5] ) ;
  • 12 trace(новыйМассив[8] ) »

Output

15,9,8,2005,Это дата 15

Это дата

15,9,8,2005,Это новая дата,Это еще одна дата,undefined,undefined, Это будущая дата

Это новая дата

Это еще одна дата

Это будущая дата

Рис. 3.44. Пустые ячейки

Вместе с тем, массив можно объявить и более простым способом, также часто применяемым на практике (рис. 3.45):

расстояние = 15;

время = 5;

скорость = расстояние/время;

второйМассив = [3, объемВоды=0, скорость];

trace( второйМассив);

расстояние = 15;

время = 5;

скорость ? расстояние/время;

второйМассив = [3, объемВоды=0, скорость]; trace(второйМассив);

  • ? Output
  • 3,0,3

Рис. 3.45. Пример

Так, здесь официального объявления массива нет, мы сразу пишем

имя массива и в квадратных скобках определяем его элементы. В данном случае именно квадратные скобки обеспечивают возможность интерпретатору (Флеш плееру) идентифицировать данный объект как массив.

При этом переменную можно объявить прямо в скобках создаваемого массива (ячейка номер 1 - переменная объемВоды).

Массивы могут быть многомерными, то есть элементом массива может быть другой массив. С двумерными массивами мы встретимся, когда будем решать задачи размещения повторяющихся изображений на плоскости не только по оси X, но и по оси Y. Для программной работы с массивами предусмотрены специальные методы языка ActionScript 2.0 и одно свойство (свойством массива является его длина). Основные методы и это свойство сведены в табл. 3.2.

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

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

Функция обозначается ключевым словом function, которое и служит для ее объявления, например, объявим функцию с именем таймер:

function таймер(){

секунды+ = 1/12;

}

Таблица 3.2

Метод

Описание

concat

Присоединяет к первому массиву два и более массивов и возвращает его как новый массив.

join

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

POP

Удаляет последний элемент массива и возвращает его значение.

push

Добавляет один или более элементов в конец массива и возвращает новую длину массива (новое число ячеек).

reverse

Полностью меняет нумерацию элементов массива на

shift

обратную (нумерацию ячеек с 0 до п на п - 0).

Удаляет первый элемент из массива и возвращает его

slice

значение.

Извлекает секцию массива и возвращает ее как новый

sort

массив без изменения первоначального массива.

Сортирует элементы массива по указанному правилу

splice

без создания копии массива.

Добавляет и(или) удаляет элементы массива без

toString

создания копии массива.

Возвращает строковое значение элементов массива, с

unshift

запятыми в качестве разделителей.

Добавляет один или более элементов в начало массива и возвращает новую длину массива (новое число ячеек).

Свойство

Описание

length

Возвращает длину массива (общее число ячеек).

Далее, если мы поместим в определенном месте сценария функцию таймер () ;, то здесь, в соответствии со скриптом, к переменной секунды будет добавлена одна двенадцатая. А если при скорости воспроизведения ролика 12 кадров за секунду, продолжать вызывать эту функцию в каждом следующем кадре, то переменная секунды начнет отсчитывать виртуальные секунды.

Также необходимо рассмотрение свойств. Свойства - это некоторые количественные и качественные (информационные) характеристики объектов, например: видимость, размеры, координаты, цвет, прозрачность, число загруженных кадров, длина массива, путь к объекту и прочее.

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

Таблица 3.3

Свойство

Описание

_alpha

Степень прозрачности клипа в процентах. При 0 % - клип полностью прозрачен.

_height _ name —rotation —Visible —Width —X

Высота клипа в пикселях.

Имя экземпляра клипа.

Угол поворота клипа в градусах.

Видимость клипа (true/f alse).

Ширина клипа в пикселях.

Расстояние от левого края рабочего поля до центра клипа в пикселях. Если клип вложенный, то расстояние от центра клипа-

_xscale

—У

владельца до центра клипа в пикселях по оси X.

Размер клипа по горизонтали в процентах.

Расстояние от верхнего края рабочего поля до центра клипа в пикселях. Если клип вложенный, то расстояние от центра клипа-

_yscale

владельца до центра клипа в пикселях по оси Y. Размер клипа по вертикали в процентах.

Также два нужных свойства, которые можно только считывать - это: _xmouse - текущая координата X указателя мыши и _ymouse - текущая координата Y указателя мыши. Кроме того, важным для нас будет свойство enabled (для кнопок) - с его помощью можно, как отключать кнопки, так и возвращать им кнопочные функции, присваивая этому свойству булевы значения false или true.

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

весГруза = 15;

новыйМассив = Array(весГруза, 9, 8, 2005, "Это дата");

новыйМассив[3] = "Это новая дата";

новыйМассив[4] = "Это еще одна дата";

новыйМассив[8] = "Это будущая дата ";

trace( новыйМассив. length);

обратившись к окну Output убеждаемся в правильном применении оператора - точки, обеспечившем доступ к свойству массива (рис. 3.46).

Применение Output

Рис. 3.46. Применение Output

Именно 9 ячеек содержит новыйМассив, в чем можно убедиться, элементарно пересчитав их в четвертой строке окна Output, изображенного на рис. 3.44. При помощи оператора - точки можно обратиться и к соответствующему методу массива (табл. 3.2).

Далее следует сказать несколько слов о понятии Метод. Методом называется функция, используемая в качестве свойства объекта. Другими словами, функция становится методом, если обращение к ней осуществляется от имени объекта, при помощи оператора - точки, например:

новыйМассив. shift();

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

2. Кроме того, важным является рассмотрение вопросов методики разработки программ. Мы познакомимся с общими вопросами создания сценариев на языке ActionScript 2.0. Несмотря на преобладающую сегодня позицию профессионалов о необходимости централизации кода программы в определенном месте ролика, мы будем использовать любые штатные приемы, позволяющие разрабатывать сценарии виртуальных лабораторных работ наиболее простым и понятным образом.

Чтобы принудительно перевести считывающейую головку Флеш плеера на определенный кадр ролика в пределах данной временной шкалы, можно воспользоваться глобальными функциями: gotoAndPlay()и gotoAndStop (), к ним также можно отнести функции stop () и play ().

Например, если нужно остановить воспроизведение ролика на каком-либо кадре, достаточно в его сценарий поместить код:

stop();

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

р1ау();

то проигрывание продолжится с того же кадра, а если применить навигационные команды с указанием номера кадра, с которого нужно продолжить воспроизведение, то это будет выглядеть как:

gotoAndPlay(5);

где 5 - номер кадра, с которого необходимо продолжить воспроизведение или:

gotoAndStop( 18);

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

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

Именно поэтому при написании скрипта необходимо внимательно следить за названием панели Actions редактора кода. Название панели должно строго соответствовать выделенному объекту в соответствии с тем, к какому типу он относится. Их может быть только три: Actions -Frame - код, помещаемый в кадр (при выделении любого ключевого кадра на временной шкале Timeline), Actions - Movie Clip - код, помещаемый в клип (при выделении клипа) или Actions - Button - код, помещаемый в кнопку (при выделении кнопки). Обратите внимание, что клип может содержать не только сценарий, помещаемый непосредственно в клип, но и скрипты, внедренные в его кадры (рис. 3.47).

Далее рассмотрим принципы адресации на примере структурной схемы (см. рис. 3.47).

Структурная схема

Рис. 3.47. Структурная схема

Чтобы клипы стали видны программной среде, следует каждой копии клипа, расположенной на рабочем столе или в другом клипе при помощи текстового поля Instance Name (Имя копии), панели Properties (Свойства) назначить уникальное имя. При этом имя библиотечного экземпляра не имеет никакого значения. Оно может потребоваться только в случае программного создания копии клипа.

Например, ключевой кадр главной временной шкалы, имеющей глобальное свойство _root, содержит три клипа с именами Клип_1, Клип_3 и Клип_4. В клип Клипі вложен клип с именем Клип_2, который в свою очередь содержит кнопку Кнопка_2, а в клип Клип_4 внедрена кнопка Кнопка_1. Предположим также, что в сценарии ключевого кадра главной временной шкалы со свойством _root объявлена глобальная переменная:

весГруза = 10;

Езнать значение данной переменной можно из любого места сценария любого объекта ролика при помощи точечного синтаксиса:

_root.весГруза;

При помощи оператора - точки можно входить в любые объекты ролика по цепочке и далее переходить к их свойствам, что позволяет из сценария любого объекта обратиться к любому другому объекту и далее к его свойству. Например, чтобы, нажимая кнопку Кнопка_1, можно было бы сделать клип Клип_2 прозрачным, то есть изменить свойство прозрачности _alpha клипа Клип_2, присвоив ему значение 0. в сценарии кнопки Кнопка_1 нужно написать:

on (press) {

_ro ot. Клип_1. Клип._2._alpha = 0;

}

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

В том случае, если действие относится к тому же объекту, внутри которого оно расположено, то можно использовать упрощенное обращение this (можно перевести, как здесь), например, изменить собственную координату, сдвинув клип влево на 60 пикселей, из сценария ключевого кадра временной шкалы клипа Клип_2 можно так:

this._x -= 60;

При этом из сценария вложенного клипа можно обратиться к клипу, в который непосредственно включен данный клип при помощи свойства _parent (что переводится, как родительский), например, изменить координату _х клипа Клип_1 (опустить вниз на 20 пикселей) из сценария ключевого кадра клипа Клип_2 можно так:

_рагепї.Клип_1+= 20;

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

Если управлять свойствами вложенного клипа из сценария клипа-хозяина, то можно обращаться к вложенному клипу напрямую, например, в сценарий ключевого кадра временной шкалы клипа Клип_1 можно поместить команду увеличения масштаба клипа Клип_2 по оси х вдвое:

Ktiun_2._xscale = 200;

Также, из сценария ключевого кадра основной временной шкалы можно напрямую или по цепочке обращаться к любому объекту ролика, например, можно повернуть клип Клип_2 на 60 градусов по часовой стрелке, для чего достаточно в сценарий ключевого кадра основной временной шкалы вписать следующий код:

Клип! .Knun_2._rotation += 60;

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

Функция on () {} используется для обработки кнопочных

событий и предназначается для размещения, как в сценариях кнопок, так и в сценариях клипов.

Функция onClipEvent () {} применяется для обработки

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

В круглых скобках функции on () {} располагают обработчик, реагирующий на определенное кнопочное событие, табл. 3.4, а в фигурных скобках - код, который необходимо при этом выполнить, например, при отпускании кнопки содержащей следующий код, клип Клип_1 (см. рис. 3.47), станет невидимым:

on (release, releaseOutside, keyPress "") {

_root.Kjiun_l ._alpha = 0;

}

D круглые скобки можно вносить одновременно несколько обработчиков, разделяя их запятыми, поэтому клип Клип_1 станет невидимым даже в том случае, если кнопка будет отпущена за пределами ее реагирования или при нажатии клавиши Enter кейборда.

Таблица 3.4 содержит основные обработчики кнопочных событий.

Таблица 3.4

Кнопки

Событие

press

release

releaseOutside

rollover rollout dragOver

dragOut

keyPress "" keyPress "" keyPress "" keyPress "" keyPress "" keyPress "" keyPress

"" keyPress "" keyPress "" keyPress "" keyPress "" keyPress

"" keyPress "" keyPress "" keyPress ""

Момент нажатия кнопки, если курсор находится над кнопкой.

Момент отпускания кнопки, если курсор находится над кнопкой.

Момент отпускания кнопки, если курсор находится вне кнопки.

Курсор перемещается над кнопкой.

Курсор выходит за область кнопки.

Кнопка нажата, когда курсор был над кнопкой, затем курсор перемещен за пределы кнопки и возвращен обратно.

Кнопка нажата, когда курсор был над кнопкой, затем курсор перемещен за пределы кнопки.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

Указанная клавиша нажата.

В круглых скобках функции onClipEvent () {} располагают обработчик, реагирующий на событие из табл. 3.5, но не обязательно связанное с данным клипом, а в фигурных - код, который при этом необходимо выполнить. Если в каком-нибудь клипе поместить следующий код, то при тестировании можно будет увидеть, как этот клип медленно перемещается вправо, ибо при воспроизведении каждого следующего кадра enterFrame данного клипа, его координата _х увеличивается на единицу:

onClipEvent (enterFrame) { this._x++;

}

Аналогичного эффекта можно добиться, применяя в клипе кнопочный обработчик on :

on (press) {

this._x+=10;

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

Таблица 3.5 показывает основные обработчики событий для клипов.

Таблица 3.5

Обработчики для клипов

Событие

load unload enterFrame mouseDown mouseMove mouseUp

Появление клипа на временной шкале.

Удаление клипа с временной шкалы.

Проигрывание нового кадра.

Нажата левая кнопка мыши.

Перемещение указателя мыши.

Нажата и отпущена левая кнопка мыши.

Нажата клавиша кейборда.

keyDown keyUp data

Нажата и отпущена клавиша кейборда. Загружена последняя переменная.

Чтобы обработчики событий могли работать в сценариях, помещаемых в кадры, применяется запись вызывающая специальную функцию function () {}. К обработчику (см. табл.3.4 и 3.5)

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

Кнопка_2.onPress = function () { _root.Knun_4._alpha = 0;

} или:

_root.onEnterFrame = function () {

Клип_1 .Клип_2._х++;

}

Как видно из структурной схемы (рис. 3.47), в первом случае, из кода размещенного в ключевом кадре главной временной шкалы вызывается функция function () {_root. Клип_4 ._alpha = 0следящая за событием onPress кнопки Кнопка_2 и, как только оно произойдет, то есть кнопка Кнопка_2 будет нажата, клип Клип_4 станет прозрачным. Во втором случае, из кода размещенного в ключевом кадре главной временной шкалы при каждом воспроизведении кадра (обработчик события onEnterFrame) вызывается соответствующая функция function () { Клип_1. Клип_2 ._х++; } и потому при

тестировании сможем увидеть, как клип Клип_2, находящийся внутри клипа Клип_1, с каждым кадром будет перемещаться слева направо на один пиксель.

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

_root. onEnterFrame = function () {

Клип_1 .Клип_2._х++;

таймері )>'

}

При тестировании ролика теперь клип Клип_2 будет перемещаться слева направо и одновременно при каждом следующем воспроизведении кадра будет вызываться функция таймер (), в результате к переменной секунды будет добавляться 1/12. Убедиться в этом может помочь уже известная нам функция trace (), которую также можно вызвать в нужном месте:

_root. onEnterFrame = function () {

Клип_1.Клип_2._х++;

таймері )>'

Ігасе(секундьі);

}

Рассмотрим вопрос программного создания копии клипа. Все клипы хранятся в библиотеке ролика. Оттуда их можно легко переносить из одного проекта в другой, а также тиражировать внутри проекта при помощи специальной функции attachMovie (). При этом важно не забывать, что, если предполагается тиражировать клип при помощи сценария, то при создании клипа, на панели Convert to Simbol необходимо поставить галочку в пункте Export for ActionScript, меню Linkage.

Чтобы программно создать копию такого клипа, функцию attachMovie () располагают в нужном месте сценария, например, в ключевом кадре главной временной шкалы. Между круглыми скобками функции, помещают имя клипа в библиотеке, затем через запятую новое имя создаваемой копии, и далее через запятую назначают номер виртуального слоя кадра, на котором будет располагаться данная копия. Имена нужно заключать в кавычки - это строковые данные. Например, если в библиотеке имеется клип с именем Таймер, то его копию можно поместить на рабочее поле так:

attachMovie ( "Таймер ", "Таймер ",0);

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

Таймер._х - 100;

Таймер._у = 250;

Далее рассмотрим пример создания большого количества копий одного клипа, расположив их на рабочем поле в линию, друг за другом. Для этого создайте в библиотеке клип с именем квадрат, состоящий из квадрата размером 20x20 пикселей. Затем в ключевой кадр главной временной шкалы поместите код следующего цикла:

for (i=0; i<20; i++) {

attachMovie("Keadpam", "квадрат"+і, і);

this[ "квадрат"+і]._х = 100+і*20;

this [ "квадрат"+і]._у = 200;

}

и протестируйте ролик. У Вас должно получиться изображение 20-ти квадратов выстроившихся в ряд (рис 3.48). Попробуйте поменять цифры в цикле, и Вы быстро поймете их роль в данном сценарии. Здесь в первый раз использовалась новая запись имен копий клипов -this ["квадрат"4-і]. Такая запись применяется в случае, если имя клипа или переменной составлено с помощью конкатенации строк и не может быть заключено в кавычки, поэтому строковое имя заключается в квадратные скобки и предваряется ключевым словом this или _root. А на самом деле каждая копия клипа имеет имя типа: квадратО, квадраті, квадрат2 и так далее до квадраті9. И по отдельности к ним можно обращаться под этими именами, например, для индивидуального изменения их свойств. При этом они занимают виртуальные слои і, соответственно с номера 0 по 19.

Кроме того, удалить такие клипы можно при помощи специальной функции removeMovieClip (). Функция применяется в форме метода, то есть с помощью оператора точки, например, удалить клип под номером 19 можно так:

Keadpaml9.removeMovieClip();

Пример

Рис. 3.48. Пример

К свойству клипа можно обратиться при помощи оператора-точки и далее присвоить свойству нужную величину. Код, изменяющий свойство клипа, может быть расположен в любом месте сценария - в кнопке, в функции, в ключевом кадре, в самом клипе, в другом клипе и пр. Основные свойства клипов перечислены в табл. 3.3. Рассмотрим примеры изменения (путем присваивания определенного значения) свойств клипов, имеющих имена от квадратО до квадратЭ (см. рис. 3.48):

1. С помощью свойства _alpha устанавливается прозрачность клипа, она может изменяться в пределах от 0 до 100 процентов. При 0 клип полностью прозрачен. Точность присваивания этого свойства невысока, она имеет погрешность, достигающую величины до 0.4 процента. Для изменения свойства _alpha клипа квадратО необходимо присвоить ему значение, например, 30 процентов видимости:

квадратО._alpha = 30;

однако, запрашивая значение свойства _alpha через функцию trace (), мы получим реальную величину 29.6875 процента, то есть на 0.3125 процента меньше (см. рис. 3.49).

2. Высота клипа определяется свойством _height, она может пропорционально изменяться относительно начала координат (имеется ввиду сохранение исходных пропорций относительно оси X клипа) в любых пределах, начиная от 0 пикселей и выше. Точность присваивания связана с точностью позиционирования клипа на рабочем столе. И так как точность позиционирования клипа на рабочем столе не превышает 0.1 пикселя, то и точность свойства _height не превышает 0.1 пикселя, ибо производится элементарное округление ее величины. При увеличении значения не более чем на 0.05, значение свойства _height остается прежним. Для примера изменим свойство _height (высота) клипа квадраті, присвоив ему значение 41.150 пикселей:

квадраті ._height = 41.150;

однако при вызове свойства _height, через функцию trace (), это значение будет округлено до величины 41.1 пикселей (см. рис. 3.49).

3. При помощи свойства _name можно оперативно изменить имя клипа. Трудно предположить, в каких случаях это может пригодиться, но такая возможность существует. Например, клип с именем квадрат2 можно переименовать в клип с именем квадраті5. При этом старый клип с именем квадраті5 не исчезнет, но будет недоступен для какого-либо редактирования его свойств, ибо останется вообще без имени. Доказательством могут послужить манипуляции с клипом под новым именем квадраті5 (см. рис. 3.49). Для присваивания нового имени следует его заключить в кавычки:

квадрат2._пате = "квадрат! 5";

4. Кроме того, клип можно повернуть относительно своего центра координат, как по часовой стрелке, так и против. Чтобы повернуть клип против часовой стрелки, необходимо присвоить свойству _rotation значение со знаком минус. Значение этого свойства сохраняется в памяти компьютера с большим числом знаков после запятой (до 15) и потому может использоваться для точного моделирования физического процесса (сохраняя точное значение угла поворота). Например, клип квадратЗ можно повернуть против часовой стрелки на угол 30.123456789 градусов (см. рис. 3.49):

квадратЗ.-rotation = -30.123456789;

  • (контроль значения с помощью функции trace ()).
  • 5. Также клип можно сделать полностью невидимым не только при помощи свойства _alpha, но и при помощи свойства _visible. Например, присваивание этому свойству логического значения false делает клип квадрат4 невидимым (см. рис. 3.49), однако присваивание значения true поможет вернуть видимость обратно:

квадрат4. _visible = false;

6. Свойство _width, определяет ширину клипа, оно действует так же пропорционально, как свойство _height, но теперь относительно оси Y, и может изменяться в любых пределах, начиная от 0 пикселей и более. Точность присваивания также связана с точностью позиционирования клипа на рабочем столе. И так как точность позиционирования не превышает 0.1 пикселя, то и точность свойства _width не превышает 0.1 пикселя. При величине равной или превышающей значение 0.05 к значению свойства _width добавляется 0.1 пикселя. Для примера присвоим свойству _width клипа квадрат5 значение 41.151 пикселей:

квадрат5. _width = 41.151;

и убедимся, что при вызове свойства _width, через функцию trace (), это значение будет округлено до величины 41.2 пикселей (см. рис. 3.49).

7. За позиционирование центра координат внедряемого клипа относительно центра координат рабочего стола или центра координат родительского клипа по оси X отвечает свойство _х. Точность присваивания равна точности позиционирования и равна 0.1 пикселя. Например координату X клипа квадрат б можно переопределить выражением:

квадрат6._х = 520;

теперь, наблюдая рис. 3.49, убеждаемся, что 7-й слева клип на экране плеера (рис. 3.48) сместился далеко вправо.

8. Также, кроме возможности задавать значение ширины клипа в абсолютных величинах (пикселях), существует возможность определения ширины клипа в относительных величинах (в процентах к начальному размеру). Ширина клипа в процентах устанавливается с помощью свойства _xscale (масштаб по оси X). Размер изменяется относительно начала координат пропорционально (имеется ввиду сохранение исходных пропорций относительно оси Y клипа) в любых пределах от 0 процентов и выше. Более того, точность задания и контроля свойства может достигать 15 знаков после запятой. Например, можно увеличить ширину клипа квадрат7 на 150.123456789 процентов при помощи следующего кода:

квадрат?._xscale = 150.123456789;

далее, в окне Output (рис. 3.49) убеждаемся, что функция trace () возвращает точно такое же значение данного свойства.

9. За позиционирование центра координат внедряемого клипа относительно центра координат рабочего стола или центра координат родительского клипа по оси Y отвечает свойство у. Например, переместить клип квадрат8 на 150.123456789 пикселей вниз можно при помощи скрипта:

квадрат8._у = 150.123456789;

но из-за невозможности позиционировать клип на рабочем поле с точностью более 0.1 пикселей, это значение будет округлено до величины 150.1 пикселей (контроль значения с помощью функции trace ()) - см. рис. 3.49.

10. Также существует возможность определения высоты клипа в относительных величинах (в процентах к начальному размеру). Высота клипа в процентах устанавливается с помощью свойства _yscale (масштаб по оси Y). Она изменяется относительно начала координат пропорционально (имеется ввиду сохранение исходных пропорций относительно оси X клипа) в любых пределах от 0 процентов и выше. Точность задания и контроля свойства может достигать 15 знаков после запятой. Например, увеличение высоты клипа квадратЭ на 150 процентов от исходного размера записывается так:

квадрат9._у, scale = 150;

Пример

Рис. 3.49. Пример

Наконец, проверим, какой квадрат откликнется на имя квадраті5, старый или бывший квадрат2, для чего изменим его свойство у (см. рис. 3.49):

квадрат! 5. _у = 300;

Рисунок 3.49 показывает, что опустился вниз по оси Y только бывший квадрат2, а бывший квадраті5 остался на столе в том же самом месте и его свойства нам теперь не изменить. По результатам тестирования свойств клипов при помощи панели Output можно сделать очень важный вывод. Для достижения максимальной точности моделирования физического процесса следует в первую очередь применять свойство поворота - _rotation, в градусах или свойства изменения масштаба по оси х - _xscale и по оси у - _yscale, в процентах, ибо именно они дают возможность отслеживать соответствующие изменения значений с точностью до 15 знака после запятой.

Кроме того, отметим, что любой клип можно сделать перемещаемым при помощи мыши. Создадим клип с изображением круга, например, диаметром 70 пикселей и расположим его с помощью панели Align в центре рабочего стола, с координатами: X = 275, Y = 200. Теперь выделим его и в панель редактора кода Actions - Movie Clip поместим следующий кнопочный сценарий:

on (press) {

startDrag("");

}

on (release, releaseOutside) {

stopDrag();

}

Нажатием левой кнопки мыши в области клипа (press) будет выполняться команда startDrag, привязывающая клип к курсору, которая и заставит клип перемещаться вслед за ним. При отпускании кнопки в области клипа (release) или за его пределами (releaseOutside) перемещение клипа будет остановлено командой stopDrag.

В случае, если при этом нужно ограничить область перемещения клипа, то в фигурных скобках функции перемещения startDrag (" " ), через запятые нужно добавить логическую переменную для определения точки привязки курсора к площади клипа, в данном случае false, и объявить ключевые переменные left, top, right, bottom, чтобы можно было с их помощью задать область перемещения клипа. Область перемещения, в данном случае, определяется значениями координат X и Y, присваиваемыми ключевым переменным после загрузки клипа, например, с помощью обработчика onClipEvent:

onClipEvent (load) {

left = _x;

top = _y-100;

right = _x;

bottom = _y+100;

}

on (press) {

startDragC", false, left, top, right, bottom);

}

on (release, releaseOutside) {

stopDrag();

}

Рисунок 3.50 обозначает, что необходимые обработчики on, onClipEvent и функции startDragO и stopDragO имеются в папке Movie Clip Control, папки Global Functions, расположенных на поле вспомогательной панели редактора кода. Грамотно вставить эти функции в сценарий можно простым перетаскиванием их на текстовое поле редактора.

Теперь при тестировании, созданный предварительно клип с изображением круга, может быть перемещен при помощи левой кнопки мыши вверх или вниз на 100 пикселей (рис. 3.50).

Пример

Рис. 3.50. Пример

Пересечение двух клипов фиксируется при помощи специальной функции hitTest(). Для демонстрации процесса пересечения двух клипов, добавим к клипу на рис. 2.50 еще один клип с изображением горизонтальной линии и расположим его ниже клипа с изображением круга, например, с координатой У = 270. В поле Instance Name панели Properties внесем имя клипа линия и, выделив предварительно клип с изображением круга, добавим в редактор его кода Actions - Movie Clip следующий скрипт:

onClipEvent (enterFrame) {

if (hitTest(_root.линия)) {

stopDrag( );

}

}

здесь в функцию - обработчик onClipEvent добавлен оператор условия if, в котором проверяется условие пересечения данного клипа с клипом линия, расположенным на главной временной шкале _root. Как только данное условие станет верным, выполнится функция stopDragO -рис. 3.51.

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

Пример

Рис. 3.51. Пример

Вместе с тем, это не единственный способ написания кода. Данный сценарий написан, как бы глядя на ситуацию пересечения двух клипов, изнутри одного из них и потому код сценария расположен внутри него. Но можно взглянуть на ситуацию пересечения со стороны главной временной шкалы. Тогда клипу с изображением круга в поле Instance Name панели Properties нужно присвоить имя клипа, например, круг. Сценарий, расположенный в кадре главной временной шкалы редактора кода Actions - Frame (для чего необходимо предварительно выделить кадр), будет выглядеть так:

onEnterFrame = function () {

if (круг. hitTestfnuHun)) {

Kpvz.stopDrag( );

}

};

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

Пример

Рис. 3.52. Пример

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

left = круг._х;

top = круг._y-100;

right = круг._х;

bottom = круг._у+100;

круг-onPress = function!) {

Kpys.startDragifalse, left, top, right, bottom);

};

Kpye.onRelease = function!) { stopDrag!);

};

Kpye.onReleaseOutside = function!) { stopDrag!);

};

onEnterFrame = function () {

if (круг. hitTest^uHun)) {

круг.stopDrag!);

}

};

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

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

Рис. 3.53

Также рассмотрим использование математических функций, к которым можно обратиться как к методам, при помощи специального объекта Math и оператора - точки, а свойствами этого объекта являются некоторые математические константы. Основные методы (функции) и свойства объекта Math сведены в табл. 3.6.

Таблица 3.6

Метод (функция)

Описание

abs () acos() asin() atan() atan2(x,y)

ceil() cos () exp() floor() log() max(a,b) min(a,b) pow (a, x) random()

round() sin () sqrt () tan ()

Вычисляет абсолютное значение числа (модуль) Вычисляет арккосинус в радианах

Вычисляет арксинус в радианах

Вычисляет арктангенс в радианах

Вычисляет арктангенс угла от оси X до точки с координатами х и у

Округляет число до большего целого Вычисляет косинус

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

Возвращает псевдослучайное число между 0,0 и 1,0

Округляет до ближайшего целого числа Вычисляет синус

Вычисляет квадратный корень Вычисляет тангенс

Свойство (константа)

Описание

E LN2 LOG2E LN10 LOG10E PI SQRT1_2

SQRT 2

Основание натурального логарифма ( ~ 2,718) Натуральный логарифм от 2 ( ~ 0,693) Логарифм Е по основанию 2 (~ 1.442) Натуральный логарифм 10 (~ 2,302) Логарифм Е по основанию 10 (~ 0.434) Число я (~ 3,14159)

Обратная величина квадратного корня из 1/2 (~ 0,707)

Квадратный корень из 2 ( ~ 1,414)

Так, переменная, принимающая случайное целое значение в диапазоне от 0 до 15 объявляется так:

случайное Число = Math. round(Math. random( )*15 );

функция round (), понадобилась для округления генерируемых чисел.

Чтобы проверить этот код, создадим копию клипа, который будет выполнять функцию кнопки, с именем кнопка на рабочем столе, и при каждом ее нажатии пусть выполняется функция случай (), генерирующая случайное целое число в диапазоне от 0 до 15:

function случай!) {

случайноеЧисло = Math. round(Math. random!) *15);

trace! случайноеЧисло);

}

кнопка, on Press = function!) {

случай!),'

};

Рисунок 3.54 в окне Output приводит числа формируемые функцией случай () при нажатии клипа - кнопки кнопка.

Пример

Рис. 3.54. Пример

Важным вопросом также является вопрос динамической индикации переменных. Как-то странно, нажимая клип (кнопку) в предыдущем примере наблюдать результат в окне Output. Давайте создадим динамическое текстовое поле для индикации переменной случайноеЧисло в ролике с клипом (кнопкой кнопка) предыдущего примера. Для этого сначала сориентируем сам клип (кнопку) на рабочем столе и поместим его центр в точку с координатами X = 275.0 и Y = 250.0 пикселей.

После этого создадим текстовое поле над клипом (кнопкой), поместим центр текстового поля в точку с координатами X = 275.0 и Y =

120.0 пикселей, откроем панель Properties и выберем пункт Dynamic Text, размер шрифта выберем покрупнее, например, 30 пунктов, гарнитуру Courier (Курьер), стиль (В) Bold (Жирный), ну и цвет, соответственно, черный. Выберем форматирование текста по центру и в строке Var (Переменная) введем имя для связывания ее значения с текстовым полем, например, окно. В сценарии предыдущего примера, в функцию случай (), после определения значения случайного числа, добавим строчку окно = случайное число;:

function случай!) {

случайноеЧисло = Math. round(Math. random!) *15);

окно = случайное число;

trace!случайное Число);

}

KHonKa.onPress - function!) { случай! );

};

Далее при тестировании или в опубликованном ролике swf, при каждом нажатии на клип - кнопку, можно увидеть в динамическом текстовом поле новое случайное число, например, 14 - см. рис. 3.55.

Пример

Рис. 3.55. Пример

Чтобы реализовать процесс ввода данных со стороны пользователя необходимо создать, как минимум, поле для ввода и кнопку, с помощью которой можно будет сигнализировать о завершении процесса ввода и о готовности считывания данных с присвоением их значения какой-либо переменной или свойству. Создадим круглую кнопку кирпичного цвета, диаметром 50 пикселей и поместим ее на рабочем столе в точку с координатами X = 275.0 и Y = 250.0 пикселей. Выделим кнопку и откроем панель Properties, в поле Instance Name поместим имя копии кнопки, например, кнопка.

В целях повышения выразительности создадим цветной фон на рабочем столе в виде прямоугольника с размерами 545 х 395 пикселей и покрасим его в зелено-голубой цвет (см. рис. 3.56).

Повышение выразительности

Рис. 3.56. Повышение выразительности

После этого создадим текстовое поле над кнопкой, поместим центр текстового поля в точку с координатами X = 275.0 и Y = 120.0 пикселей, откроем панель Properties и выберем пункт Input Text, размер шрифта выберем 30 пунктов, гарнитуру Courier, стиль (В) Bold, цвет черный. Выберем форматирование текста по центру, нажмем кнопку Show border around text (Показывать рамку вокруг текста) и в строке Var введем имя для связывания ее значения с текстовым полем, например, ввод. Выделим кнопку, раскроем панель Actions - Button и наберем в ней следующий код:

on(press) { кнопка._х = ввод;

};

Данный код присваивает значение вводимой величины свойству _х кнопки, при ее нажатии. Теперь опубликуем проект при помощи команды Publish выпадающего меню File и запустим получившийся ролик. Набирая цифровое значение в поле ввода и нажимая затем кнопку, мы обнаружим, что она меняет свое положение по оси X в соответствии с вводимым цифровым значением (рис. 3.56).

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ   След >