Прошлая статья была посвящена анимации. Мы создавали анимацию на основе motion tweening, shape tweening и просто составляли движение из отдельных кадров. Думаю, пора перейти к более сложной теме, рассмотрению инструмента, который создает основу для большинства качественных Flash-фильмов (Flash movies).
Этот инструмент - ActionScript - событийно-управляемый язык, встроенный во Flash. Последняя версия ActionScript, (которая присутствует во Flash 5), существенно отличается от ActionScript, который был в 4-м Flash. Если в прошлой версии, это был ограниченный набор команд, позволяющий осуществлять лишь основные действия, и вводимый с помощью не очень удобного интерфейса, то новый ActionScript - это мощный язык, с увеличенным набором команд, поддержкой классов, наследования (!), и гораздо более удобным интерфейсом.
ActionScript делает ваши страницы интерактивными. Вы можете реагировать на события с мышки или с клавиатуры, можете выполнить какие-либо действия при проигрывании определенного кадра.
Для того, чтобы овладеть ActionScript в полной мере, желательно уже иметь опыт программирования (предпочтительно на С++, JavaScript, etc.). Однако, одним из достоинств языка Flash, является то, что вам не нужно быть профессионалом во Flash, или полностью знать ActionScript, чтобы писать на нем качественный код. Вы можете использовать те возможности языка, которые сочтете необходимыми для своей работы.
Так как эта статья посвящена основам языка, в ней мы рассмотрим:
- Панель действий (Actions panel), на которой происходит практически все общение с ActionScript.
- Кнопки - как их заставлять работать, как нам требуется.
- Пути - как обращаться к нужным объектам?
- Основные действия с Flash-мультиками (movie clips) - мы будем управлять процессом проигрывания фильма, как нам будет угодно.
- Отладку в ActionScript - окошки Output и Debugger.
Цель этой статьи, дать вам почувствовать ActionScript, показать, что этот язык может служить, как для создания весьма внушительных программ, так и для выполнения элементарных действий, которые сделают вашу страницу гораздо привлекательней.
Термины
Прежде чем мы перейдем к конкретным действиям, несколько терминов из области ActionScript:
- Действия (Actions) - это инструкции, которые говорят Flash-мультику что делать. От них произошло название языка - ActionScript (дословно - сценарий действий). Давайте договоримся, что в рамках этой статьи, мы будем использовать термин "инструкция", дабы не путаться с настоящими действиями, которые будем производить.
- События (Events) - это действия, которые происходят, когда проигрывается мультик. События, например, могут происходить, когда заканчивается загрузка какого-то кадра, когда мы достигаем какого-то кадра, когда пользователь нажимает клавишу на клавиатуре или курсор мышки оказывается над нашим объектом.
- Выражения (Expressions) - это любая часть инструкции, которая порождает значение. Следующие примеры являются выражениями: 2 + 2, 2 * 2, a + b, 2*pi*r, (15 + k) * random(10) .
- Функции (Functions) - это блок кода, который можно многократно использовать. Функции можно передавать значения и получать от нее возвращаемый результат. Например, number = get_color(15, 24) . 15 и 24 являются аргументами (или параметрами) функции get_color, возвращаемое значение которой записывается в переменную number.
- Классы (Classes) - это типы объектов. Например, класс дерева - растение. Во Flash есть некоторое количество предопределенных классов (очень похожих на классы JavaScript). Вы можете создавать свои классы, или модифицировать существующие.
- Экземпляры (Instances) - это буквально экземпляры определенных классов. Например, экземпляром растения могут являться дерево, куст или цветок. Экземпляр - это уже конкретный реальный объект. Если класс - это определение объекта (экземпляра), то экземпляр - это уже конкретное воплощение, это класс в действии. Каждому экземпляру можно присвоить имя, чтобы через него обращаться к функциям или переменным объекта.
- Обработчики (Handlers) - это специальные инструкции, которые обрабатывают события. Например onClipEvent - обработчик действий, связанных с конкретным символом (см. ).
- Операторы (Operators) - это элементы языка, которые вычисляют значения, исходя из одного или более аргументов. Например, оператор сложения (+) возвращает сумму двух значений, стоящих слева и справа от него.
- Переменные (Variables) - это идентификаторы, которые могут хранить значения. Например, a = 5; или name = "Michael".
Эти термины мы будем использовать при обсуждении ActionScript. Итак…
Панель действий (Actions Panel)
Панель действий служит для отображения и ввода ActionScript программ (рис. 1). Существует два режима работы с панелью - нормальный (для "чайников") и экспертный. В экспертном режиме список команд - это простое поле для ввода текста. В нормальном же режиме, мы не можем напрямую редактировать команды. Для этого используется панель параметров.
Добавить инструкцию можно, нажав на кнопку "+" (см. рис. 1) или выбрав соответствующую инструкцию в списке элементов языка. Кроме того, для всех действий во Flash имеются последовательности клавиш, с помощью которых это можно сделать гораздо быстрее. Они приведены справа от каждого действия в меню кнопки "+". Например, чтобы добавить функцию stop() , нужно нажать Esc+st (последовательно: Esc, затем "s", затем "t").
Удалить инструкцию можно, выбрав ее, и нажав кнопку "-" (или просто клавишу Delete).
Я рекомендую вам не начинать сразу же пользоваться экспертным режимом, если у вас нету опыта программирования на Java-подобных языках (С++, Java, JavaScript). У нормального режима есть большое достоинство, делающее его незаменимым для новичков - в нем есть гораздо меньше шансов ошибиться с синтаксисом языка. Новичкам это поможет быстрее понять тонкости ActionScript.
Рис. 1 - Панель действий
В панели действий отображаются действия объекта, либо кадра, выбранного в данный момент.
Кнопки
Первое, что хочется, когда начинаешь изучать интерактивность Flash - сделать что-нибудь, что бы откликалось на действия пользователя, "оживить" ваше творение, добавить обратную связь. Самый простой способ сделать это - кнопки. Поэтому с них-то мы и начнем.
Как вы знаете, во Flash существует специальный тип символа для создания кнопок - Button (см. ). Будем считать, что вы уже научились создавать кнопки, теперь научимся отслеживать нажатия на эти кнопки.
Кнопки в Macromedia Flash обладают обширным списком событий, на которые мы можем реагировать:
- press - клавиша мышки нажата, когда курсор находится в пределах кнопки;
- release - клавиша мышки отжата, когда курсор находится в пределах кнопки;
- releaseOutside - клавиша мышки отжата, когда курсор находится вне пределов кнопки;
- rollOver - курсор мыши входит в пределы кнопки;
- rollOut - курсор выходит за пределы кнопки;
- dragOver - курсор входит в пределы кнопки, при этом была нажата кнопка, и нажата клавиша мыши;
- dragOut - курсор выходит за пределы кнопки, при этом была нажата кнопка, и нажата клавиша мыши;
- keyPress ("клавиша") - была нажата "клавиша". Список клавиш можно посмотреть в справке по Flash (объект Key), или использовать панель параметров для вводу нужной клавиши.
К сожалению, Flash "понимает" только левую клавишу мыши. Правая используется для вызова контекстного меню (щелкните правой клавишей на каком-нибудь Flash мультике). Способов отлавливать во Flash среднюю клавишу или "колесико" (mouse wheel), я пока не встречал, думаю, что их не существует.
Перехватываются эти события с помощью директивы on() . Синтаксис ее таков:
On (событие) { ... // Наши действия }
Ниже вы можете сами попробовать вызвать некоторые события:
Очень часто используемый пример - переход по ссылке при нажатии на кнопку:
On (release) { getURL("http://rubs.boom.ru"); }
Чтобы проверить этот сценарий, выделите вашу кнопку, нажмите Ctrl+Alt+A и введите программу.
Вот так просто можно перехватить все события, связанные с кнопкой. Ну а как их использовать - это дело исключительно вашего воображения.
Основные действия с Movie Clips
Огромная доля творчества во Flash приходится на манипуляцию символами. Практически все базовые приемы, все трюки и эффекты невыполнимы без этих действий.
С помощью сценариев на ActionScript вы можете выполнять практически любые действия над символами. Надо только помнить, что выполнить эти действия можно только либо в ответ на действие пользователя, либо при наступлении какого-то кадра на временной шкале.
Итак, что же у нас есть? Я перечислю только основные (на мой взгляд) инструменты. Остальное вы найдете в списке элементов языка или в помощи.
Функции клипов (movie clip), которые можно вызывать:
- play() - начинает или возобновляет воспроизведение клипа;
- stop() - останавливает воспроизведение клипа;
- gotoAndPlay() - переходит на определенный кадр (сцену) и продолжает воспроизведение;
- gotoAndStop() - переходит на определенный кадр (сцену) и останавливает воспроизведение.
Свойства (параметры) клипов, которые можно считывать/изменять:
- _x, _y - координаты клипа (в пикселях);
- _xscale, _yscale - масштаб клипа (в процентах), соответственно по горизонтали и по вертикали;
- _width, _height - ширина и высота клипа (в пикселях);
- _rotation - угол поворота клипа (в градусах);
- _alpha - прозрачность клипа (в процентах);
- _visible - видимость.
Это далеко не все, что можно делать с клипами. Используйте другие параметры, экспериментируйте, творите!
Имена
Для того, чтобы обращаться к клипам, нам потребуется разобраться с понятием имени объекта (instance name) и пути до объекта (target path). Договоримся, что клип (movie clip) и объект для нас - одинаковые вещи.
Имя объекта - это имя конкретного экземпляра символа. Скажем у нас может быть символ - машинка, а экземпляры этого символа будут называться "Машинка1", "Машинка2", "Pickup", "Запорожец"…
Для того чтобы дать имя объекту нужно выделить объект, и в панели Instance (Window->Panels->Instance, Ctrl+I) в графе Name ввести имя объекта (рис. 2). Имена могут состоять только из букв, цифр и символа подчеркивания ("_"), причем имя не может начинаться с цифры.
Рис. 2 - Панель Instance
Пути
Путь до объекта - это запись имени объекта с учетом иерархии. Попытаюсь объяснить, что это такое.
Вы знаете, что во Flash объекты можно "вкладывать" друг в друга, составляя, таким образом, иерархию. Так вот, эта вложенность обеспечивает не только удобство в обращении с объектами, она еще и ограничивает видимость имен объектов. Видимость ограничивается своим уровнем. Объект может напрямую (по имени) обращаться только к объектам, входящим в него, стоящим на 1 уровень ниже в иерархии.
Для того чтобы обратиться к объекту другого уровня, нужно знать путь до него. Причем путь может указываться как абсолютно (с самого верхнего уровня иерархии), так и относительно (с текущего уровня).
Путь включает в себя объекты, через которые нужно "пройти" по дереву иерархии, чтобы добраться до нужного нам объекта, перечисленные через точку. Кроме того, существует несколько указателей (можно их назвать "виртуальными объектами"), которые часто очень полезны:
this - указатель на "самого себя" (т.е на текущий объект). Бывает нужен, например, когда нужно передать в функцию указатель на объект, из которого эта функция вызывается.
_parent - указатель на "родителя". Указывает на объект стоящий уровнем выше в иерархии.
_root - "корень". Это начало иерархии. Без него не обойтись при указании абсолютного пути.
Путь выглядит так:
leaf.play(); - у подобъекта leaf (лист) вызывается функция play();
_parent.tree.leaf.stop(); - подразумевается, что на одном уровне имеется объект tree, у которого есть объект leaf , у которого и вызывается функция stop();
_root.banner._visible = false; - сделать клип banner , находящийся на 1-м уровне, невидимым.
Рис. 3 - Иерархия клипов
Для иллюстрации возьмем иерархию из 5-ти объектов (рис. 3). Объекты 1-4 находятся на 1-м слое, объект 5 - на 2-м слое. Объект 2 вложен в объект 1, а объект 3 вложен в объект 2. Объекты на рисунке визуально вложены друг в друга, но это ни в коем случае не означает, что так должно быть и "в жизни". Здесь они так сгруппированы для наглядности. Так как имя объекта не может начинаться с цифры, пусть объекты у нас называются obj1-obj5 .
Теперь займемся путями. Для начала посмотрим, какие объекты могут обращаться друг к другу по имени. obj1 может обращаться к obj2, а obj2 - к obj3 , но при этом obj1 не может обратиться к obj3 напрямую, т.к. тот содержится не в obj1 , а в obj2 .
Скажем первому объекту нужно, чтобы объект 3 начал заново воспроизводиться с 1-го кадра. Вот как это делается:
Obj2.obj3.gotoAndPlay(1);
Чтобы 4-му объекту сделать 1-й объект (заметьте со всеми подобъектами!) полупрозрачным, ему нужно в своем сценарии написать следующее:
Parent.obj1._alpha = 50;
Root.obj1._alpha = 50;
Т.к. obj4 у нас находится на первом уровне иерархии, то для него _root и _parent - одно и то же.
Теперь для объекта 3 напишем скрипт, который сделает объект 5 невидимым при нажатии клавиши мыши. В сценарии для объекта 3 пишем:
OnClipEvent (mouseDown) { _root.obj5._visible = false; }
В этом фрагменте мы использовали абсолютный путь. Если бы мы использовали относительный, это выглядело бы как:
Parent._parent._parent.obj5._visible = false;
Надеюсь, я прояснил момент с путями.
Приведенные выше примеры показали не только как выглядят пути, но и как вызываются функции и присваиваются значения свойствам.
Flash-программирование
программа элективного курса и дидактическое пособие для учителя и ученика
Программа курса. 1
1. Введение: 1
2. Тематика курса: 2
3. Литература: 2
Дидактическое пособие для учителя и ученика. 2
1. Введение, окно «действия кадра». 2
2. Переменные. 4
3. Поля ввода-вывода. 5
4. Условный оператор. 8
5. Циклы «с параметром» и циклы «пока». 11
7. Объектно-ориентированное программирование. 17
8. Программное изменение свойств. 19
9. Трехкадровые циклы. Программная анимация. 22
10. Проект «Интерактивная игра - Тир». 24
Программа курса
1. Введение:
Программа Macromedia Flash поражает своими возможностями. Помимо развитых средств для рисования и анимации Flash имеет встроенный язык программирования Action Script. Овладение этим языком позволяет не только создавать программную анимацию, Flash-игры, и интерактивные web-страницы, но и дает знания о технологиях объектно-ориентированного программирования (далее ООП).
Не смотря на то, что создатели Flash постарались сделать программирование простым даже для неподготовленного пользователя, овладение этим инструментов требует достаточно большого времени. Данный курс – элективный, ученики выбирают его для более осознанного выбора профиля в старшей школе. Подробное изучение программы, выполнение серьезных проектов может стать задачей профильных курсов (например «Web-программирование», «Web-дизайн», «Объектно-ориентированное программирование» и др.), а также самостоятельного изучения. Курс «Flash-программирование» предназначен на учеников 9 классов , уже знакомых с Flash-анимацией и основами программирования. В рамках элективного курса вполне возможно освоение основ программирования, технология ООП, выполнение несложных проектов во Flash. Курс включает в себя 8 проектов, в том числе проект Flash-калькулятора и проект интерактивной игры. Курс снабжен дидактическим пособием для учителя и ученика.
Цель курса:
Заинтересовать учащихся, показать возможности современных программных средств для создания интерактивных приложений; познакомить с основами объектно-ориентированного программирования; углубление знаний о Macromedia Flash.
Задача курса:
Познакомить с технологией объектно-ориентированного программирования; показать применение Action Script, для создания интерактивных приложений; создать два проекта: Flash-калькулятор и интерактивную игру «тир».
Требования к знаниям учащихся:
для успешного прохождения данного курса ученики должны обладать начальными знаниями о Flash: создание простейших изображений, работа с символами библиотеки, иметь представления о ключевых кадрах, Flash-анимации, базовых действиях в Action Script.
для успешного прохождения данного курса ученики должны обладать начальными в программировании: владеть такими понятиями, как алгоритм, программа, переменная, знать основные алгоритмические конструкции.
Требования к компьютеру:
Компьютер с установленной программой Macromedia Flash MX (или выше).
Курс «Flash-программирование» рассчитан на 12 часов.
2. Тематика курса:
Тематика | кол-во часов |
|
Повторение Flash. | ||
Поля ввода-вывода, алгоритмические конструкции типы полей (статическое, динамическое, вывода); объявление переменных, переменные символьные и числовые, добавление кода к кнопке, условный оператор, цикл с параметром, цикл пока, их реализация во Flash. типовые задачи: расчет стоимости полета, решение квадратного уравнения, возведение в степень, нахождение элемента ряда суммы ряда проект: Flash-калькулятор | ||
Основные понятия ООП объект, свойств, метод, событие | ||
Программное изменение свойств. Программная анимация. изменяемые свойства; создание символов, их имена; изменение свойств символов, особенности выполнения программного кода во Flash, трехкадровые циклы. типовые задачи: создание объекта с изменяемыми свойствами (нажатие на соответствующие клавиши). создание движущегося объекта. проект: Интерактивная игра Тир. |
3. Литература:
Белунцов В. Macromedia Flash: Анимация в Интернете. «ДЕСС Ком», Москва 2001. Flash MX 2004 материалы сайта www. *****Дидактическое пособие для учителя и ученика
1. Введение, палитра «Action»
Программа Macromedia Flash имеет собственный язык программирования Action Script. Он позволяет сделать Flash-ролики интерактивными. Возможности языка достаточно велики, что позволяет создавать серьезные программы. Action Script не является самостоятельным языком программирования. Он представляет из себя набор скриптов – фрагментов кода, которые «живут» только внутри Flash-ролика, что впрочем, не мешает создавать полноценные программы.
Нужно помнить, что Action Script – это событийный язык, то есть выполнение скрипта будет происходить при наступлении события. Таким событием может служить достижение определенного ключевого кадра, например, в последнем ключевом кадре мы добавляем команду stop(). Не смотря на то, что это всего лишь одна команда, это – полноценный скрипт, который будет выполнен при достижении последнего кадра – ролик остановится. Другим событием может служить щелчок мышки на экранной кнопке или нажатие клавишу клавиатуры.
Для того чтобы добавить программный код вам нужно выделить ключевой кадр, в который вы хотите добавить скрипт (или выделить созданную кнопку) и нажать на клавишу F9 (рисунок 1).
Рис. 1 Панель Action.
Давайте рассмотрим основные элементы окна «Action». Левая часть окна занята списком команд, которые вы можете выбирать, дважды щелкая на них левой клавишей мыши. Все команды, а их достаточно много, сгруппированы в двенадцать блоков «Global Function», «Global Properties» и т. д. После щелчка команда переносится в правую часть окна. В нем формируется программный код. Вы можете удалять ненужные команды (клавиша Delete) или перемещать вверх-вниз по скрипту либо с помощью клавиш управления курсором либо с помощью кнопок. Разумеется, вначале перемещаемая или удаляемая команда должна быть выделена. Нижняя часть окна отдана под изменяемые параметры каждой конкретной команды. Например, в команде перехода gotoAndPlay() нужно указывать, к какому кадру нужно перейти при достижении данной строчки. Для этого в скобках нужно набрать необходимый номер кадра.
При написании программного кода удобнее и быстрее набирать код вручную. При этом необходимо помнить, что язык ActionScript внимание на регистр набираемых вами команд. Это означает, что команда GoToandPlay() – будет ошибочной.
Остается добавить, что для запуска кода и просмотра полученного результата нужно войти в режим просмотра ролика, для этого нажать комбинацию клавиш Ctrl-Enter.
Вопросы для повторения:
Что такое скрипт? При каких событиях выполняется программный код в Flash? Как вызвать палитру «Action»? Из каких элементов состоит палитра «Action»? Как из Flash-ролика создать запускаемый файл?
2. Переменные
Одним из основных понятий любого языка программирования является переменная. Предполагается, что читатель с понятием переменной знаком, поэтому давайте посмотрим, как оно реализуется во Flash.
Предположим, мы хотим сложить два числа. Для выполнения этого несложного арифметического действия в первом ключевом кадре создайте кнопку: нарисуйте прямоугольник, сделайте подпись, а после полученное изображение конвертируйте в символ (меню вставка – конвертировать в символ, не забудьте задать поведение символа – кнопка). В результате появился объект, который может реагировать на щелчок мыши, в этом легко удостовериться, войдя в режим просмотра ролика.
Первое число будет храниться в переменной x1, а второе в переменной x2. Результат пусть сохраняется под именем summa и выводиться на экран. Для того чтоб сделать поле вывода (подробней об этом в следующем уроке) щелкните на инструмент текст и выделите с помощью него область экрана – будущее текстовое поле. После зайдите в плавающую панель Символ (меню окно – панели – символ) и во вкладке Параметры текста измените тип текстового поля Stutic Text на Dimamic Text (Рисунок 2). Обязательно задайте имя этого поля Переменная – summa. Также, чтобы поле было видно на экране, установите галочку рамка/фон.
Рис. 2 Создание динамического поля для вывода значений.
Теперь сопоставим сделанной кнопке код. Выделим кнопку и нажмем F9.
В левой части окна выбираем блок Операции – Установить переменную. В нижней части окна задаем параметры: переменная – x1, значение 5. Обратите внимание, рядом с полем значение находится переключаемый параметр выражение. Его нужно обязательно выбрать, в противном случае в переменной x1 будет храниться на число 5, а символ. Именно таким способом происходит задание типа переменной. Как вы поняли в AS всего два типа переменных числовой и строковый, заранее описывать типы, как это принято в языке Turbo Pascal. Аналогичные действия проделайте для второй переменной, соответственно ее имя – x2, а значение 8. Нам осталось дописать третью строку - устанавливаем третью переменную, ее имя: summa (такое же как и имя поля вывода), значение: x1 + x2, разумеется, выбран элемент выражение.
В результате этих операций в правой части у вас появляется код, изображенный на рисунке (Рисунок 3). Обратите внимание, каждая команда отделяется точкой с запятой, это Flash делает автоматически. Вначале находится команда on (release), она показывает, что данный код начнет выполняться при отпускании клавиши мыши от кнопки. Так как данный код сопоставляется экранной кнопе, то данная команда добавляется автоматически. После в фигурных скобках идет код, который должен выполняться при наступлении события.
Вот и все! Если вы все сделали правильно, то перейдя в режим просмотра ролика, и нажав на вашу кнопку в поле вывода появляется число 13.
Вопросы для повторения:
Как задать имя переменной для вывода тектовой или числовой информации? Какие типы переменных используются в Flash? Как показать, что созданная переменная - числовая? Как создать кнопку в Flash и добавить для нее программный код? Что означает команда on (release) в начале скрипта?
3. Поля ввода-вывода
Изучение нового языка программирования начинается с написания программ, в которых производится ввод начальных значений, после с ними происходят какие-то арифметические преобразования и на экран выводится полученный результат. Для вывода текста на экран в Flash используются текстовые поля. Для создания текстового поля вам нужно выбрать инструмент Текст (на панели инструментов) и поставив курсов в место, где нужно добавить текст вы «рисуете» текстовый блок (Рисунок 4).
Рис. 4 Создание текстового поля.
В результате у вас появляется статическое текстовое поле, в которое вы можете набрать любой текст. Всего существует три типа текстовых полей: статические, динамические и поля вывода. Тип поля задается с помощью вкладки «параметры», панели символ (см. предыдущую главу). Рассмотрим назначение и настройки каждого поля подробней:
Статическое поле применяемся для вывода надписей на сцене Flash. Как следует из названия, это поле не может изменяться программно. Все, что вам доступно, это задать шрифт, размер, цвет и т. д. При наборе текста, данное поле будет автоматически расширяться, отображая вводимый текст в несколько строк. При этом ширина текстового поля будет оставаться той, которую вы задаете при «рисовании» текстового блока. Для ее изменения вам нужно выделить блок инструментом Текст, и передвинуть правый верхний маркер текстового блока.
Рисунок 5
Динамическое поле применяется для создание полей вывода, в них информация может обновляться по ходу выполнения вашего ролика. Для того, чтобы обращаться к текстовому блоку программно, у него должно быть имя, которое задается в поле «переменная» (Рисунок 5). Я советую вам использовать в качестве имен переменных только латинские символы, без пробела. В том же окне вы можете включить свойство Рамка/фон. Теперь на листе появится рамка, в которой будет появляться выводимый текст, это очень удобно. Поле со списком, по умолчанию в нем выбрано Single Line, позволяет задать будет ли текст выводиться в одну строку и ли в несколько (значение MultiLine). Переключатель «выбираемый», по умолчанию он включен, определяет сможет ли пользователь выделять значения из данного поля, например, для того чтобы скопировать их в буфер обмена. Также как и для любого поля, вы можете задавать параметры текста: шрифт, размер, цвет и т. д. Если вы наберете в данном поле какой-либо текст, он будет отображаться до тех пор, пока программа не изменит его значение.
Поле ввода или Input Text применяется для ввода значений с клавиатуры. Окно параметров поля ввода внешне напоминает окно, рассмотренное выше. Главным параметром здесь также является поле «переменная». Вы задаете под каким именем будут записываться данные, введенные пользователем.
Рисунок 6
Понимая назначение текстовых полей вы сможете сделать следующий проект. «В компьютер вводятся стоимость взрослого авиабилета, а также количество взрослых и детей, совершающих полет. Компьютер при нажатии на соответствующую кнопку вычисляет стоимость детского билета (50% от стоимости взрослого) и общую стоимость полета.» Смотри внешний вид программы (Рисунок 6). Как несложно заметить в данной задачи осуществляется ввод значений и вывод результатов, весь код должен выполняться при нажатии на кнопку, а стало быть, должен сопоставлен этой кнопке.
Для начала создайте пять статических текстовых полей, заполните их соответствующим текстом.
Создайте три поля ввода, дайте переменным для каждого поля уникальные имена, например: stv (стоимость взрослого билета), kolv (количество взрослых) и kold (количество детей).
Создайте два динамических поля, дайте переменным для каждого поля уникальные имена, например: std (стоимость детского билета) и itog (итоговая сумма полета).
Сделайте две кнопки «расчет стоимости полета» и «очистка полей»
Для первой кнопки добавьте следующий код (кнопка, правая клавиша – операции):
if (stv==null) {
if (kolv==null) {
if (kold==null) {
itog = stv * kolv + std * kold;
Предпоследняя строка вычисляет стоимость детского билета (половина от стоимости взрослого) и заносит это значение в переменную std (имя соответствующего поля вывода). В последней строке вычисляется итоговая сумма (переменная itog), и ее значение заносится в соответствующее поле вывода.
В принципе, можно было обойтись этими двумя строчками кода. Но так как человек, который будет работать с этой программой вовсе не обязательно будет вводить цифру ноль если дети в полете не участвуют. А это означает, что стоимость детского билета (числовое значение) будет умножаться на пустое значение (строковое значение). Результатом такого «умножения» будет сообщение об ошибке в соответствующем поле вывода. Для предотвращение этого компьютер проверяет является ли поле ввода пустым (kold==null) и если это так, присваивает переменной kold значение равное нулю. Такая конструкция называется условным оператором. Подробней о ней в следующей теме. Если для вас пока сложно работать с условиями, вы можете их опустить, но не забывайте, пустых полей не должно быть!
Для того, чтобы завершить проект, добавим соответствующий код для кнопки «очистка полей»:
Как вы видите при нажатие на данную кнопку каждой переменной, а, следовательно, полю ввода-вывода будет сопоставлено пустое значение (между двумя знаками кавычек ничего нет).
Вопросы для повторения:
Какие типы тектовых полей используются в Flash? Какие изменяемые параметры имеет динамическое текстовое поле? Какой тип поля используется для ввода значений с клавиатуры? Объясните смысл следующей строчки кода: itog = stv * kolv + std * kold;? Для чего в описываемом проекте используется условный оператор?
4. Условный оператор
Программный код, который мы рассматривали до этого – линейный. Каждая команда выполняется лишь после того, как будет выполнено предыдущее действие. В жизни все несколько сложнее. Мы открываем зонт если идет дождь, радуемся если достигли цели, вычисляем корни квадратного уравнения если дискриминант больше нуля. Во всех перечисленных случаях, мы поступаем так или иначе. Для реализации таких ситуаций во всех языках программирования предусмотрен оператор ветвления или условный оператор. Action Script – не исключение.
Рисунок 7
Вызов условного оператора осуществляется щелчком на команде Операции - Если (Рисунок 7). В правой части окна появляется конструкция:
if (<Не установлено>) {
Вместо <не установлено> вы должны написать операцию сравнения, вы набираете ее в поле «Условие». Примером, такого условия может быть z<10, (переменная z меньше десяти).
Рассмотрим основные операции сравнения:
> меньше;
< больше;
>= больше либо равно;
<= меньше либо равно;
Равно (обратите внимание, два знака равенства);
Не равно (обратите внимание, восклицательный знак означает отрицание следующей за ним операции сравнения).
Часто, необходимо одновременного выполнения нескольких условий. Для этого применяются булевы (логические) иперации:
&& или and –логическое И;
|| или or – логическое ИЛИ;
Или not – логическое НЕ.
Например, условие (a == 10) && (z > 5) будет истинным только тогда, когда переменная а равна десяти и одновременно переменная z больше пяти.
Условие – это вопрос на который может быть только два ответа «да» и «нет». Если условие истинно, то выполняются действия, заключенные в фигурные скобки.
Если нам нужно добавить группу команд, которые должны выполняться, когда условие ложно, вам нужно добавить Операции – Else. Тогда фрагмент кода примет вид:
if (<Не установлено>){
Для добавления команд вы должны установить курсор над строкой, где должна появиться команда. Осталось выбрать нужную команду в соответствующем блоке и щелкнуть на ней мышью.
Рисунок 8
Рассмотрим как реализуются изложенные принципы для решения классической задачи – нахождения корней квадратного уравнения. «В компьютер вводятся три числа – параметры квадратного уравнения ax2 + bx + c = 0. На основе введенных данных, компьютер определяет сколько корней имеет данное уравнение, вычисляет их и выводит результаты на экран. Представлен примерный вид окна программы (Рисунок 8).
Для выполнения данного проекта:
Создайте в первом кадре на основной сцене три поля ввода и дайте им соответствующие имена: a, b, c. Сделайте видимыми их границы.
Создайте несколько статических текстовых полей для подписей полей ввода-вывода: x2, =0, дискриминант и т. д.
Создайте четыре динамических текстовых полы: d – дискриминант, r – решение, x1 – значение первого корня, x2 – значение второго корня.
Создайте две кнопки «решить уравнение» и «очистить».
Для первой кнопки «решить уравнение» добавьте следующий программный код, текст, помеченный знаком апострофа – комментарий, его вставлять необязательно:
if (a == null) {
if (b == null) {
if (c == null) {
‘ три первых условных оператора проверяют являются ли поля a, b, c пустыми,
‘ если это так, они присваивают им численные значения равные нулю
‘ вычисляется дискриминант (переменная d).
r = "нет корней";
‘ если условие выполняется – дискриминант меньше нуля переменная d
‘ принимает соответствующее текстовое значение
} else if (d == 0) {
r = "один корень";
x1 = (-b)/(2*a);
x2 = (-b)/(2*a);
‘ используется команда Операции – Else If. Благодаря ему выполнение следующих
‘ действий начинается с проверки условия. Если оно истинно – дискриминант
‘ равен нулю, производятся аналогичные вычисления, переменные, связанные
‘ с текстовыми полями принимают соответствующие значения
r = "два корн" + Chr(255);
‘ самая загадочная строка. Необходимо, чтобы выводилась надпись «два корня»,
‘ но нам не повезло с русской буквой я. Flash воспринимает код, который
‘ соответствует этой букве, как знак переноса на другую строку.
‘ Для этой цели значение символа 255 добавляется к текстовой строке. Такое
‘ действие – соединение двух текстовых строк называется конкатенацией.
kd = Math. sqrt(d);
x1 = (-b+kd)/(2*a);
x2 = (-b-kd)/(2*a);
‘ для вычисления квадратного корня использована команда Math. sqrt(d);
‘ для ее вызова используется команда Объектов – Математика – Sqrt
Нам осталось добавить для второй кнопки следующий код:
Мне кажется, что комментарии тут излишни. Проект готов. Сохраняйте его, тестируйте.
Вопросы для повторения:
Какая конструкция задает в Flash условный оператор? В чем разница конструкций: if (<Не установлено>){} else {} и if (<Не установлено>)}? Как задается отрицание в Flash? Что такое булевы операции, как они записываются в Flash? В чем разница строчек: a=10 и a==10?
5. Циклы «с параметром» и циклы «пока»
Для выполнения повторяющихся действий в языках программирования используются специальные конструкции, которые называются операторами цикла. Таких циклических конструкций несколько, мы рассмотрим две наиболее часто встречающиеся цикл «с параметром» и цикл «пока». Рассмотрим, как они реализованы в языке Action Script.
Цикл «с параметром» применяется в том случае, когда заранее известно сколько раз нужно выполнить определенное действие. Можно провести следующую аналогию - для приготовления супа необходимо почистить шесть картофелин. Если записать действия в виде линейного алгоритма, то можно заметить что шесть раз будут повторяться команды «взять картофель», «очистить кожуру», «вымыть». Для большей компактности алгоритма, а также для того, чтобы в дальнейшем его можно было легко изменять, логичней записать это в виде цикла:
Повторить (6 раз) {
«взять картофель»;
«очистить кожуру»;
«вымыть»;
Здесь цифра шесть – это параметр цикла, количество повторений. То, что взято в фигурные скобки – это повторяемые команды. Они будут выполнены ровно шесть раз.
Рисунок 9
Для создания цикла «с параметром» в Flash, вам необходимо в окне Действия кадра выбрать команду Операции – Для. В результате в правой части экрана появится конструкция цикла (Рисунок 9).
Рисунок 10
Для данной конструкции нужно настроить три поля. Начальное – здесь нужно написать начальное значение некоторой переменной, ее еще называют счетчик. Например, i=1. Условие – до каких пор переменная i будет изменяться. Например, i<=10. Следующий – с каким шагом изменяется переменная i. Если вы хотите, чтобы переменная каждый раз увеличивалась на единицу, то можно записать i++. В результате появляется конструкция:
for (i=1; i<=10; i++) {
Ее смысл в следующем – переменная i будет принимать значения от одного до десяти и десять раз будут выполняться команды, взятые в фигурные скобки. Саму переменную i можно использовать в теле цикла, также там можно использовать другие алгоритмические конструкции, условные операторы и т. д.
Давайте рассмотрим, как реализуется данная конструкция в следующей задаче. «Создать программу, вычисляющую a в степени n (n – целочисленное значение). Значение a и n вводятся в соответствующие поля. Внешний вид программы представлен на Рисунок 10.
Создайте одно динамическое поле и назовите его an.
if (n<>0) {
‘ Задача имеет смысл, только если n > 0, это проверяет условный оператор
for (i=2; i<=n; i++) {
‘ Так как в первой строке переменная an уже приняла значение равное а, поэтому начальное значение счетчика равно двум.
Для кнопки «очистить» добавьте следующий код:
Комментарии мне кажутся излишними.
Цикл «пока» применяется в том случае, когда заранее не известно количество повторений. Продолжим аналогию - когда люди копают картофель они тоже выполняют повторяющиеся действия: «подкапнуть куст», «собрать картофель», «сложить в мешок». Все дело в том, что ни кто не знает сколько раз необходимо выполнить эти действия. Поэтому записать этот цикл можно следующим образом:
Пока (есть картошка?) делать {
Всякий раз, выполнив указанный набор команд необходимо проверить выполняется ли условие, если да, то вновь выполняется тело цикла.
Рисунок 11
Для создания цикла «пока» в Flash, вам необходимо в окне действия кадра выбрать команду Операции – While. В результате в правой части экрана появится конструкция цикла (Рисунок 11).
Для данной конструкции нужно настроить только одно поле. Условие – при каком условие цикл выполняется. Например, y<10.
Обратите внимание, что если при первом обращении к циклу условие не выполняется, то цикл не выполняется ни разу. Также, очень важно, чтобы переменная y изменялась в ходе выполнения цикла, иначе произойдет зацикливание и зависание программы. Также хочется обратить ваше внимание на особенность выполнения программного кода во Flash. Если вы циклически изменяете какое-либо свойство объекта или значение динамического поля, то при запуске вы не увидите быстрое изменение этого свойства или значения. Flash вначале полностью выполнит весь скрипт, и лишь после окончания цикла изменит перерисует экран и изменит данное свойство или значение. Понимание данной особенности нам будет особенно важно в девятом уроке при изучении программной анимации.
Рисунок 12
Любой алгоритм, который можно записать с помощью цикла «с параметром» можно записать и с помощью цикла «пока». А вот обратное не верно. Существуют задачи которые другими способами как использовать конструкцию «While» не решить. Рассмотрим такую задачу. «Известно, что ряд чисел 1, 1/2, 1/3 … 1/n является расходящимся, это значит сумма таких чисел сможет превысить любое наперед заданное число A. Найдите такое n, при котором сумма ряда 1 + 1/2 + 1/3 + … + 1/n станет больше заданного числа А. Внешний вид программы представлен на Рисунок 12.»
Создайте одно поле ввода данных и назовите его a.
Создайте два динамических поля и назовите их соответственно n и s.
Создайте необходимое кол-во статичных подписей «а=», «n=» и т. д.
Создайте две кнопки «вычислить» и «очистить».
Для кнопки «вычислить» добавьте следующий код: