Объекты
Macromedia Flash похожи на объекты реального
мира. Каждый тип объектов Flash соответствует
тем или иным надобностям вашего Flash-приложения.
В этом уроке мы познакомим вас с объектами Flash
и поможем вам получить опыт их применения.
Внимание!
Для работы с этим уроком необходимы учебные
файлы, которые Вы можете загрузить
здесь.
Этот
текстовый редактор, созданный во Flash,
станет одним из проектов, которые мы
создадим в этом уроке
Что такое
обьекты и зачем они нужны
Вообразите на минутку, что вы – плотник. При
постройке дома вам придется воспользоваться
некоторыми готовыми объектами. Чтобы сколотить
дверную раму, вам понадобится несколько брусьев,
молоток и пригоршня гвоздей – все это объекты,
обладающие определенными свойствами, которые
дают возможность выполнить вашу работу. Порой вы
даже не очень представляете себе, как именно
работает объект (ну, взять хоть бетономешалку) –
вы "даете" объекту некий материал, а он выдает
вам нечто совсем другое.
Такой же смысл и у объектов Flash: это элементы,
используемые особым способом для построения
приложения или выполнения определенной задачи.
Считайте, что объекты – это инструменты и
строительные материалы для вашего проекта.
В
ActionScript имеется множество объектов для
различных целей. Однако, если вдруг объекта,
отвечающего вашим нуждам, не найдется, вы можете
создать свой собственный и запрограммировать его
так, как вам нужно.
Объектам присущи атрибуты двух основных
разновидностей: свойства и методы. Рассмотрим
подробнее то и другое.
Свойства
Многие (хотя и не все) объекты имеют свойства –
набор переменных, представляющих характеристики
объекта. Например, в реальном мире автомобиль
обладает такими свойствами, как цвет, марка,
модель, мощность и так далее. Если бы этот
автомобиль был объектом ActionScript, он мог бы
быть описан так:
car.color = "red";
car.make = "Volkswagen";
car.model = "Beetle";
car.horsepower = 100;
Во
Flash различные объекты могут иметь разные
свойства. Например, объект
MovieClip обладает
свойствами, определяющими его прозрачность,
видимость, позиции по горизонтали и вертикали,
угол поворота и еще многими. Изменение
какого-либо из этих свойств влияет на внешний
вид фильма-символа или его поведение, – так же,
как влияет на автомобиль покраска или замена
двигателя. В своих скриптах вы можете в любое
время использовать или изменить значения свойств
объектов. Предположим, в вашем проекте
автомобиль должен перемещаться со скоростью,
зависящей от мощности его двигателя.
Соответствующая строка скрипта могла бы
выглядеть так:
speedFactor =
car.horsepower;
Давайте рассмотрим еще один пример использования
свойств объекта в ActionScript.
Длина строки есть свойство объекта
String (строка).
Например, длина строки "Flash" равна 5, так как
она содержит пять символов. В ActionScript мы
могли бы написать так:
name = "Flash";
lengthOfName = name.length;
В
первой строке этого кода создается переменная с
именем name,
которая получает значение строкового типа
"Flash". Во второй строке создается переменная с
именем lenghtOfName,
и ей присваивается значение свойства
length объекта
name (которое
равно 5). Названия свойств фильма-символа обычно
начинаются с символа подчеркивания (_alpha,
_rotation и так далее), однако это не
является общим правилом для названий свойств
объектов. Дело в том, что этот обычай
перекочевал из Flash 4; тогда свойства только
еще вводились и ActionScript сильно отличался от
нынешнего.
Примечание Свойства объектов бывают разных
типов – это могут быть переменные, массивы и
даже другие объекты.
Методы
Метод представляет собой задачу, которую
способен выполнять объект. Если считать
видеомагнитофон объектом, то к его методам будут
относиться воспроизведение, запись, стоп,
перемотка вперед и назад, пауза и тому подобное.
В ActionScript после имени метода ставятся
круглые скобки. Методы нашего
объекта-видеомагнитофона записывались бы так:
play();
rewind();
record();
Чтобы вызвать метод объекта, нужно сначала
указать сам объект (или имя экземпляра объекта –
что это значит, мы сейчас объясним), затем
ставится точка, затем – имя метода:
myVCR.record();
Это
будет указание объекту с именем
myVCR начать
запись.
Скобки, стоящие после имени объекта, могут
заключать в себе параметр или набор параметров.
Параметры – это сведения, позволяющие методу
выполнить свою задачу некоторым определенным
образом. Вновь используем в качестве примера
видеомагнитофон. Допустим, вы хотите записать
телепередачу по 8 каналу с 10 до 11 часов 9
сентября. Скрипт для выполнения такой задачи мог
бы выглядеть так:
myVCR.record (8,
10:00, 11:00, September 9);
Как
видите, параметры метода отделены друг от друга
запятыми. Значения параметров могут быть заданы
прямо (как в приведенном примере), либо в
качестве значений параметров можно подставить
динамические значения – скажем, переменные. В
качестве параметра можно даже использовать
другой метод.
Многие объекты ActionScript могут принимать
параметры, однако далеко не все. Некоторые
простейшие задачи не требуют каких-то
дополнительных настроек. Например, метод
stop() объекта
MovieClip просто
останавливает воспроизведение монтажного стола –
тут нечего ни прибавить, ни убавить.
Каждый тип объекта имеет уникальный набор
методов – оно и понятно, ведь все объекты
выполняют специфические задачи.
Методы объектов в ActionScript приспособлены для
выполнения всевозможных задач, включая:
- Получение
и присвоение значений (смотри далее)
-
Выполнение преобразований (например,
преобразование отрицательного числа в
положительное)
- Проверка
чего-либо на истинность
- Активация
или деактивация чего-либо
-
Манипулирование чем-либо (например, текстом
или числами)
В
этом уроке мы продемонстрируем некоторые из этих
задач, а еще много больше – в ходе всего курса.
Примечание Объект не обязательно должен
содержать свойства и методы. Однако какое
применение мог бы найти объект без свойств и
методов?
Типы объектов
Объекты организованы по классам, которые
представляют собой группы объектов, имеющих
схожие свойства и методы. В реальном мире
автомобили представляют собой один класс
объектов, а рыбы, книги, даже люди – другие
классы. Каждый из 6 миллиардов людей на этой
планете может рассматриваться как экземпляр
класса Человек. Хотя каждый человек уникален,
всем людям присущи схожие свойства (имя, возраст,
цвет волос, рост и тому подобное) и виды
деятельности (дыхание, ходьба, осязание, зрение
и так далее). Поскольку каждый новый созданный
вами экземпляр фильма-символа является
экземпляром объекта MovieClip, он наследует все
свойства и методы, присущие этому классу
объектов.
Практически любой проект содержит по нескольку
экземпляров одного класса объектов – например,
объекта MovieClip,
о котором мы только что говорили, или объекта
String (ведь
проект может содержать много разных символьных
строк, и каждая из них будет экземпляром объекта
String). Другие
объекты являются универсальными, или глобальными
– это значит, что проект может содержать лишь
один экземпляр такого объекта. Таков, например,
объект Mouse (мышь),
который, помимо прочего, управляет "видимостью"
указателя. Поскольку указатель может быть только
один, вы не можете создать несколько экземпляров
мыши, а можете лишь использовать присущие этому
объекту методы.
Создать экземпляр объекта можно двумя способами.
Чтобы создать новый экземпляр объекта
MovieClip,
достаточно поместить на сцену фильм-символ.
Однако такой способ пригоден лишь для некоторых
(немногочисленных) типов объектов. Для создания
экземпляров объектов других типов необходимо
использовать конструктор – это довольно простая
строка кода, приказывающая Flash создать новый
экземпляр определенного объекта. Конструктор
выглядит так:
имяЭкземпляра = new
имяОбъекта();
Так,
если мы хотим создать экземпляр объекта
Sound (звук),
конструктор будет примерно таким:
mySoundInstance = new
Sound();
Каждый раз, создавая экземпляр объекта, вы
должны присваивать ему имя, уникальное для
данного проекта. Это позволит изменить свойство
или вызвать метод, соответствующий конкретному
экземпляру – в последующих примерах мы это
продемонстрируем. Поднабравшись опыта в
программировании, вы поймете, когда следует
использовать конструкторы.
Примечание Для имен объектов действуют те же
ограничения, что и для имен переменных; то есть
имена не должны содержать пробелов, специальных
символов и не должны начинаться с цифры.
Совет Во Flash вы можете присоединять к
имени объекта специальные суффиксы,
способствующие получению подсказок в панели
Действия. Например, вы можете назвать экземпляр
фильма-символа
myMovieClip, а можете с суффиксом –
myMovieClip_mc. В
последнем случае панель Действия будет понимать,
что это имя соответствует объекту определенного
типа и при вводе скриптов вы будете получать
раскрывающийся список, содержащий имена всех
свойств и методов, присущих этому объекту.
Полный список суффиксов вы можете найти в
Словаре ActionScript (ActionScript dictionary).
В
списке панели Действия, в разделе Objects, вы
сможете найти все объекты Flash. Они разбиты по
следующим подразделам:
- Core.
Эти объекты отвечают за хранение информации
и манипулирование ею, исключая процессы
обмена информацией с внешними источниками.
- Movie.
Эти объекты отвечают за визуальное
содержание и системные параметры –
фильмы-символы, текстовые поля, сцена и
права доступа.
-
Client/Server. Эти объекты контролируют
обмен информацией между Flash и внешними
источниками.
-
Authoring. Эти объекты помогут вам при
создании собственных команд и компонентов.
Далее приводится описание многих классов
объектов ActionScript, а также советы по их
использованию. При этом указано, является ли
объект глобальным или же нужно создавать его
экземпляры
Объект
Accessibility (глобальный)
Данный объект содержит неизменяемую информацию (только
для чтения) о том, может ли компьютер
пользователя использовать screen reader (разновидность
приложений для чтения текста с экрана).
Accessibility.isActive();
Приведенная строка ActionScript возвращает
результат true
либо false. Если
результат – true,
значит, компьютер пользователя может
использовать screen reader.
Объект Array (экземпляры)
Массив (array)
есть "приспособление" для хранения совокупности
однородных данных. Размещение информации в
массиве и доступ к ней осуществляется
посредством индексной системы. Например:
cakeType = new
Array();
cakeType[0] = "Chokolate";
cakeType[1] = "Angel Food";
cakeType[2] = "Baked Alaska";
В
первой строке этого скрипта с помощью
конструктора создается новый массив строк (экземпляр
объекта Array) с
именем cakeType.
Следующие строки помещают данные в этот массив.
Объект Array
располагает многими полезными методами, которые
позволят вам добавить, удалить и отсортировать
элементы массива.
Примечание Подробнее о массивах смотри
Урок 7 – Работа с динамическими данными.
Объект Boolean
(экземпляры)
Объект Boolean (логический)
хранит одно их двух значений –
true или
false. Создать
экземпляр объекта Boolean
можно с помощью конструктора либо оператором
присвоения (=).
Например, скрипты
toggle = new
Boolean(false);
или
toggle = false;
создают один и тот же объект.
Объект Button
(экземпляры)
Помещая на сцену кнопку, вы создаете экземпляр
объекта Button.
Подобным образом можно создать только еще два
типа объектов – MovieClip
(фильм-символ) и
TextField (текстовое поле). Объект
Button содержит
свойства и методы, позволяющие управлять внешним
видом кнопки, функциональностью, порядком
переноса фокуса и многим другим.
Объект
Capabilities (глобальный)
Этот объект содержит информацию о компьютере
пользователя – о разрешении экрана, о том, может
ли компьютер воспроизводить звук и тому подобное.
Следующая строка ActionScript помещает в
переменную myVariable
значение разрешения экрана пользователя по
горизонтали:
myVariable =
System.capabilities.screenResolutionX;
Совет Возможность доступа к этой
информации позволяет создавать фильмы, способные
автоматически подстраиваться к возможностям
компьютера пользователя. Например, можно
определить, не открыт ли фильм на портативном
компьютере – и если это так, переадресовать
пользователя на страницу, разработанную
специально для портативных устройств.
Объект Color (экземпляры)
Этот объект используется для динамического
изменения цвета фильмов-символов. Создавая
объект Color, вы
указываете ему на определенный фильм-символ.
Затем, с помощью методов объекта
Color, вы можете
управлять цветом фильма-символа. Объект
Color создается
при помощи конструктора, например:
myColor = new
Color(путьКМонтажномуСтолу);
Позднее в этом уроке мы выполним упражнение с
использованием объекта
Color.
Объект Date (экземпляры)
С
помощью этого объекта фильму становится доступна
информация о текущем времени (местном или по
Гринвичу), а также текущая дата – день, месяц и
год. Для создания объекта
Date следует использовать конструктор.
Следующий пример демонстрирует использование
объекта Date:
now = new Date();
largeNumber = now.getTime();
Этот скрипт создает переменную с именем
largeNumber,
значением которой станет число миллисекунд,
прошедших с полуночи 1 января 1970 года до
текущего момента.
Примечание Подробнее об использовании
объекта Date
смотри Урок 15 – Привязка динамики к времени или
кадрам.
Объект Key (глобальный)
Объект Key
используется для определения состояния
клавиатуры – например, можно узнать, не нажата
ли клавиша Caps Lock, какая клавиша была нажата
последней, какая клавиша или комбинация клавиш
нажата в данный момент.
В
этом уроке мы выполним упражнение с
использованием этого объекта.
Объект
LoadVars (экземпляры)
Flash позволяет загружать в фильм данные (например,
переменные) из внешних источников. Используя
объект LoadVars,
Flash загружает данные в переменные с указанного
URL (это может быть и статичный текстовый файл).
Например:
myOb = new LoadVars();
myOb.load("http://www.mysite.com/myFiles/file.txt");
В
приведенном примере все загруженные переменные
становятся свойствами экземпляра
myOb.
Объект Math (глобальный)
Объект Math – это
набор математических функций. С его помощью вы
можете выполнять различные вычисления. Вот
пример использования объекта
Math:
positiveNumber =
Math.abs(-6);
Приведенный скрипт использует метод
abs (вычисление
абсолютного значения, или модуля) объекта
Math для
преобразования отрицательного числа в
положительное.
Объект Mouse (глобальный)
Объект Mouse (мышь)
управляет отображением указателя (курсора), а
также позволяет создавать слушатели для
отслеживания активности мыши. Вот пример его
использования:
Mouse.hide();
Эта строка скрипта скрывает указатель мыши. Мышь
остается активной, просто указатель не
отображается на экране.
Объект
MovieClip (экземпляры)
Наверное, это наиболее знакомый вам объект. Его
экземпляры создаются в среде разработки (путем
помещения их на сцену) либо с помощью
ActionScript – но не с помощью конструктора, а
действиями, такими, как
createEmptyMovieClip() и
duplicateMovieClip().
Фильмы-символы имеют множество свойств и методов,
которые часто используются в интерактивных
проектах. Пример использования:
myClip.gotoAndStop("Menu");
Этим скриптом экземпляр фильма-символа с именем
myClip переводится
к кадру с меткой Menu.
Объект Number
(глобальный)
Экземпляр объекта Number
можно создать с помощью конструктора либо
присвоив переменной числовое значение. Например:
age = new Number(26);
или эквивалентное действие:
age = 26;
Конструктор new Number()
используется редко, поскольку простое
присваивание числового значения проще, а
результат один и тот же.
Объект Object
(экземпляры)
Нет, это не опечатка: существует тип объектов
под названием Object!
Этот объект известен как родовой, или корневой
объект ActionScript (то есть высший в иерархии
классов), и вы можете использовать его
различными способами. Используя доступные ему
свойства и методы, можно модифицировать объекты
других классов (перечисленные в этом разделе).
Также вы можете создать собственные объекты,
например, для хранения информации о пользователе
или для отслеживания каких-либо порций данных.
Синтаксис использования родового объекта таков:
names = new Object();
names.cat = "Hayes";
В
первой строке скрипта создается новый объект под
названием names. Вторая строка добавляет в новый
объект переменную с именем
cat. Эта
переменная станет свойством объекта.
В
Уроке 6 – Создание и модификация объектов – мы
научим вас создавать собственные объекты (это
лучше, чем просто использовать родовой объект!),
а также свойства и методы для них. Тогда вы
сможете создавать объекты, точно соответствующие
вашим нуждам.
Объект
Selection (глобальный)
Объект Selection (выделение)
позволяет получить информацию (или набор
характеристик) о выделенных элементах вашего
фильма, особенно это полезно при работе с
текстовыми полями. Когда курсор установлен в
текстовом поле, говорят, что это поле находится
"в фокусе". Объект
Selection можно использовать для того,
чтобы установить фокус в определенное текстовое
поле, чтобы определить, какое поле находится в
фокусе в данный момент, даже для того, чтобы
программным способом выделить порцию текста в
поле и выполнить с ней какие-либо манипуляции.
Вот один из способов использования объекта
Selection:
Selection.setFocus("firstName");
Этот скрипт устанавливает в фокус экземпляр
текстового поля для ввода с именем firstName.
В
этом уроке мы выполним упражнение с
использованием этого объекта.
Объект Sound (экземпляры)
Объект Sound
используется для управления воспроизведением
звукозаписей – например, установки громкости,
настройки баланса между правым и левым каналами.
Узнать больше об этом объекте вы сможете из
Урока 16 – Программирование звукозаписей.
Объект String
(экземпляры)
Объект String
предназначен для получения информации о
символьных строках и манипулирования ими.
Создать новую строку можно с помощью
конструктора объекта
String или путем присвоения переменной
строкового значения – последовательности
символов, заключенной в кавычки. Например:
bird = new
String("Robin");
или, что то же самое:
bird = "Robin";
В
этом уроке мы выполним упражнение с
использованием этого объекта.
Объект Stage (глобальный)
Объект Stage
позволяет получать информацию о характеристиках
сцены и управлять ими (например, выравниванием).
Вот пример:
Stage.height
Эта строка скрипта возвращает высоту сцены в
пикселях.
Объект System
(глобальный)
Этот объект содержит данные о системе
пользователя – такие, как тип операционной
системы, используемый язык, а также все свойства
объекта Capabilities.
Одним из свойств объекта
System является строка под названием
serverString,
которая содержит список возможностей системы (объединенных
в одну строку). Этот список можно переслать на
сервер, с тем, чтобы сохранить или использовать
эту информацию. Синтаксис доступа к этой строке
таков:
System.capabilities.serverString
Объект
TextField (экземпляры)
С
помощью этого объекта можно динамически создать
новое текстовое поле и управлять большинством
его характеристик – например, установить формат
текстового поля или прокрутку текста. Чтобы
создать экземпляр этого объекта, нужно поместить
на сцену текстовое поле либо создать его
динамически при помощи действия createTextField().
В этом уроке мы будем использовать этот объект.
Объект
TextFormat (экземпляры)
Объект TextFormat
используется для форматирования текста,
отображаемого в текстовых полях. Создав объект
TextFormat, вы
должны применить его к текстовому полю,
используя методы
setTextFormat() или
setNewTextFormat()
объекта TextField:
nameOfTextField.setTextFormat(nameOfFormatObject);
Объект XML (экземпляры)
XML – один из
наиболее популярных стандартов форматирования
данных, что не удивительно – многие приложения
способны обмениваться данными в формате
XML. Во Flash вы
имеете возможность создать объект для хранения
документа в формате XML.
Документ, загруженный в XML-объект, можно
переслать другому XML-объекту или приложению.
Пример использования объекта
XML:
myXML = new XML();
myXML.load("myFile.xml");
Приведенный здесь скрипт создает новый объект
XML и загружает в
него файл в формате XML.
Объект
XMLSocket (экземпляры)
Flash позволяет также установить постоянное
соединение с сокет-сервером – приложением,
выполняющимся на сервере Сети. Сокет-сервер
ожидает, когда пользователь подсоединится к нему.
Как только соединение установлено, сокет-сервер
может обеспечивать обмен информацией между всеми
присоединенными пользователями с очень высокой
скоростью – так работает большинство чат-систем
и многопользовательских игр. Название "XML-сокет"
говорит само за себя – при таком типе соединения
в качестве стандарта для обмена информацией
используется формат XML. Экземпляры объекта
XMLSocket
создаются при помощи конструктора. Вот пример
использования объекта
XMLSocket:
mySocket = new
XMLSocket();
mySocket.connect("http://www.electrotank.com",
8080);
Приведенный здесь скрипт создает новый объект
XMLSocket, а затем
открывает соединение с сокет-сервером. Детальную
информацию о сокет-серверах и объекте
XMLSocket вы
найдете в Уроке 12 – Применение XML во Flash,
там же имеется упражнение, которое позволит вам
создать свое собственное чат-приложение.
Мы
не можем в этой книге описать подробно каждый
тип объектов. Однако в ходе курса мы с вами
будем использовать многие из этих объектов
различными способами, при этом вы получите
детальные сведения о том, как и почему мы это
делаем. В следующем упражнении мы
сконцентрируемся на одном из объектов, чтобы
дать вам общее представление об использовании
объектов.
Использование
объекта color
Чтобы использовать объект
Color, нужно сначала создать его при
помощи конструктора. Синтаксис создания нового
объекта типа Color
следующий:
myColor = new
Color(shirt);
Приведенная строка ActionScript создает новый
экземпляр объекта Color
с именем myColor и
связывает его с экземпляром фильма-символа,
имеющим имя shirt.
Объект может быть создан где угодно, и
конструктор может иметь один параметр – путь к
фильму-символу, который он должен модифицировать.
Если нужно создать объект
Color внутри того самого фильма-символа,
на который он должен будет воздействовать,
следует использовать в качестве пути
this. Например,
так:
myColor = new
Color(this);
Созданный таким образом экземпляр объекта
Color будет
изменять цвет того экземпляра фильма-символа,
который содержит скрипт.
Примечание. Вы можете создать много
разных объектов Color
(так же, как прочих объектов, создаваемых
конструктором) и ассоциировать их с разными
монтажными столами, получив возможность
динамически управлять цветом многих экземпляров
одновременно.
Наиболее часто используемый метод объекта
Color – метод
setRGB(),
изменяющий цвет экземпляра фильма-символа,
указанного в качестве параметра при создании
объекта. Вот пример использования метода
setRGB():
myColor = new
Color(shirt);
myColor.setRGB(0xFF3300);
Приведенный здесь скрипт создает новый объект
Color с именем
myColor, затем,
используя метод setRGB(),
цвет экземпляра фильма-символа
shirt изменяется
на красный. Этот метод имеет параметр – (0x), за
которым следует шестнадцатеричное число – код
цвета. Параметр 0x – зарезервированная
комбинация символов, показывающая Flash, что
здесь следует шестнадцатеричное число.
Числовая система, которой мы привыкли
пользоваться, называется десятичной, или, как
еще говорят, с основанием 10; в ней для
выражения любых чисел используется десять цифр (от
нуля до девятки). Все прочие числа (28; 6403;
496; 300; 439 и так далее) можно записать в виде
комбинации этих десяти цифр. В программировании
применяется также шестнадцатеричная система (с
основанием 16); в ней для записи чисел
используются, помимо цифр от 0 до 9, еще и буквы
от A до F. Записанное в шестнадцатеричной
системе число 00 соответствует десятичному 0, а
шестнадцатеричное число FF – десятичному 255.
Впрочем, чтобы описать тот или иной цвет для
метода setRGB(),
совершенно не обязательно знать его
шестнадцатеричный код. Зная десятичные значения
RGB для нужного цвета, вы можете, динамически
преобразовать их в шестнадцатеричный код – с
помощью объекта Number
и функции parseInt();
в следующем упражнении мы покажем, как это
сделать.
В
данном упражнении мы создадим несложную
интерактивную сцену, в которой можно будет,
нажав несколько кнопок, изменить цвет волос
клоуна.
-
Откройте файл Clown1.fla из папки
Lesson04/Assets.
Графическое содержание уже создано и размещено
на сцене, так что мы можем сосредоточить все
внимание на программировании изменения цвета
фильма-символа. На основном монтажном столе три
слоя: Background (фон), Clown Hair (волосы
клоуна) и Buttons (кнопки).
Слой Clown Hair содержит экземпляр
фильма-символа с именем
hair. Цвет этого экземпляра мы и будем
менять при помощи ActionScript.
В
слое Buttons имеется пять круглых цветных кнопок.
К этим кнопкам мы присоединим скрипты,
изменяющие цвет волос клоуна.
-
Откройте панель Действия, выделите красную
кнопку и введите следующий скрипт:
on (release) {
hairColor = new Color(hair);
hairColor.setRGB(0xCC0000);
}
Этот скрипт дает Flash указание, когда кнопка
будет отпущена после нажатия, создать новый
объект Color с именем
hairColor и связать этот объект с
экземпляром фильма-символа
hair. Во второй
строке используется метод
setRGB() для изменения цвета объекта
Color (а следовательно, экземпляра
hair), на CC0000 –
это шестнадцатеричное значение соответствует
красному цвету, как раз такому, каким окрашена
кнопка.
-
Выделите желтую кнопку и присоедините к ней
этот скрипт:
on (release) {
hairColor = new Color(hair);
hairColor.setRGB(0xFFCC00);
}
Скрипт идентичен тому, что мы присоединили к
красной кнопке, изменился лишь код цвета в
методе setRGB() –
на сей раз значение соответствует желтому цвету.
-
Выделите зеленую кнопку и присоедините к ней
скрипт:
on (release) {
hairColor = new Color(hair);
hairColor.setRGB(0x009900);
}
Цвет зеленой кнопки кодируется как 009900, и это
значение использовано на этот раз в методе
setRGB().
-
Выделите синюю кнопку и присоедините к ней
скрипт:
on (release) {
hairColor = new Color(hair);
hairColor.setRGB(0x336699);
}
То
же, что и для трех предыдущих кнопок – создается
объект Color, который меняет цвет экземпляра
фильма-символа hair.
Что ж, давайте проверим нашу работу!
-
Выполните команду Управление > Проверить
фильм (Control > Test Movie). Нажмите каждую
из четырех кнопок; наблюдайте, как меняется
цвет.
Каждый раз при щелчке на какой-либо из кнопок
Flash создает новый объект типа
Color и связывает
его с экземпляром фильма-символа
hair. Затем
используется метод setRGB()
объекта Color, и цвет этого экземпляра
изменяется.
Примечание В этом упражнении объект Color
заново создается каждой кнопкой, хотя на самом
деле это излишне – объект, будучи однажды создан,
становится частью монтажного стола. Любые
дальнейшие изменения этого объекта можно сделать
при помощи доступных ему методов.
А
теперь давайте запрограммируем случайный выбор
цвета волос клоуна.
-
Закройте тестовый фильм и вернитесь в среду
разработки. Выделите центральную, радужную,
кнопку и присоедините к ней скрипт:
on (release) {
R = random(256);
G = random(256);
B = random(256);
colorHexString = R.toString(16)+G.toString(16)+B.toString(16);
colorHex = parseInt(colorHexString,16);
hairColor = new Color(hair);
hairColor.setRGB(colorHex);
}
Во
Flash существует два способа программного
описания цвета: переменными
RGB (red,
green, blue – красный, зеленый, синий)
или в виде шестнадцатеричного числа. Существует
три отдельных переменных RGB, каждая из которых
может принимать числовые значения от 0 до 255.
Например, чистый красный цвет описывается
RGB-переменными так:
R=255, G=0, B=0. Соответствующее
шестнадцатеричное число, кодирующее тот же самый
цвет – FF0000. Смысл первых пяти строк этого
скрипта заключается в генерировании случайных
значений RGB и преобразовании их в
шестнадцатеричное число. Затем (в последней
строке скрипта) полученное число используется в
качестве параметра метода
setRGB().
Итак, в трех первых строках скрипта создаются
переменные R, G и
B, которые
получают случайные значения в диапазоне от 0 до
255. В следующей строке применен метод
toString() объекта
Number – для
преобразования десятичного числа в
шестнадцатеричное. Предположим, переменным R, G
и B были присвоены следующие случайные значения:
R = 45
G = 202
B = 129
Следующая строка скрипта гласит: следует
преобразовать значение R
в шестнадцатеричное, затем преобразовать его в
символьную строку, после этого сделать то же
самое с переменными G
и B. С помощью
оператора + преобразованные значения соединяются,
и в итоге переменная
colorHexString получает строковое
значение "2DCA81". Его необходимо преобразовать
в шестнадцатеричное число, чтобы использовать
как параметр метода
setRGB(). Для этого, как видите,
применена функция
parseInt().
Ну,
и в последних двух строках скрипта создается
новый объект Color, связанный с экземпляром
фильма-символа hair,
а затем применяется цвет, закодирован созданным
нами случайным числом.
Примечание Подобным образом можно
получить (генерировать) с помощью ActionScript
более 16 миллионов цветовых оттенков.
-
Выполните команду Управление > Проверить
фильм (Control > Test Movie), и нажмите
несколько раз радужную кнопку.
Как видите, цвет экземпляра фильма-символа
hair меняется
случайным образом! Вы можете даже модифицировать
эту "технологию", чтобы менялся случайным
образом лишь оттенок цвета – в определенном
диапазоне.
-
Закройте тестовый фильм и сохраните свою
работу как Clown2.fla.
Теперь вы знаете, как в любое время изменить
цвет любого экземпляра фильма-символа.
Расширение
интерактивных возможностей с применением объекта
key
Объект Key – очень полезный инструмент,
позволяющий отслеживать события клавиш (то есть,
взаимодействие пользователя с клавиатурой). С
помощью объекта Key вы сможете:
- Узнать,
не нажата ли в данный момент определенная
клавиша
-
Определить последнюю нажатую клавишу
- Получить
значение кода последней нажатой клавиши
- Создать
слушатель для отслеживания событий
клавиатуры
-
Определить, в каком состоянии находится та
или иная из клавиш-переключателей (например,
Caps Lock)
Объект Key – глобальный, а это значит, что вы не
можете создать несколько экземпляров его. Чаще
всего этот объект применяется для определения
нажатия той или иной клавиши. Синтаксис этой
операции таков:
Key.isDown(Key.TAB);
В
приведенной здесь строке используется метод
isDown() объекта
Key для определения нажатия на клавишу. Этот
метод возвращает результат
true либо
false. В качестве параметра метода
isDown() можно
указать либо имя клавиши в объекте Key, либо
числовой код этой клавиши. Например, для клавиши
Tab можно указать имя –
Key.TAB, либо число 9 – код этой клавиши
в таблице ASCII. Следующий скрипт эквивалентен
предыдущему:
Key.isDown(9);
В
следующем несложном упражнении мы будем
перемещать по экрану воздушный шар – с помощью
клавиатуры и объекта Key.
-
Откройте файл balloon1.fla из папки
Lesson04/Assets.
Фильм содержит два слоя: Background и Balloon. В
слое Balloon вы видите экземпляр фильма-символа,
изображающего воздушный шар. В следующем
упражнении мы присоединим действия к этому
фильму-символу.
-
Откройте панель Действия, выделите экземпляр
фильма-символа, изображающего воздушный шар
и введите такой скрипт:
onClipEvent (load) {
speed = 3;
}
К
концу этого упражнения мы запрограммируем
возможность перемещения шара при помощи
клавиш-стрелок. При каждом нажатии на клавишу
шар будет перемещаться в определенном
направлении. Этот же скрипт выполняется при
загрузке экземпляра фильма-символа и
устанавливает значение переменной speed, которое
будет определять, на сколько должен
переместиться шар при каждом нажатии на клавишу.
Наш скрипт устанавливает эту дистанцию равной
трем пикселям.
- Не
снимая выделения с экземпляра balloon,
введите после предыдущего скрипта следующий:
onClipEvent (enterFrame)
{
if (key.isDown(key.RIGHT)) {
_x += speed;
} else if (key.isDown(key.LEFT)) {
_x -= speed;
}
}
В
этом скрипте применен обработчик события
enterFrame,
который содержит условный оператор.
Key.RIGHT – это
ссылка на клавишу-стрелку "вправо", а
key.LEFT,
соответственно, "влево". Вот как происходит
выполнение скрипта. При нажатии на клавишу "вправо"
к текущей горизонтальной координате экземпляра
фильма-символа прибавляется значение
speed (шар
перемещается вправо). Если же клавиша-стрелка "вправо"
не нажата, то эта часть скрипта игнорируется и
выполняется следующая секция – если нажата
клавиша "влево", то из текущей горизонтальной
координаты экземпляра фильма-символа вычитается
значение speed (шар
перемещается влево).
- В
обработчик события enterFrame добавьте
следующий скрипт:
if (key.isDown(key.UP))
{
_y -= speed;
} else if (key.isDown(key.DOWN)) {
_y += speed;
}
Скрипт очень похож на предыдущий. Однако здесь
оператор if
проверяет нажатия на клавиши-стрелки "вверх" и "вниз".
В первой части этого оператора проверяется, не
нажата ли клавиша "вверх", и если это так, из
текущей вертикальной координаты экземпляра
фильма-символа вычитается значение
speed (шар
перемещается вверх). Если же нажата клавиша "вниз",
то к текущей вертикальной координате экземпляра
фильма-символа прибавляется значение
speed (шар
перемещается вниз).
-
Выполните команду Управление > Проверить
фильм (Control > Test Movie). С помощью
клавиш-стрелок управляйте перемещением
воздушного шара.
Условия, которые мы запрограммировали,
проверяются при каждом событии enterFrame, то
есть при смене кадра. Если обнаружено, что одна
из клавиш находится в нажатом состоянии, шар
перемещается в соответствующем направлении.
-
Закройте тестовый фильм и сохраните свою
работу как balloon2.fla.
Теперь вы знаете, как отслеживать нажатия на
клавиши, чтобы в результате что-то происходило.
Применений для этого множество – от
перелистывания страниц в слайд-шоу до создания
игр.
Работа с
объектами string и selection
Объект String – один из наиболее часто
используемых. Он располагает методами, удобными
при построении и модифицировании строк –
символьных последовательностей (в скриптах они
заключаются в кавычки), содержащими информацию,
понятную любому, кто умеет читать.
message = "No shoes,
no service!"
Эта строка скрипта создает переменную с именем
message, значением которой является строка. В
данном случае мы можем считать, что эта
переменная есть экземпляр объекта String – а
значит, мы можем манипулировать ее значением,
используя методы объекта String.
Рассмотрим несколько примеров.
Метод toUpperCase()
объекта String меняет все буквы строки на
заглавные. Например:
message =
message.toUpperCase();
Этот скрипт изменил переменную message, и теперь
он содержит строку "NO SHOES, NO SERVICE!".
Можно достигнуть и противоположного эффекта –
сделать все буквы строчными, для этого следует
применить метод
toLowerCase().
Заметим, что значение экземпляра текстового поля
(текст в этом поле) тоже рассматривается как
экземпляр объекта String. Так, если бы message
было именем экземпляра текстового поля, то
предыдущий скрипт следовало бы записать так:
message.text =
message.text.toUpperCase();
Есть ли тут какие-либо преимущества? На самом
деле, нет: все проекты разные, в одних случаях
предпочтительнее пользоваться переменной, в
других – именем текстового поля. Итак, экземпляр
объекта String можно создать одним из следующих
способов:
-
Использовать конструктор, например:
myNewStringObject =
new String("Hello");. Для обращения к
экземпляру объекта служит имя
myNewStringObject.
- Присвоить
переменной строковое значение. Для обращения
к экземпляру объекта используется имя
переменной.
- Создать
текстовое поле. Для обращения к экземпляру
объекта используется конструкция
имя-ТекстовогоПоля.text.
Большинство проектов в этой книге содержит
текстовые поля, так что вы, пожалуй, обнаружите,
что мы чаще всего используем последний вариант.
Еще один полезный метод объекта String –
indexOf() –
позволяет найти в строке определенный (первый
встретившийся) символ или последовательность
символов. В результате возвращается число –
индекс символа, то есть номер первого
встреченного в строке совпавшего символа. Первый
символ в строке имеет индекс 0, второй – индекс
1, и так далее. Если метод
indexOf() не
находит совпадения символа или группы символов,
то возвращается значение -1. Вот пример
использования метода
indexOf():
message.text = "No
shoes no service!";
firstS = message.text.indexOf("s");
Переменной firstS
будет присвоено значение 3 – именно таков индекс
первой встреченной в строке буквы s.
Порой может быть полезно определить число
символов в строке. Сделать это просто, поскольку
всякий экземпляр объекта String имеет такое
свойство, как длина –
length. Длина строки часто применяется
для проверки введенной пользователем в текстовое
поле информации. Скажем, вы хотите, чтобы
пользователь ввел в поле правильный почтовый
индекс; при этом вы знаете, что индекс должен
состоять из пяти символов. Тогда вы можете
создать несложный скрипт для проверки:
zipCode.text =
"27609";
zipLength = zipCode.text.length;
if (zipLength == 5) {
// Длина индекса верная
} else {
//Длина индекса неверна
}
В
первой строке задается текстовое значение,
отображаемое в текстовом поле
zipCode (мы
предполагаем, что его ввел пользователь). В
следующей строке создается переменная с именем
zipLength и ей
присваивается значение свойства
length экземпляра
zipCode.text – в
данном случае 5, поскольку именно столько
символов содержит поле
zipCode. Последняя часть скрипта –
оператор if,
который должен содержать один набор действий на
тот случай, если
zipLength равно 5, и другой набор на
случай, если это не так.
Объект Selection позволяет управлять различными
аспектами текстового поля, находящегося в фокусе,
в том числе выделенным текстом, получением и
установкой текущей позиции курсора и так далее.
Считается, что текстовое поле находится в фокусе,
если пользователь установил в него курсор. Если
ни одно из текстовых полей в фокусе не находится,
то объект Selection не существует.
Итак, щелкнув в текстовом поле, пользователь
устанавливает его в фокус. Однако вы можете
отвергнуть выбор пользователя при помощи метода
setFocus() – очень важная возможность, ведь в
каждый момент времени существует только один
объект Selection, и прочие его методы
применяются к полю, находящемуся в фокусе (в
следующем упражнении вы убедитесь, что далеко не
всегда можно положиться на то, что пользователь
выберет – и установит в фокус – нужное текстовое
поле).
И
еще об одном методе объекта Selection – он
позволяет выделить порцию текста динамически,
без участия пользователя. Этот метод (синтаксис
Selection.setSelection(param1, param2))
имеет два параметра: индекс символа, с которого
начинается выделение и индекс символа, которым
выделение заканчивается. Допустим, имеется
текстовое поле, содержащее текст "Derek is the
craziest person I know". Чтобы выделить слово
craziest (мы предполагаем, что поле находится в
фокусе), нужно написать так:
Selection.setSelection(13, 20);
В
этом упражнении мы создадим простенький
текстовый редактор, используя большую часть
методов объектов String и Selection.
-
Откройте файл wordProcessor1.fla из папки
Lesson04/Assets.
В
этом файле два слоя – Background и Buttons. Слой
Background содержит изображение окна текстового
редактора, а также текстовые поля. В слое
Buttons находятся четыре кнопки, расположенные в
верхней части окна редактора. На сцене три
текстовых поля. Самое большое, в центре,
представляет "текстовый документ". Имя
экземпляра этого поля –
inputField. Следующее поле, рядом с
кнопкой Find, называется
findField. При воспроизведении фильма
пользователь сможет ввести в это поле символ или
строку символов, с тем, чтобы они были найдены в
поле inputField.
Результат поиска будет отображен в третьем
текстовом поле, в нижней части окна – оно
называется status.
В этом же текстовом поле будут отображаться
результаты подсчета общего числа символов в
документе. К кнопкам в верхней части окна мы
присоединим различные скрипты, обеспечивающие
работу нашего текстового редактора.
-
Откройте панель действия, выделите кнопку
Uppercase (c большой буквой A) и введите
следующий скрипт:
on (release) {
inputField.text = inputField.text.toUpperCase();
}
Flash интерпретирует этот скрипт так: "При
отпускании этой кнопки перевести содержимое
текстового поля
inputField в верхний регистр". Иными
словами, после нажатия этой кнопки все буквы в
поле inputField
станут заглавными.
-
Выделите кнопку Lowercase (c маленькой a) и
введите в панели Действия следующий скрипт:
on (release) {
inputField.text = inputField.text.toLowerCase();
}
Этот скрипт похож на предыдущий; отличие в том,
что в данном случае все символы в текстовом поле
inputField
переводятся в нижний регистр (делаются строчными).
-
Выделите кнопку Character Count (c надписью
"123") и введите следующий скрипт:
on (release) {
status.text = "В документе " + inputField.text.length + " символов.";
}
При выполнении этого скрипта в текстовом поле
status будет
отображено сообщение. Сообщение строится
динамически. Определяется свойство
Length текстового
поля inputField и
вставляется в середину сообщения, между словами
"В документе" и "символов". Если документ
содержит 50 символов, сообщение будет выглядеть
так: "В документе 50 символов".
-
Выделите кнопку Find (с изображением лупы) и
введите следующий скрипт:
on(release) {
result = inputField.text.indexOf(findField.text);
if(findField.text != "" && result >= 0) {
status.text = "Первый такой набор начинается с символа номер
" + result;
Selection.setFocus("_root.inputField");
Selection.setSelection(result, result + findField.text.length);
} else {
status.text = "Такой набор символов не найден.";
}
}
Этот скрипт – самый сложный в этом упражнении.
Первая строка присваивает значение переменной
result при помощи
метода indexOf()
объекта String. Скрипт ищет в текстовом поле
inputField символ
или символы, введенные в поле
findField и выдает
индекс первого символа найденной комбинации.
Этот индекс и становится значением переменной
result. Если же
такая комбинация символов не найдена,
result получает
значение –1.
В
следующей части скрипта применен оператор
if, выполняющий
один из двух наборов действий в зависимости от
того, выполнено ли условие (точнее, даже два).
Если значением поля
findField не является пустая строка (это
чтобы удостовериться, пользователь ввел хоть
что-нибудь в это поле) и значение
result больше или
равно 0 (так будет, если введенная комбинация
символов найдена в документе), выполняются три
следующих действия. Если же хотя бы одно из
условий не выполнено, оператор переходит к
секции else, и
тогда выполняется только одно действие,
отображающее в поле
status сообщение "Такой набор символов не
найден".
Предположим, что оба условия выполнены и
посмотрим, что же происходит в этом случае.
Выполняются три действия из первой секции
оператора if.
Первое действие отображает в текстовом поле
status сообщение,
создаваемое динамически – к строке "Первый такой
набор начинается с символа номер" добавляется
значение result.
Если, к примеру, result
равно 7, получится сообщение "Первый такой набор
начинается с символа номер 7". Следующие два
действия используют методы объекта Selection,
чтобы выделить в поле
inputField найденную комбинацию символов.
Как вы помните, текстовое поле должно получить
фокус, прежде чем к нему можно будет применить
методы объекта Selection. Поскольку мы хотим
выделить текст в поле
inputField, мы, с помощью следующей
строки, устанавливаем фокус на это поле:
Selection.setFocus("_root.inputField");
В
следующей строке скрипта с помощью другого
метода объекта Selection выделяется порция
текста в поле, имеющем фокус. Вот эта строка:
Selection.setSelection(result, result +
findField.text.length);
Мы
использовали два динамически полученных значения
в качестве параметров этого метода, чтобы
указать начало и конец выделения. Мы хотим,
чтобы выделение начиналось с первого найденного
символа, поэтому в качестве стартовой точки
выделения используем значение
result. Конечная
точка выделения вычисляется путем сложения
значения result и
значения свойства length
текстового поля findField.
Как это все работает? Предположим, мы ввели в
поле inputField
текст "У меня есть собака". Затем вы ввели "собака"
в поле findField и
нажали кнопку Find. При выполнении скрипта
result получит
значение 12 (слово "собака" начинается с символа
12), а
findField.text.length будет иметь
значение 6 (текст в этом поле состоит из шести
символов). С этими значениями строка скрипта
выглядела бы так:
Selection.setSelection(12, 12+6);
или
Selection.setSelection(12, 18);
В
результате в текстовом поле
inputField будут
выделены символы с 12 по 18 – они и составляют
слово "собака".
-
Выполните команду Управление > Проверить
фильм (Control > Test Movie).
Введите что-нибудь в поле
inputField и попробуйте нажать кнопки
Uppercase и Lowercase. Нажмите кнопку Count
Characters, чтобы подсчитать число символов в
документе. Наконец, попробуйте использовать
функцию поиска, введя символ или несколько в
поле findField и
нажав кнопку Find.
-
Закройте тестовый фильм и сохраните свою
работу в файле wordProcessor2.fla.
Как видите, использовать методы объектов String
и Selection совсем несложно – мы думаем, вы
будете очень часто применять их для проверки и
форматирования данных строкового типа.
|