я

ИСПОЛЬЗОВАНИЕ

ЕДИНСТВЕННАЯ НЕОБХОДИМАЯ КНИГА ПО FLASH MX

Майкл Лора

ИСПОЛЬЗОВАНИЕ

Macromedia®

Flash™ MX

USING

Macromedia®

MX

Michael Laura et

A Division of Macmlllan Computer Publishing, USA

201 W. 103rd Street

Indianapolis, Indiana 46290

ИСПОЛЬЗОВАНИЕ

Macromedia®

Flash™ MX

Майкл Гурвиц, Лора Мак-Кейб

Москва • Санкт-Петербург • Киев

2003

32.973.26-018.2.75

Г95

Издательский дом "Вильяме"

Зав. редакцией

Руководитель проекта

Перевод с английского и редакция Скороход

По общим вопросам обращайтесь в Издательский дом "Вильяме" по адресу:

info@williamspublishing.com, http://www.williamspublishing.com

Майкл, Лора.

Г95 Использование Macromedia Flash MX. Специальное Пер. с англ. —

Издательский дом "Вильяме", 2003. — 704 ил. — тит. англ.

ISBN 5-8459-0493-5 (рус.)

Данная книга представляет собой исчерпывающее и профессионально написанное

руководство по Flash MX. Эта книга поможет вам в самом начале пути освоения Flash MX

и останется ценным источником информации, даже когда вы станете настоящим масте-

ром. На компакт-диске, прелагаемом к книге, содержатся файлы примеров, множество

полезных программ, рассматриваемых в книге, а также Web-ссылки, посвященные дан-

ному вопросу. Использование Macromedia Flash MX — это именно та книга, которая будет

полезна любому профессиональному Web-дизайнеру, разработчику и аниматору.

ББК 32.973.26-018.2.75

Все названия программных продуктов являются зарегистрированными торговыми марками соответ-

фирм.

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

было форме и какими бы то ни было средствами, будь то электронные или механические, включая фо-

токопирование и запись на магнитный носитель, если на это нет письменного разрешения издательства

Que Corporation.

Authorized translation from the English language edition published by Computer Publishing

Copyright © 2003.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,

electronic or mechanical, including photocopying, recording or by any information storage retrieval system,

without permission from the Publisher.

Russian language edition published by Williams Publishing House according to the Agreement with

Enterprises International, Copyright © 2003.

ISBN 5-8459-0493-5 (рус.) © Издательский дом "Вильяме", 2003

ISBN 0-7897-2762-5 © Que 2003

ОГЛАВЛЕНИЕ

Введение 24

ЧАСТЬ I. СРЕДА И ИНСТРУМЕНТЫ FLASH 27

Глава Что нового во Flash MX 29

Глава 2. Интерфейс Flash 39

Глава 3. Рисование во Flash

Глава 4. Использование растровых изображений во Flash

Глава 5. Работа с текстом 97

ЧАСТЬ II. АНИМАЦИЯ И ЗВУК

Глава 6. Символы, экземпляры и элементы библиотек

Глава Анимация во Flash

Глава 8. Использование звука

Глава 9. Кнопки, меню и поля ввода данных

Глава 10. Интеграция видео

ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ С ПОМОЩЬЮ

ACTIONSCRIPT 197

Глава Знакомство с ActionScript

Глава Управление переменными, данными и типами данных

Глава Использование операторов 245

Глава Работа с данными: использование предложений 279

Глава Объединение предложений в функции 295

Глава Взаимодействие, события и установление последовательности 329

Глава 17. Демонстрация мощи видеоклипов 357

Глава Процедура рисования с помощью ActionScript 395

ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Глава 19. Использование встроенных базовых объектов 419

Глава 20. встроенных объектов фильмов 467

Глава Упаковка данных и функций с помощью пользовательских объектов

Глава 22. Компоненты 537

Глава 23. Использование обучающих взаимодействий 559

Глава 24. Коллективное использование ActionScript 577

Глава 25. Тестирование, отладка и устранение проблем 589

ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ С ПОМОЩЬЮ FLASH 601

Глава 26. Локальная связь 603

Глава 27. Взаимосвязь с сервером 625

Глава 28. XML-данные 637

ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH 653

Глава 29. Печать Flash-фильма 655

Глава 30. Оптимизация, публикация и экспортирование фильмов 669

ПРИЛОЖЕНИЕ А. Улучшение доступности Flash 688

Предметный указатель 691

ОГЛАВЛЕНИЕ

СОДЕРЖАНИЕ

Об авторах 21

О соавторах

Посвящение 22

Благодарности Майкла 22

Благодарности Лоры 23

Введение 24

Что нового во Flash MX 24

Для кого предназначена эта книга 25

Как пользоваться книгой 25

Условные обозначения, принятые в книге 26

ЧАСТЬ I. СРЕДА И ИНСТРУМЕНТЫ FLASH 27

Глава 1. Что нового во Flash MX 29

Усовершенствование интерфейса 29

Группы панелей 29

Инспектор свойств 30

Новые инструменты и элементы меню 30

Инструмент Free Transform 30

Команды Break Apart и Distribute to Layers 30

Команда Snap to Pixels

Папки слоев 31

Шаблоны 32

Компоненты 32

Поддержка видео 32

Усовершенствование сценариев 34

Усовершенствованная объектная модель и модель событий 34

Маскирование по сценарию 35

Программное рисование 35

Загрузка внешних изображений и звука 35

Усовершенствованный редактор ActionScript 36

Совместимость с Flash 5 36

Доступ к содержимому 36

Возможные проблемы 37

Глава 2. Интерфейс Flash 39

Наборы панелей 39

Инспектор свойств 40

Компоновка панелей 41

Задание атрибутов документа 41

Временная шкала 42

Кадры 42

Ключевые кадры 42

Слои и папки слоев 43

Калькирование и редактирование нескольких кадров 44

Панель инструментов 45

Подраздел Tools

Подраздел View 49

Подраздел Colors 50

Клавиши быстрого доступа 50

Настройка клавиш быстрого доступа

Библиотека 52

Создание общих библиотек 52

Проводник фильма 53

Задание параметров Flash 53

Общие настройки

Параметры редактирования 55

Параметры буфера обмена 57

Настройка предупреждающих сообщений 57

Параметры редактора ActionScript 58

Возможные проблемы 58

Flash за работой: создание идеального интерфейса Flash MX 59

Глава 3. Рисование во Flash

Знакомство с векторной графикой ' 61

Использование инструментов рисования 62

Инструмент Line 63

Инструмент Pencil 63

Инструменты Oval и Rectangle 63

Инструмент Реп 63

Создание прямых отрезков 64

Создание криволинейных сегментов 64

Корректировка анкерных точек 65

Корректировка сегментов 66

Инструмент Brush 67

Редактирование и корректирование изображений 68

Использование инструментов Arrow и Subselection 68

Выпрямление и сглаживание 68

Оптимизация кривых 69

Работа со штрихами 69

Использование заливки 72

Заливка чистым цветом 72

Градиентное заполнение: линейное и радиальное 73

Растровое изображение 74

Стирание 75

Использование вспомогательных элементов компоновки 76

Сетки, направляющие и направляющие слои 76

Панель Align 77

Привязка 78

Создание масок 78

Возможные проблемы 79

Flash за работой: насколько большим получится изображение 79

Глава 4. Использование растровых изображений во Flash

Импортирование растровых изображений

Подготовка растровых изображений к импортированию 83

Трассировка растровых изображений 87

8 СОДЕРЖАНИЕ

Оптимизация трассированных изображений 90

Разбивка растровых изображений 92

Сжатие растровых изображений 93

Возможные проблемы 94

Flash за работой: анимация растровых изображений 95

Глава 5. Работа с текстом 97

Text 99

Инспектор свойств 100

Атрибуты символов

Выбор шрифта и кегля 101

Направление текста 102

Кернинг и межзнаковый интервал 102

Положение символа 103

Атрибуты абзаца 103

Выравнивание 104

Отступы, междустрочный интервал и поля 104

Параметры текста 105

Вводимый текст 105

Динамический текст 106

Параметры форматирования текста 107

Внедренные и встроенные шрифты 108

Редактирование и преобразование текста

Разбивка текста

Преобразование текста

Эффективные приемы работы с текстом

Возможные проблемы 113

Flash за работой: копирование текстовых полей

АНИМАЦИЯ И ЗВУК 115

Глава 6. Символы, экземпляры и элементы библиотек

Понятие символов 117

Графические символы

Кнопки

Видеоклипы

Создание символов

Регистрация 120

Преобразование в символ 122

Редактирование символов 123

Редактирование на месте

Редактирование в новом окне

Режим редактирования символов 127

Редактирование точек регистрации

Экземпляры 129

Изменение свойств экземпляра 129

Замена символов 131

Имена символов 132

Библиотека 132

Возможные проблемы 134

Flash за работой: вложение символов 135

СОДЕРЖАНИЕ

Глава 7. Анимация во Flash

Знакомство с анимацией

Кадры и ключевые кадры 138

Добавление, удаление и копирование кадров

Управление ключевыми кадрами 140

Частота смены кадров 140

Создание промежуточных отображений 141

Промежуточное отображение движения

Направляющие движения 143

Регулировка 147

Калькирование 148

Создание промежуточных отображений с изменением формы 149

Указатели формы 151

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

Мультипликация во Flash 152

Создание эффекта панорамы 152

Циклы символов 153

Основные правила при создании анимации 153

Возможные проблемы 154

Flash за работой: упрощение анимации 155

Глава 8. Использование звука

Знакомство со звуком 157

Подготовка звука для Flash

Импортирование звука 160

Синхронизация звуков 161

Что первично? Звук против анимации

Параметры синхронизации 162

Редактирование звука 163

Управление звуком 165

Ключевые кадры 165

Связывание и объект Sound 166

Оптимизация звука 167

ADPCM 168

МРЗ-сжатие 169

Возможные проблемы 169

Flash за работой: отключение звука 170

Глава 9. Кнопки, меню и поля ввода данных

Интерактивность Flash 173

Кнопки 174

Простые кнопки 174

Сложные кнопки 178

Меню 180

Структурирование документов с помощью временной шкалы

Свойства Track as Button и Track as Menu Item

Использование компонентов 182

Добавление компонентов 182

Редактирование компонентов 184

Возможные проблемы 184

Flash за работой: команда Open as Library

10 СОДЕРЖАНИЕ

Глава 10. Интеграция видео 187

Видео во Flash 187

Импортирование видео 188

Внедренное и связанное видео 189

Параметры сжатия кодека Sorenson Spark

Работа с импортированным видео 191

Управление воспроизведением видео 192

Возможные проблемы 195

Flash за работой: интерактивность видео 195

ЧАСТЬ РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ С ПОМОЩЬЮ

ACTIONSCRIPT 197

Глава Знакомство с ActionScript

Добавление интерактивности с помощью ActionScript 199

Доступ к панели Actions 200

Использование панели Actions 200

Выбор действий для кадра или объекта 200

Обычный и экспертный режимы 202

Сокрытие и отображение списка действий 204

Знакомство с объектно-ориентированными языками 204

Три кита: повторное использование и достижимость 206

Удобочитаемость 206

Установка интервалов, отступов и применение прописных букв 206

Добавление комментариев к сценарию 207

Создание удобочитаемых имен 208

Упрощение, стандартизация и оптимизация кода 208

Повторное использование: расчленение кода на модули 208

Достижимость: систематизация и централизация кода

Систематизация данных и функций с помощью видеоклипов

Использование временной шкалы для систематизации кода

Поиск кода с помощью панели Movie Explorer 212

Возможные проблемы 213

Flash за работой: удобочитаемый, многократно используемый, достижимый код

Глава 12. Управление переменными, данными и типами данных

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

Назначение значений переменных 218

Где объявлять переменные

Когда не нужно централизовать код 219

Как систематизировать переменные в основной временной шкале 220

Использование видеоклипов для систематизации переменных 220

Использование объектов для систематизации переменных

Правила присвоения имен переменным (и другим элементам) 223

Группирование данных по типам 225

Девять типов данных ActionScript 225

Мощь чисел 226

Строки

Управление и принятие решений с помощью булевых данных 229

Моделирование области действия задачи с помощью объектов

Массив 230

Функция

Неявное и явное преобразование данных 233

СОДЕРЖАНИЕ 11

Явное преобразование типов данных 236

Преобразование в число 236

Преобразование в строку

Неявное преобразование типов данных

Числа и строки против числовых и строковых литералов

Литералы объектов и массивов 240

Использование типов данных null и undefined 240

Возможные проблемы 241

Flash за работой: детектирование версии 242

Глава 13. Использование операторов 245

Операнды, выражения и предложения 245

Определение взаимосвязей простых данных с помощью выражений 248

Старшинство, ассоциативность и группирование операторов 249

Арифметические операторы 250

Специальное значение NaN ("He число") 250

Положительное и отрицательное 250

Сложение и вычитание 251

Полиморфный оператор + 252

Перегруженный оператор - 252

Умножение и деление 253

Деление по модулю 253

Побитовые операторы 254

Побитовые логические операторы 255

Операторы со сдвигом бита 259

Присваивание и сложное присваивание 260

Операторы сравнения 262

Операторы равенства 262

Автоматическое преобразование типов данных для сравнения 263

Более не использующиеся операторы сравнения версии Rash 4 264

Логические (булевы) операторы 266

Условный оператор 268

Оператор "запятая" 270

Именованные операторы

Оператор new

Оператор typeof

Оператор instanceof 272

Оператор delete 272

Оператор void 272

Другие операторы 273

Доступ к свойствам объекта: оператор "точка" 273

Оператор 273

Оператор "круглые к функции" 274

Возможные проблемы 274

Flash за работой: применение побитовых операторов к игре в крестики-нолики 275

Глава 14. Работа с данными: использование предложений 279

Образование автономных предложений и управляющих блоков 279

Образование автономных предложений 280

Объединение предложений в управляющие блоки

Управление ходом выполнения программы 283

Принятие решений с помощью условных предложений и ключевого слова switch 284

12 СОДЕРЖАНИЕ

Предложение if 284

Предложение 284

Вложение условных предложений 285

Предложение switch/case 285

Предложение 286

Повторение действий с помощью циклов 287

Предложение while 287

Предложение do-while 288

Предложение for 288

Предложение 289

Возможные проблемы 290

Flash за работой: использование цикла for для создания списка 290

Глава 15. Объединение предложений в функции 295

Улучшение кода с помощью функций 295

Создание функций 296

Объявление функций 296

Использование функций без имен: функциональные литералы 297

Вызов функций 298

Использование ключевого слова var для создания локальных переменных внутри

функций 298

Ключевое слово var не используется вне функций 299

Доступ к переменным временной шкалы внутри функции 299

Передача данных в функции с помощью аргументов 300

Передача аргументов по значению и по ссылке 300

Объект arguments 301

Извлечение результатов с помощью возвращаемых значений 305

Функции как классы: функции-конструкторы

Создание объектов с помощью оператора new 307

Свойство prototype 308

Назначение методов для класса 309

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

Использование оператора new для создания цепочек наследования

Функции как данные 316

Методы и 316

Явный обзор данных 319

Ограничения жесткого кодирования 319

Явный обзор данных с помощью относительных обращений

Явный обзор данных с помощью ключевого слова this 320

Автоматический обзор данных 322

Возможные проблемы 325

Flash за работой: расчет факториалов — пример рекурсии 326

Глава 16. Взаимодействие, события и установление последовательности 329

Инициирующее действие: временная шкала и обработчики событий 329

Создание сценариев на основе временной шкалы 330

Создание сценариев на основе событий

Расширение обработки событий во Flash MX 333

Системные события и события ввода пользователем 334

Регистрация приемников 336

Обзор данных и использование ключевого слова this с обработчиками событий

Явное обращение к обработчикам событий 338

СОДЕРЖАНИЕ 13

Обработчики событий и фокусировка 339

Отключение и удаление обработчиков событий 340

События, связанные с кнопками 341

События, связанные с нажатием клавиш 343

События, связанные с мышью 345

События, связанные с видеоклипами 346

События, связанные с выбором 350

События, со звуком 351

Событие onResize, связанное с рабочим полем

События, связанные с текстовыми полями 352

Установление последовательности действий с помощью порядка выполнения 353

Возможные проблемы 354

Flash за работой: универсальные процессоры событий Flash 354

Глава 17. Демонстрация мощи видеоклипов 357

Представление видеоклипов 357

Новые свойства видеоклипов во Flash MX 363

Свойство enabled 364

Свойство focusEnabled 364

Свойство 365

Свойство tabChildren 365

Свойство tabEnabled 366

Свойство 366

Свойство 366

Свойство 366

Создание и удаление видеоклипов 367

Создание видеоклипов 367

Удаление видеоклипов 369

Загрузка и выгрузка внешнего содержимого 369

Загрузка внешних или JPEG-файлов 369

Выгрузка внешнего SWF- или JPEG-файла

Управление визуальным порядком наложения видеоклипов 372

Уровни визуального порядка наложения 373

Использование исходных объектов для задания свойств новых видеоклипов 377

Использование метода для выделения нового видеоклипа в

подкласс 378

Знакомство с методом registerClass() 379

Совместное использование методов и 379

Использование метода с видеоклипом, созданным вручную 380

Использование свойства вместо метода 380

Как решить проблему передачи параметров при использовании метода

registerClassO 381

Проверка перекрытия видеоклипов 382

Методы видеоклипов и 383

Уменьшение "пропусков" перекрывающихся областей при тестировании с

помощью невидимых дочерних видеоклипов 384

Создание иллюзии идеального совпадения 384

Выполнение нескольких проверок на наличие совпадений в каждом кадре 385

Повторный вызов функции с помощью глобальной функции 385

Определение фактического интервала 386

Остановка и "сброс" повторяющегося вызова функции 386

Перетаскивание видеоклипов 387

14 СОДЕРЖАНИЕ

Предложения и 387

Параметры метода 387

Свойство видеоклипа _droptarget 389

Динамические маски , 389

Возможные проблемы 391

Flash за работой: игра "счастливый случай" 392

Глава 18. Процедура рисования с помощью ActionScript 395

Знакомство с методиками рисования во Flash MX 395

Использование объектов для отслеживания операций рисования 398

Рисование линий и кривых 399

Рисование линий 399

Рисование кривых 402

Оптимизация функций рисования кривых 405

Использование сплошной заливки 406

Работа с градиентной заливкой 407

Работа с тремя градиентными массивами 408

Матрица преобразования 409

Краткий формат матрицы преобразования

Использование традиционной матрицы преобразования 3x3 410

Понимание операций с 3x3 412

Возможные проблемы 414

Flash за работой: рисование круга, состоящего из восьми сегментов 415

Определение координаты х контрольной точки

Определение координаты у контрольной точки 415

ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT 417

Глава 19. Использование встроенных базовых объектов 419

Знакомство со встроенными объектами 419

Базовые объекты 420

Класс Array 420

Интерфейсные классы: Boolean, Number и String 430

Класс Date 436

Класс Function 441

Класс Object

Объект Math 452

Возможные проблемы 464

Flash за работой: удивительные массивы 465

Глава 20. Использование встроенных объектов фильмов 467

Объекты и классы, связанные с фильмами 467

Объект Accessibility 469

Класс Button 469

Объект 470

Класс Color 470

Объект Key 473

Объект Mouse 476

Объект Selection 476

Класс Sound 477

Объект Stage

Объект System 484

Классы TextField и TextFormat 484

СОДЕРЖАНИЕ 15

Ценные мультимедийные объекты: Video, Microphone, Camera 495

Сетевые соединения в режиме реального времени: объекты NetConnection и

501

Класс LocalConnection 507

Возможные проблемы

Flash за работой: полная автоматизация игры в крестики-нолики с помощью класса

LocalConnection

Глава Упаковка данных и функций с помощью пользовательских объектов

Пользовательские объекты 515

Размещение локальных свойств в иерархии наследования

объекта prototype существующего класса при использовании оператора

new 517

Подмена наследуемых свойств 520

Подмена свойств в отдельных экземплярах 522

Отсутствие подмены в глобальных объектах 522

Переписывание наследуемых свойств 522

Доступ к с помощью оператора super 523

Доступ к методу с помощью оператора super 523

Получение локальных свойств надкласса в экземплярах подкласса 524

Свойство constructor 524

Создание объектов-потомков с помощью свойства constructor 525

Использование свойства constructor для преобразования элементарных типов

данных в объекты 526

Использование функции-конструктора для "безопасного" хранения 527

Создание иерархии классов с помощью свойства 528

Использование свойства constructor для исполнения функций-конструкторов 529

Создание свойства в прототипе подкласса

Разработка и подклассов: связи типа "являться" и "иметь" 532

Связь типа "являться" 532

Связь типа "иметь" 532

Прояснение сложных случаев 532

Детализация иерархий классов: абстракция и конкретизация 532

Возможные проблемы 534

Глава 22. Компоненты 537

Использование встроенных компонентов 537

Компонент ComboBox 538

Компонент ListBox 539

Компонент CheckBox 540

Переключатели 541

Нажимные кнопки 542

Прокручивающееся текстовое поле 542

Полоса прокрутки 543

Использование панели Library с компонентами 544

Редактирование оболочек 545

Создание новых компонентов 545

Начало создания собственного компонента 545

Определение класса 545

Определение свойств компонентов 548

Добавление собственной пиктограммы 550

Задание идентификатора связи 550

Тестирование 550

16 СОДЕРЖАНИЕ

Установка компонента на панели Components

Создание пользовательского интерфейса 553

Создание фильма текущего просмотра . 556

Возможные проблемы 558

Глава 23. Использование обучающих взаимодействий 559

Взаимосвязи и шаблоны 559

Использование обучающих взаимодействий 560

Добавление параметров 562

Добавление взаимодействий 563

Добавление взаимодействия на шкалу 566

Использование перетаскивания 567

Конфигурирование обучающего взаимодействия Drag and Drop 567

Добавление объектов перетаскивания и целевых элементов 568

Удаление объектов перетаскивания 568

Заполнение бланка 569

Конфигурирование взаимодействия Fill in the Blank 569

Активные объекты 570

Конфигурирование обучающего взаимодействия Hot Object 570

Добавление и вариантов активных объектов 570

Активные области 570

Множественный выбор 571

Добавление вариантов множественного выбора

Истина или ложь 571

Конфигурирование обучающего взаимодействия True or False

Обратная связь, отслеживание знаний и навигация 572

Задание параметров обратной связи 572

Задание параметра отслеживания знаний 572

Основная структура сценариев и компонентов обучающих взаимодействий 573

Возможные проблемы 574

Flash за работой: использование системы LMS 574

Подготовка данных при работе с системой, совместимой с 575

Подготовка данных при работе с системой, совместимой со SCORM . 576

Глава 24. Коллективное использование ActionScript 577

Библиотеки коллективного использования 577

Сеансовые элементы коллективного использования 578

Элементы коллективного использования, созданные на этапе разработки 579

Удаленный доступ во Flash 580

Java-классы и удаленный доступ во Flash

Классы ActionScript и удаленный доступ во Flash 582

Выполнение служебных обращений к серверу из Flash-фильма 582

Включение внешнего кода ActionScript 583

Возможные проблемы 584

Flash за работой: функция LocalConnection 585

Создание локальной связи 585

Отправление сообщений между доменами 587

Глава 25. Тестирование, отладка и устранение проблем 589

Как избежать наиболее распространенных проблем 589

Многоплатформенное тестирование

Эффективные процедуры тестирования

Оптимизация 592

СОДЕРЖАНИЕ 17

Тестирование производительности загрузки 592

Поиск и устранение неполадок в коде 593

Использование отладчика 594

Контрольные точки и по ним 594

Окно Output 596

Средства дистанционной отладки 598

отладчика удаленным образом 599

До сих пор остались проблемы? 599

ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ С ПОМОЩЬЮ FLASH 601

Глава 26. Локальная связь 603

Управление броузером 603

Использование команды getURL 603

окна и фреймы 604

Создание новых окон броузера 605

Использование специальных целевых объектов 605

Вызов функций JavaScript 605

Проблемы, связанные с JavaScript 606

Изменение дескриптора OBJECT/EMBED 606

Передача сообщений из Flash в броузер 608

Передача сообщений из броузера во Flash 609

Альтернативные методики 612

Задание вопросов с помощью JavaScript 612

Создание пользовательских окон 613

Управление проектором 614

Модификация окна 614

Сокрытие контекстного меню 615

Другие команды 615

Взаимосвязь с программой Director

Взаимосвязь 616

Взаимосвязь 617

Команды Lingo 619

Хранение информации локально 620

Взаимосвязь Flash-фильмов 622

Возможные проблемы 622

Глава 27. Взаимосвязь с сервером 625

Загрузка текстовых данных 625

Загрузка данных с помощью объекта 625

Использование объекта LoadVars 626

Старый способ загрузки переменных 627

Внедрение данных на HTML-страницу 628

Загрузка динамических данных 630

Отправление данных 631

Возможные проблемы 633

Flash за работой: отправление электронной почты из Flash 634

Глава 28. XML-данные 637

Знакомство с XML 637

Основы XML 638

Использование XML во Flash 639

Синтаксический анализ XML-данных 639

18 СОДЕРЖАНИЕ

Преобразование текста в XML 640

Исследование XML-данных 640

Облегчение обращения к L 642

Обращение к атрибутам 642

Создание XML-данных 643

Создание и модификация атрибутов 644

Импортирование XML-документов 644

Отправление XML-документов на сервер 646

646

Возможные проблемы 647

Flash за работой: простое XML-приложение 647

ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH 653

Глава 29. Печать Flash-фильма 655

Печать содержимого Flash 655

Подготовка файлов к печати 656

Назначение меток кадров 656

Отключение печати 657

Изменение распечатываемого фонового цвета 658

Определение области печати 659

Создание кнопки Print 664

Возможные проблемы 667

Flash за работой: чернила 668

Глава 30. Оптимизация, публикация и экспортирование фильмов 669

Тестирование фильмов 669

Использование модуля Bandwidth Profiler 669

Использование отчета о размерах для оптимизации файлов 671

Оптимизация фильмов 671

Задание параметров публикации 673

Формат Flash 674

Формат HTML 676

Формат GIF 677

Формат JPEG 679

Формат PNG 680

Формат QuickTime 682

Экспортирование различных форматов файлов 684

Возможные проблемы 686

Flash за работой: использование именованных анкеров 686

ПРИЛОЖЕНИЕ А. Улучшение доступности Flash . 688

Правила доступности 688

Предметный указатель

СОДЕРЖАНИЕ 19

Майкл Гурвиц (Michael — сотрудник компании Late Night Design — работает с

методиками Flash, представляющими собой точку пересечения искусства, дизайна и техно-

логии. С 1985 года он написал ряд статей, которые посвящены компьютерным технологиям.

Майкл является президентом некоммерческой организации занимающейся приро-

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

нему по электронной почте или посетив Web-узлы

и

Лора Мак-Кейб (Laura McCabe) — независимый дизайнер. В настоящее время она прожи-

вает в Балтиморе, штат Мериленд, США. У Лоры разносторонние интересы: она прослушала

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

и, в конце концов, освоила Flash. В течение шести лет она работала в области Internet-

технологий и сотрудничала со многими клиентами, совершенствуя свои познания в области

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

ботками в области Flash можно познакомиться на коллективном узле Poems That Go, а с пер-

сональными работами — узле В свободное время Лора

занимается фотографией, редактированием, пишет статьи, время от времени катается по мо-

рю на байдарке и без устали читает самые разные книги.

О СОАВТОРАХ

Лон (Lon uk) — профессионал в сфере

информационных технологий, специализирующийся в области офисных и Internet-

приложений. На Web-узле ее компании разме-

щено гораздо больше информации, чем можно было бы поместить в эту книгу. Опыт и наработ-

ки в данной области позволяют Лон, помимо разработки узлов для клиентов, выступать в роли

консультанта и специалиста по устранению проблем, сотрудничая с крупными и мелкими ком-

паниями, стремящимися усилить свое присутствие в Internet или имеющими узлы, которые, по

их не в полной мере охватывают все необходимые возможности. Свято веря в то, что

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

Лон часто сотрудничает с компаниями, которые желают разработать свои Web-узлы и в процес-

се внедрения новых технологий нуждаются в совете профессионала. Будучи опытным специа-

листом в области обучения, Лон разрабатывает и пишет обучающие материалы по бизнесу и об-

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

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

Гэри (Gary является ведущим специалистом, основателем и вла-

дельцем компании CleverMedia, расположенной в Денвере, занимающейся разработкой ком-

пьютерных игр и мультимедиа. Ему принадлежит авторство названий пакетов Macromedia

Director и Macromedia Flash. Свою компанию CleverMedia Гэри основал несколько лет назад;

сегодня ей принадлежат четыре крупнейших Web-узла компьютерных игр, созданных на ос-

нове технологий Shockwave и Flash. Гэри живет в Денвере, штат Колорадо, с женой Дебби,

кошкой Люси и собакой Наташей. Помимо компьютеров и Internet он увлекается кемпингом,

кинематографом и научной фантастикой.

ПОСВЯЩЕНИЕ

Маме и папе, которые всегда со мной.

Майкл

Эту книгу я посвящаю маме и папе за их

постоянное воодушевление и поддержку.

Лора

БЛАГОДАРНОСТИ МАЙКЛА

Огромное спасибо всем, кто принимал участие в создании этой книги, в частности Кейт

Смолл (Kate Small), Сьюзен Хоббс (Susan Hobbs), Кэрол Боуэрс (Carol Bowers), Хатчин-

сону (Chuck Hutchinson) и Линн Баус (Lynn Baus) за редактирование текста, тщательный по-

иск и исправление моих ошибок, промахов и упущений. Чак является непревзойденным спе-

циалистом по редактированию и выискиванию ошибок.

Моему самому замечательному агенту Дэвиду (David Fugate) из компании

Waterside Productions за его бесценную работу по созданию и упрочению связей с Квебеком.

Ральфу создателю фильма f la

(глава 13 "Использование операторов"), который стал основой роликов f la и

f la, описанных в главе 20 "Использование встроенных объектов фильмов".

Адаму (Adam и Марку Льюису (Mark Lewis), соответственно

президенту и руководителю технического отдела компании Mass Transmit

transmit за ролик dropdownmenu. f la, описанный в главе 14 "Работа с данными:

использование предложений".

Робину Дебреуилу (Robin Debreuil) за фильм

(глава 16 "Взаимодействие, события и установление последовательности"),

являющийся аналогом "двойной панели" (глава 15 "Объединение предложений в функции"), и

за то, что он помог мне разобраться в объектно-ориентированном программировании.

Гэри Гросмену (Gary Grossman), ведущему специалисту коллектива разработчиков

Macromedia за функцию описанную в главе 15 "Объединение

предложений в функции".

Хелен Триоло (Helen Triolo) за ролики

. f la (глава 16 "Взаимодействие, события и установление последовательно-

сти") и f la (глава 19 "Использование встроенных базовых объектов").

Питеру Холлу (Peter Hall) за ролики f la (глава 17

"Демонстрация мощи видеоклипов") и f la (глава 18 "Процедура рисования

с помощью

Энди Холлу (Andy Hall) ролик la (глава 17

"Демонстрация мощи видеоклипов") и функцию (глава 18 "Процедура рисова-

ния с помощью ActionScript").

(Ric за ролики и

f la, описанные в главе 18 "Процедура рисования с помощью ActionScript", а также

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

Киту Питерсу (Keith Peters) com, com) ролики f la и

f la, описанные в главе 18 "Процедура рисования с помощью ActionScript".

Милли Маруани (Millie за ро-

лики и f la, описанные в главе 18 "Процедура рисования с

помощью

Фотиосу Бассайанису (Fotios Bassayannis) за великолепный ролик

описанный в разделе "Flash за работой" главы 19 "Использование встроенных

базовых объектов".

22 ОБ АВТОРАХ

Роберту Пеннеру (Robert Penner)

penner.com) за функцию (аналог описанную в главе 21

"Упаковка данных и функций с помощью пользовательских объектов".

БЛАГОДАРНОСТИ ЛОРЫ

Огромное спасибо всем, кто помогал в работе над моей частью книги: Трейси (Tracy

Kelly) и Крисси Рей Rey), Трампи за ролик, включенный в

главу 10 "Интеграция видео", сообществу Flash за их постоянное воодушевление и поддержку,

Франу (Fran) и Бобу Книсли (Bob за их поддержку и создание надлежащих условий для

работы, маме и Шарлотте МакЭнхилл (Charlotte McEnhill) за то, что они всегда были рядом, Го-

рацио (Horatio) из компании за потрясающее обслуживание при сбоях жесткого

диска моего компьютера. Отдельная благодарность Кейт Линн Баус и всей группе из

Квебека, в которую входят также Сьюзен Кэрол Боуэрс и Чак Хатчинсон.

ОБ АВТОРАХ 23

ВВЕДЕНИЕ

Macromedia Flash MX— последняя версия средства разработки для надстройки Flash

Player, которая в настоящее время является основной надстройкой данного рода и установле-

на в броузерах 98% пользователей Web.

Технология Flash развивается с 1996 года как инструмент создания интерактивной век-

торной анимации для Web. Основной "ударной силой" Flash является возможность создания

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

при этом высокую степень интерактивности.

Помимо этого, Flash (особенно после появления Flash MX) является многофункциональ-

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

XML, интеграцию видео и аудио, использовать предварительно встроенные шаблоны, проце-

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

жиме реального времени. Все эти операции во Flash выполняются под управлением языка

сценариев похожего на язык JavaScript.

Большинство коллективов, работающих с Flash, в настоящее время делятся на две группы:

одни работают непосредственно с ActionScript, а другие — с графическим Доступ

к базам данных и работа с динамическим содержимым является отдельным направлением; точ-

но так же, как и имеется отдельная "ветвь" технологии Flash для персональных цифровых асси-

стентов (PDA). В настоящее время Flash превратилась в столь широкую и разнообразную среду,

что редко можно найти индивидуума, равно хорошо знакомого со всеми ее возможностями.

В настоящее время компания Macromedia предлагает целое семейство продуктов MX,

которые группируются в пакет Macromedia Studio MX. В его состав входят хорошо известные

обновленные версии продуктов, такие как Dreamweaver MX, Fireworks MX и ColdFusion MX, a

также новая разработка для серверов потокового аудио и видео — Flash Communication Server.

Macromedia стремится создать как инструментальные средства, так и платформы, предназна-

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

Что нового во FLASH MX

Помимо простого "расширения", во Flash MX увеличена "глубина" программы. Это дос-

тигнуто с помощью множества функций, усовершенствующих и без того большие возможно-

сти программы. В данную версию внесены следующие важные усовершенствования.

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

• Новые элементы управления Stage, облегчающие редактирование символов.

• Средства коллективного использования библиотек.

• Улучшенная функция Color Mixer (Цветовой микшер).

• Редактирование на уровне пикселей.

• Команда "распределения в слои", позволяющая автоматически разнести любое число

выделенных объектов по своим собственным слоям.

• Динамические маски.

Улучшенные элементы управления звуком.

• Инструмент Free Transform (Свободное преобразование), позволяющий выполнять

несколько операций преобразования, таких как перемещение, вращение, масштаби-

рование, наклон и искажение без смены инструментальных средств.

Графический пользовательский интерфейс программы также претерпел существенные

изменения. В данной версии появились сворачиваемые, плавающие панели, экономящие

пространство экрана, а также новые панели инспекторов свойств, благодаря которым исчеза-

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

В язык были внесены следующие нововведения.

• Возможность динамически загружать файлы JPEG и МРЗ.

Я Анкерные точки, позволяющие использовать кнопки Forward (Вперед) и Back (Назад)

своих броузеров для перехода от анкера к анкеру.

• Функция Code Hints (Советы по использованию кода), позволяющая в нужный мо-

мент просматривать синтаксис команд.

И Повторное использование компонентов интерфейса перетаскивания.

а Просмотр текущих компонентов.

В Усовершенствованная функция отладки.

• Более полная модель объектов и событий.

И Расширенная поддержка текстовых полей и форматирования текста.

В Прикладной программный интерфейс рисования, расширяющий возможности инст-

рументов рисования программы Flash.

Ускоренное выполнение функций

ДЛЯ КОГО ПРЕДНАЗНАЧЕНА ЭТА КНИГА

С самого начала мы предполагаем, что читатель совершенно незнаком с Flash. В книге да-

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

чего не знал о Flash до того, как открыл эту книгу.

В то же время мы предполагаем, что читатель намеревается стать опытным и профессиональ-

ным пользователем Flash, поэтому детально описываем темы средней и высокой сложности.

Начните читать книгу с самого начала и ничего не пропускайте, даже самых мельчайших

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

шаговые инструкции, описывающие выполнение основных задач. Предполагается, что это

побудит читателя самостоятельно работать с программой.

КАК ПОЛЬЗОВАТЬСЯ КНИГОЙ

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

материал, представленный в последних главах, предполагает, что вы уже познакомились с

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

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

данную книгу как справочное пособие, пытаясь с ее помощью решать проблемы по мере их

возникновения. С другой стороны, в программу Flash MX включено множество новых функ-

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

именно к этой категории читателей, пролистайте книгу и обратите внимание на абзацы, по-

меченные пиктограммой.

ВВЕДЕНИЕ 25

Если в книге приводятся примеры файлов, записанных на компакт-диске, который

прилагается к этой книге, обязательно поработайте с ними и попробуйте их модифи-

цировать. Такая практика окажет вам неоценимую услугу, и, может быть, вы будете

использовать эти файлы для своих собственных проектов.

Кроме обязательно посетите многочисленные Web-ресурсы для разработчиков Flash.

В качестве стартовой площадки можно воспользоваться Web-узлом автора этой книги, Майк-

ла Гурвица f com). Кроме того, в книге приводится несколько те-

матических списков рассылки, которые позволят получить квалифицированную помощь по

всем вопросам, касающимся Flash.

Книга разделена на шесть частей.

В (главы и II (главы основное внимание уделено вопросам использования

графического пользовательского интерфейса среды разработки, а также описанию ориентирован-

ных на дизайн функций, не требующих или минимально язык

Части III (главы IV (главы и V (главы представляют собой полное

руководство по использованию ActionScript. В части III подробно описывается язык

ActionScript, начиная с самых элементарных принципов и заканчивая функциями, события-

ми и прикладным программным интерфейсом рисования. Часть IV представляет собой спра-

вочное руководство по работе со встроенными и пользовательскими объектами и компонен-

тами. Здесь же описаны взаимодействия, принципы коллективного использования библиотек

и средства отладки Flash. В главе 20 "Использование встроенных объектов фильмов" расска-

зывается о продукте Flash Communication Server, а также об объектах Video, Microphone и

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

так и с серверами, в том числе и взаимодействие, основанное на XML.

В части VI рассматриваются выходные возможности программы, такие как печать, разме-

щение и экспортирование Flash-файлов.

УСЛОВНЫЕ ОБОЗНАЧЕНИЯ, ПРИНЯТЫЕ В КНИГЕ

Для того чтобы отличить ключевые слова ActionScript от остального текста, используется

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

компилятора ttinitclip и т.д.

В коде ActionScript слова, выделенные курсивом, представляют собой не сам код, а запол-

нители, которые должны быть заменены фактическим кодом. Например, в коде

isDown слово Code представляет собой заполнитель кода символа,

подлежащего вставке. Код является фактическим кодом

ActionScript, в котором Up представляет собой фактический код символа.

В книге часто используется принятое в ActionScript соглашение о том, что когда объект

представляет собой новый экземпляр, созданный программистом, его имя начинается с сим-

волов ту. Например, TextField является встроенным классом текстовых полей, не создан-

ных программистом, a myTextField — это новый экземпляр текстового поля.

В конце большинства глав имеются разделы "Возможные проблемы" и "Flash за работой".

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

проблемы", в котором описываются пути решения наиболее распространенных из них.

Обратите особое внимание на примеры, приводимые в разделах "Flash за работой", по-

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

ное объяснение принципов работы программы. Чтобы составить наиболее полное представ-

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

работает в каком-либо реальном приложении.

26 ВВЕДЕНИЕ

СРЕДА и ИНСТРУМЕНТЫ FLASH

в этой ЧАСТИ...

Глава

Что нового во Flash MX

Глава 2. Интерфейс Flash

Глава 3. Рисование во Flash

Глава 4. Использование растровых изображений во Flash

Глава 5. Работа с текстом

ГЛАВА

1

Что нового во FLASH MX

В ЭТОЙ ГЛАВЕ...

Усовершенствование интерфейса 29

Компоненты 32

Поддержка видео 32

Усовершенствование сценариев 33

Совместимость с Flash 5 36

Доступ к содержимому 37

Возможные проблемы 37

УСОВЕРШЕНСТВОВАНИЕ ИНТЕРФЕЙСА

В программе Macromedia Flash MX сделан огромный шаг вперед по сравнению с Flash 5.

В программу внесены усовершенствования и нововведения, такие как поддержка видео, компоненты

пользовательского интерфейса, программируемое рисование и маски по сценарию.

Запустив программу, вы сразу же увидите, что изменились очень многие ее элементы.

Внесены существенные изменения в интерфейс, благодаря чему он стал гораздо более удобным

и интуитивно понятным.

ГРУППЫ ПАНЕЛЕЙ

Новые группы панелей версии MX предназначены одновременно для экономии пространства

и организации среды проектирования. Новые панели можно сворачивать, делать

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

соответствии с предпочтениями пользователя. Большинство панелей можно держать на рабочем

столе свернутыми до тех пор, пока они не понадобятся. Даже панели Library (Библиотека)

и Movie Explorer (Проводник фильма) можно использовать в сочетании с другими панелями.

ИНСПЕКТОР свойств

Наиболее эффективной новой функцией интерфейса является панель Property Inspector

(Инспектор свойств). На этой панели, позаимствованной из программы Dreamweaver, сосре-

доточены основные свойства объекта (рис. При выделении какого-либо объекта или ин-

струмента откроется панель инспектора свойств, на которой приведены свойства и парамет-

ры данного объекта. Панель инспектора свойств заменила панели Stroke (Штрих), Fill

(Заливка), Text (Текст), Paragraph (Абзац), Character (Символ), Instance (Экземпляр), Frame

(Кадр), Effect (Эффект) и Sound (Звук), которые использовались в программе Flash 5. На-

пример, при выделении объекта в окне Stage (Рабочее поле) откроется панель инспектора

свойств с полями имени экземпляра, символьных поведений, координат, размеров, цветовых

эффектов и подкачки символов. Работая с панелью инспектора свойств, нет необходимости

открывать многочисленные окна и панели, требовавшиеся при работе с Flash 5. Естественно,

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

Рис. 1.1. Новая панель Property Inspector является контекстно-зависимой и ото-

бражает только свойства и параметры выделенного объекта или инструмента

НОВЫЕ ИНСТРУМЕНТЫ И ЭЛЕМЕНТЫ МЕНЮ

В программу Flash MX также внесены новые инструментальные средства и элементы ме-

позволяющие усовершенствовать процесс дизайна и анимации. Новые средства дизайна

включают инструмент Free Transform (Свободное преобразование) на панели Tools, коман-

ды Break Apart (Разделить) и Distribute to Layers (Распределить по слоям) в меню Modify

(Изменить) и команду Snap to Pixels (Привязать к пикселям) в меню View (Вид). Папки

слоя, выполняющие функции, аналогичные папкам библиотеки, позволяют систематизиро-

вать временную шкалу и сэкономить место на экране. Встроенные шаблоны являются руко-

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

и даже графики для портативных устройств.

ИНСТРУМЕНТ FREE TRANSFORM

Новый инструмент Free Transform (Свободное преобразование) позволяет в большей

степени управлять выделенным объектом. Модификаторы Edit Envelope (Редактирование

огибающей) и Distort (Искажение) делают возможным реализацию сложных эффектов пре-

образования, в том числе наклон, проецирование и искажение.

КОМАНДЫ BREAK APART и DISTRIBUTE то LAYERS

Во Flash 5 с помощью команды Break Apart (Разделить) выполнялось преобразование тек-

стовых блоков в кривые. В программе Flash MX с помощью данной команды (выполняемой пу-

тем выбора пунктов меню Apart) стал доступен очень важный промежуточный

шаг: разбивка текстового блока на отдельные буквы, как показано на рис. 1.2. Команду Break

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

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

выполняется преобразование в кривые.

30 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Чтобы каждый из объектов можно было

индивидуально, их необходимо

расположить в отдельных слоях. Команда Dis-

tribute to Layers (Распределить по слоям) берет Теперь команда Break Apart выполняет

несколько объектов слоя и разносит их по от- разбивку текстового блока на отдельные буквы

дельным слоям. Кроме того, новым слоям ав-

томатически присваиваются имена в соответствии с именами разнесенных объектов. Выдели-

те несколько объектов в окне Stage (Рабочее поле) и выполните команду to

Layers. Скомбинировав команды Break Apart и Distribute to Layers, с помощью выполнения

всего двух операций можно разбить текстовые блоки на буквы и разнести их по своим собст-

венным слоям так, что их можно будет анимировать индивидуально. Данные команды явля-

ются одними из основных при создании анимации.

КОМАНДА SNAP то PIXELS

С помощью команды Snap to Pixels (Привязать к пикселям) можно управлять располо-

жением объекта на уровне пикселей. Этой команды позиционирования уже давно с нетерпе-

нием ожидали все пользователи Flash. Головной болью дизайнеров, работающих с Flash, был

способ, используя который Flash помещала объекты (и, в частности, текст) не только на це-

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

ной графики во Flash используются операции с плавающими точками, которые являются ма-

тематическими средствами, не ориентированными на работу с пиксельной графикой. Тем не

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

линии (а также текст). Растровые изображения и шрифты, привязанные к целым пикселям,

при размещении с использованием плавающих точек отображались некорректно. Работая в

программе Flash 5, необходимо было все время проверять, чтобы объекты были помещены с

привязкой только к целым значениям. Благодаря команде Snap to Pixels появилась возмож-

ность выполнять точное выравнивание по целым числам, как показано на рис. 1.3. Для вклю-

чения функции привязки к пикселям выполните команду to Pixels.

Подробная информация о векторном формате Flash приведена в главе 3

"Рисование во Flash". Растровые изображения подробно в главе 4

"Использование растровых изображений во Flash", а растровые шрифты — в

главе 5 "Работа с текстом".

ПАПКИ СЛОЕВ

Еще одним блоком программы, позволяющим оптимизировать и систематизировать рабо-

чий процесс, являются папки панели Timeline (Временная шкала). Дело в том, что в процессе

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

Например, при поиске видеоклипа может возникнуть необходимость просмотреть около

50 слоев. Теперь слои можно группировать в папки и сворачивать и разворачивать их по мере

необходимости. Это позволяет в значительной степени оптимизировать рабочее пространство

экрана, максимально увеличить размеры рабочего поля и в гораздо большей степени (по срав-

нению с возможностями, доступными в предыдущих версиях программы) систематизировать

работу над проектом. К примеру, слои с кнопками можно сгруппировать в папку "Кнопки". Ра-

бочий процесс оптимизируется за счет того, что теперь любой пользователь, даже совершенно

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

ГЛАВА 1. Что нового во FLASH MX 31

ШАБЛОНЫ

В программе Flash MX имеется несколько предварительно заданных шаблонов для работы со спе-

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

ных устройств. Пример шаблонов, предназначенных для создания приведен на рис.

Пользователю необходимо только добавить

свой текст и графику, а о функциональности

презентации позаботится сама программа.

Шаблоны, предназначенные для соз-

дания рекламных объявлений, комплек-

туются направляющим слоем и пояс-

няющими инструкциями (рис. 1.5).

Можно создать шаблоны с заблокиро-

ванным содержимым, чтобы впоследст-

вии заказчик мог внести в созданный

файл минимальные изменения и обнов-

ления. Для доступа к шаблонам выполни-

те команду from Template

Создать на основе шаблона).

Рис. 1.3. Команда Snap to Pixels позволяет точно выров-

нять объект по заданным координатам пикселей

КОМПОНЕНТЫ

В программе Flash 5 была введена концепция Smart Clips (Интеллектуальные клипы), по-

зволяющая повторно использовать видеоклипы со встроенными функциями и заданными

параметрами. Эта концепция была усовершенствована и интегрирована в версию MX под

названием компоненты. Панель Components (Компоненты), изображенная на рис. 1.6, пред-

ставляет собой библиотеку наиболее распространенных элементов интерфейса, таких как ли-

нейки прокрутки и флаговые поля. Благодаря тому, что такие элементы всегда находятся под

рукой, пользователь может просто перетащить, например, полосу прокрутки на текстовое по-

ле, как показано на рис. 1.6. Добавив к фильму нужный элемент, можно настроить предвари-

тельно заданные параметры сценария. После выхода программы Flash MX компания

Macromedia выпустила два набора новых компонентов, предоставляющих доступ к таким

элементам интерфейса, как меню с древовидной структурой, индикаторы выполнения задач

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

зволяет надеяться на дальнейшее усовершенствование процесса авторских разработок.

ПОДДЕРЖКА ВИДЕО

Во Flash 5 не было настоящей поддержки видео, его можно было только импортировать как

серию статических изображений или экспортировать в QuickTime. Версия MX полностью под-

держивает внедренное видео, позволяя работать без необходимости обращения к внешним

плейерам. Видео можно импортировать в нескольких форматах и с помощью кодека (устройства

кодирования и декодирования видео) Sorenson Spark, изображенного на рис. внедрять непо-

средственно в SWF-файлы. Импортированным видео можно управлять (вращать, масштабиро-

вать, наклонять, маскировать и анимировать) точно так же, как и другими элементами. Им

можно управлять и с помощью Кодек Sorenson Spark обеспечивает существенное

сжатие больших видеофайлов. Для импортирования видео и доступа к кодеку Sorenson Spark

выполните команду и найдите нужный видеофайл на сво-

ем компьютере. Процедура сжатия выполняется при экспортировании Flash-фильма.

32 ЧАСТЬ СРЕДА и ИНСТРУМЕНТЫ FLASH

New

Items:

Description:

Use to make custom

Simply add your own

and text and the template do

the

Рис. 1.4. Bo Flash MX имеются предварительно заданные шаблоны для работы с опреде-

ленным содержимым, а также наиболее распространенные навигационные кнопки

V

25 30 35 40

В

!

Voluntary for Rich Media Ad Formats

The Interactive Advertising Bureau the voice of the interactive Industry,

issued voluntary guidelines for rich media formats.

The Rich Media Guidelines are designed to make it easier for marketers and agencies

to use rich media, up the vast array of creative possibilities that make advertising

effective. recommendationi are baselines enabling advertisers to work from a

j starting and scale their creative efforts.

I For more information,

Рис. Б шаблоны включены инструкции по использованию наиболее рас-

пространенных рекламных форматов

ГЛАВА 1. Что нового во FLASH MX 33

Рис. 1.6. Панель Components интерфейса позволяет

перетаскивать наиболее распространенные функциональные элементы

интерфейса

Подробная информация об использовании компонентов содержится в главе 9

меню и поля ввода данных", а процедура создания пользовательских

компонентов описывается в главе 22 "Компоненты".

УСОВЕРШЕНСТВОВАНИЕ СЦЕНАРИЕВ

В версии MX выступает в роли обособленного объектно-ориентированного

языка. Усовершенствованная объектная модель позволяет интегрировать видеоклипы, кноп-

ки и текстовые поля, а расширенная модель событий обеспечивает гораздо более широкие

возможности взаимодействия пользователя с программой. Благодаря этим усовершенствова-

ниям пользователь получил возможность создавать собственные подклассы видеоклипов, об-

работчики событий с функциями обратного вызова и элементы управления текстовыми по-

лями. В результате этого Rash MX превратилась в среду, позволяющую выполнять серьезные

прикладные разработки.

УСОВЕРШЕНСТВОВАННАЯ ОБЪЕКТНАЯ МОДЕЛЬ и МОДЕЛЬ СОБЫТИЙ

В версии MX объекты интегрированы более тесно. Теперь кнопки представляют собой ис-

тинные объекты, свойствами которых можно управлять посредством ActionScript, а видео-

клипы могут получать события кнопок.

Будучи программой, базирующейся на событиях, Rash исполняет код в ответ на какие-

либо события. Во Flash 5 обработчики событий ActionScript, сигнализирующие о выполнении

кода, оставались за пределами экземпляров символов, к которым осуществлялся доступ, и их

нельзя было непосредственно изменить или отключить при воспроизведении фильма. В вер-

сии MX обработчики событий являются свойствами символов. Их можно даже поместить

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

Подробная информация об объектной модели и модели событий приводится в

главе 11 "Знакомство с ActionScript", в главе 16 "Взаимодействие, события и

установление последовательности" и в главе 17 "Демонстрация мощи

видеоклипов".

34 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Video

'

Movie to

Length: 5.15

Scale:

Synchronize video to Macromedia

frames to encode per number

Macromedia Flash

Новый кодек Spark позволяет получать высококачественное ви-

део малого объема и внедрять его непосредственно в SWF-файлы

МАСКИРОВАНИЕ по СЦЕНАРИЮ

Во Flash 5 маски были недоступными для внесения изменений. В версии MX видеоклипы

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

откликаться на действия пользователя. Эта функция открывает совершенно новые возмож-

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

отображая содержимое при наведении указателя мыши на объект.

Подробно о масках по сценарию рассказывается в главе 17, "Демонстрация

мощи видеоклипов".

ПРОГРАММНОЕ РИСОВАНИЕ

Новый прикладной программный интерфейс рисования открывает новые возможности

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

можно создавать с нуля без привлечения графических средств. С помощью ActionScript мож-

но нарисовать весь графический интерфейс, и при этом предварительно созданные изобра-

жения не потребуются.

О программном рисовании вы узнаете в главе 18 "Процедура рисования с

помощью ActionScript".

ЗАГРУЗКА ВНЕШНИХ ИЗОБРАЖЕНИЙ и ЗВУКА

До появления Flash MX внешние изображения и звук нельзя было загружать динамиче-

ски. Благодаря новым функциям программы MX, и файлы

JPEG и МРЗ можно динамически загружать при помощи URL. Это означает, что размер

ГЛАВА 1. Что нового во FLASH MX 35

Flash-фильмов можно уменьшить с помощью средств, загружаемых в процессе их выполне-

ния. Можно также обновить содержимое фильма без редактирования исходных Flash-файлов.

Подробная информация о загрузке внешних изображений и звука приводится

в главе 20 "Использование встроенных объектов фильмов".

УСОВЕРШЕНСТВОВАННЫЙ РЕДАКТОР ACTIONSCRIPT

Усовершенствования интерфейса Flash MX распространяются и на редактор

Теперь при вводе кода можно открыть панель Hints (Советы по использованию кода),

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

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

связана панель ActionScript Reference (Справка по ActionScript). Все это облегчает написание

кода лицам, не являющимся профессиональными программистами.

3 i

( for 1

•

:

"

<p log ing 1 } {

V i .p ay < );

{

function {

42: playing

43 -

• for holder) {

45 if t I i ]

-

И o f 49, '

Рис. 1.8. В усовершенствованный редактор ActionScript введена функция ну-

мерации строк и советов по использованию кода

О том, как использовать редактор ActionScript, рассказывается в главе 11

"Знакомство с ActionScript".

СОВМЕСТИМОСТЬ с FLASH 5

Предыдущим версиям Flash недоставало обратной совместимости. В версии MX файлы

. la можно сохранять как документы Flash 5 (рис. 1.9), чтобы их мог открыть любой пользо-

ватель, работающий с программой версии 5 или MX. Это позволяет сделать содержимое дос-

тупным для пользователей, на компьютерах которых установлены предьщущие версии Flash-

плейера. При сохранении файла как документа Flash 5 на экране появится предупреждение о

том, что в сохраненном файле будет опущено содержимое, специфичное для версии MX.

ДОСТУП К СОДЕРЖИМОМУ

Ранее содержимое Flash было недоступно для программ считывания экрана, которыми

пользуются люди с физическими ограничениями. В версии MX имеется панель Accessibility

(Доступность), изображенная на рис. позволяющая добавить к содержимому Flash

36 ЧАСТЬ I. ИНСТРУМЕНТЫ FLASH

и описания (в HTML эту функцию выполняет дескриптор <alt>), чтобы сущность

Flash-содержимого могла быть описана программами считывания и другими вспомогатель-

ными средствами.

Save As

Name:

Flash MX Document

Flash 5 Document

Рис, 1.9. Flash-файлы можно сохранять в форма- Рис. 1.10. В окне Accessibility можно ввести надписи

max и Flash 5 и описание содержимого так, чтобы оно стало

доступным для программ считывания информации

с экрана

Подробная информация о параметрах доступности Flash приведена в приложе-

нии А.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Куда делась программа Generator?

Разработчики Flash MX отказались от использования Generator. Теперь большинство

функций этой программы, например взаимосвязь с базами данных посредством XML,

встроено непосредственно во Flash MX. Кроме того, в ближайшем будущем планируется ин-

теграция программы с ColdFusion другими инструментальными платформами.

Что случилось с опциями вращения и масштабирования инструмента Arrow (Стрелка) про-

граммы Flash 5?

Все параметры преобразования, в том числе вращение и теперь входят в

состав инструмента Free Transform (Свободное преобразование). Выберите этот инструмент и

щелкните на объекте. Для масштабирования объекта перетащите его угловую точку, а для вра-

щения объекта щелкните мышью и удерживайте ее нажатой вне объекта до тех пор, пока не поя-

вится круг со стрелкой (пиктограмма вращения). Затем начинайте вращение объекта.

ГЛАВА 1. Что нового во FLASH MX 37

ГЛАВА

2

ИНТЕРФЕЙС FLASH

В ЭТОЙ ГЛАВЕ...

Наборы панелей 39

Задание атрибутов документа 41

Временная шкала 42

Панель инструментов 45

Клавиши быстрого доступа 50

Библиотека 52

Проводник фильма 53

Задание параметров Flash 53

Возможные проблемы 58

Flash за работой: создание идеального интерфейса Flash MX 59

НАБОРЫ ПАНЕЛЕЙ

При первом же запуске Flash MX вы обнаружите существенные изменения, внесенные в

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

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

Интерфейс Flash состоит из окна фильма, панели инструментов и других многочисленных

панелей. Размещение всех этих элементов можно настроить в соответствии с собственными

предпочтениями.

Пользовательский интерфейс в версии MX значительным образом модернизирован. При работе

с Flash пользователю всегда не хватает места на экране (хотя в настоящее время большинство

мониторов работает с разрешением 1024x768, а не 800x600). В связи с этим новые наборы па

нелей и инспекторы свойств были спроектированы так, чтобы максимально увеличить рабочую

область экрана. Все панели, за исключением панелей Timeline (Временная шкала), Stage

(Рабочее поле) и инспектора свойств для Macintosh, можно сделать плавающими, сворачивать

или разворачивать по мере необходимости. Пользователи Macintosh не могут привязать никакие

другие панели к панелям Timeline и Stage, а панель инспектора свойств всегда является пла-

вающей. Можно привязать другие панели к панели Actions (Действия), но на компьютерах

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

но с помощью клавиши Разумеется, что наборы панелей в значительной степени влияют

на удобство и простоту использования интерфейса MX в целом.

В программе Flash MX имеются следующие панели:

• Toolbox (Панель инструментов);

• Stage (Рабочее поле);

• Align (Выравнивание);

• Color Swatches (Каталоги цветов);

• Transform (Преобразование);

• Debugger (Отладчик);

• Reference (Справка);

• Accessibility (Доступность);

• Component Parameters (Параметры компонентов);

• Answers (Ответы);

• Timeline шкала);

• Property Inspector (Инспектор свойств);

• Color Mixer (Цветовой микшер);

• Info (Информация);

• Actions (Действия);

• Movie Explorer (Проводник фильма);

• (Вывод данных);

• Components (Компоненты);

• Library (Библиотека).

ИНСПЕКТОР свойств

Параметры, доступные на панели Property Inspector (Инспектор свойств), являются кон-

текстно-зависимыми и открываются в зависимости от того, какой объект был выделен. Па-

нель Property Inspector позволяет чрезвычайно быстро редактировать объекты. Панели

Stroke (Штрих), Fill (Заливка), Text (Текст), Paragraph (Абзац), Character (Знак), Instance

(Экземпляр), Frame (Кадр), Effect (Эффект) и Sound (Звук), применявшиеся в программе

Flash 5, полностью заменены панелью Property Inspector (рис. К сожалению, мечта реа-

лизована не полностью, и доступ к некоторым инструментам (например, Round Rectangle

Radius, с помощью которого можно нарисовать прямоугольник со скругленными углами)

пока что можно получить только в подразделе Options (Параметры) панели инструментов ли-

бо на других панелях. Некоторые повторяются на разных панелях. В частности,

параметры заливки и штрихования доступны на панели инструментов, а также на панели

Property Inspector и Color Mixer. Тем не менее панель Property Inspector является существен-

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

сти открывать многочисленные диалоговые окна.

40 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

КОМПОНОВКА ПАНЕЛЕЙ

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

наведении указателя мыши в нужное место (под кнопкой закрытия панели, рядом со строкой

заголовка) появится пиктограмма с изображением руки (рис. 2.2). Чтобы скрыть привязан-

ную панель, перетащите ее за левый угол в сторону от остальных связанных с ней панелей, а

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

сколько панелей, кнопку закрытия имеет только самая верхняя из них и после щелчка на ней

будут закрыты все связанные панели.

т

В Fonts

И: V: I Г

Параметры новой панели Property Inspector являются контекстно-

зависимыми

Bo Flash MX имеются заданные по умолчанию наборы панелей, доступ к которым можно

получить с помощью команды Panel Sets панелей). В открывшемся

подменю будут доступны наборы Default (По умолчанию), Designer (Дизайнер) и Developer

(Разработчик) с различными разрешениями. Очень важным является и то, что пользователь мо-

жет сохранять свои собственные наборы панелей. Для этого нужно создать нужный набор и вы-

полнить команду Panel Layout компоновку панелей).

ЗАДАНИЕ АТРИБУТОВ ДОКУМЕНТА

Для доступа к атрибутам документа, формально именуемым

свойствами фильма, предназначена панель Property Inspector

либо команда На

панели инспектора свойств показаны атрибуты документа, за-

даваемые по умолчанию при создании фильма, доступ к кото-

рым можно также получить, щелкнув в области фильма, не вы-

деляя никаких объектов. После щелчка на кнопке Size (Размер)

панели инспектора свойств откроется диалоговое окно Docu-

ment Attributes (Атрибуты документа), в котором можно задать

размеры рабочей области, параметры согласования, фоновый

цвет, частоту смены кадров и измерения линеек. По-

сле щелчка на кнопке Publish (Публикация) откроется диалого-

вое окно Publish Settings (Параметры публикации), а после

щелчка в поле Background (Фон) откроется каталог цветов для

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

кадров в Это значение можно ввести прямо в поле Frame Rate (Частота смены

Рис. 2.2. Чтобы связать панели,

щелкните рядом со строкой заго-

ловка, в результате чего появится

пиктограмма с изображением ру-

ки. Перетащите панель, распо-

ложив ее поверх другой, и отпус-

тите кнопку мыши

ГЛАВА 2. ИНТЕРФЕЙС FLASH 41

ВРЕМЕННАЯ ШКАЛА

Как и традиционный фильм, видеоклип Flash разворачивается во времени. Центром управ-

ления содержимым Flash-фильма является панель Timeline (Временная шкала), позволяющая

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

ключевых кадрах. На панели Timeline (рис. 2.3) "расквартированы" все кадры и слои, состав-

ляющие фильм, а также считывающая головка, являющаяся индикатором текущего кадра.

КАДРЫ

Кадры представляют собой отдельные статические кванты, или моменты времени, которые

комбинируются друг с другом для создания эффекта движения. Вспомните книжку-раскладку, с

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

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

иллюзия движения. Кадры позволяют устанавливать последовательность и управлять скоростью

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

ция, происходящая в меньшем количестве кадров, в конечном видеоролике будет казаться более

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

или нажмите клавишу <F5>.

«с

КЛЮЧЕВЫЕ КАДРЫ

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

мое предшествующих им ключевых кадров. И только после прохождения нового ключевого

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

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

кадр) или нажмите клавишу <F6>. В любом ключевом кадре, следующем за другим ключевым

кадром, отображается содержимое первого ключевого кадра, что позволяет пользователю

вносить изменения в исходное содержимое. Для вставки ключевого кадра с пустым содержи-

мым выполните команду Keyframe ключевой кадр) или на-

жмите клавишу <F7>. На временной шкале ключевые кадры изображаются черными круж-

ками, а пустые ключевые кадры — пустыми кружками.

Пустой кадр

Вставить

слой

Па

В

Считывающ

оя голов

9

а» П

.1"

ая Г

п

устой )чевой кадр заг

кадр времен

3

Выпадающее меню

ной шкалы Frame View (Вид кадров)

п

п

п

.

1 1

Удалить слой Индикатор та

Кнопки

Вставить калькирования

папку слоя

кадра

Истекшее время

Добавить направляющую

движения

[Г • I

Индикатор центрирования кадра Частота смены кадров

Изменение маркеров

калькирования

Рис. 2.3. На панели осуществляется управление покадровой анимацией

42 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Работа с временной шкалой, кадрами и ключевыми кадрами подробно рас-

сматривается в главе 7 "Анимация во Flash".

СЛОИ И ПАПКИ СЛОЕВ

Слои позволяют компоновать содержимое фильма. Каждый слой можно считать отдельной по-

лосой фильма на куске чистой ацетатной ткани. Если на каком-то участке слоя содержимое отсут-

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

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

Слои позволяют систематизировать и разделить содержимое. Содержимым легче управлять,

если оно разнесено по слоям. Особенностью Flash является возможность слияния простых не-

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

ся или соприкасаются. На рис. 2.4 показано, что если два красных круга, расположенных в од-

ном соприкасаются, они становятся единым объектом. Разнесение содержимого в отдель-

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

эффектов. Добавление слоев не приводит к увеличению размера файла фильма, поэтому слои

можно смело использовать при необходимости организации содержимого.

По мере создания слоев Flash автоматически

нумерует их и присваивает им имена. Для пере-

именования слоя дважды щелкните на его имени

(например, Layer 1), расположенном в левой

части панели Timeline (Временная шкала). Удели-

те побольше внимания присвоению имен слоям,

делая их достаточно короткими, но при этом не-

сущими смысловую нагрузку. В дальнейшем слои

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

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

них можно будет легко запутаться, но этого ни-

когда не если слои будут иметь четкие

описательные имена.

Пиктограммы, расположенные справа от каж-

дого слоя, позволяют скрывать и блокировать

слои, а также отображать их в виде контуров, как

показано на рис. 2.5. Слои, с которыми вы не ра-

ботаете в данный момент, стоит заблокировать,

что позволит избежать непреднамеренного изме-

2.4. В случае соприкосновения простых

несгруппированных расположенных

в одном слое, они будут объединены, в резуль-

тате чего образуется единый объект

нения содержимого. Удерживая клавишу (для Macintosh) или (для Windows),

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

этой операции будут заблокированы все остальные слои. Чтобы заблокировать или снять

блокировку отдельных слоев, щелкните на кружках, расположенных в столбце блокировки.

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

слой и увидеть содержимое, расположенное под ним, воспользуйтесь кружками, которые на-

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

видимости при нажатой клавише <Option> или в строке одного из слоев приведет к

скрытию всех остальных слоев. О скрытии слоев свидетельствует значок X красного цвета,

расположенный в левом столбце под пиктограммой с изображением глаза. Слои можно ото-

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

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

цветной квадрат, расположенный в правом столбце, станет незаполненным.

ГЛАВА 2. ИНТЕРФЕЙС FLASH 43

a»1

слоя позволяют скрыть или заблокировать его, а также ото-

бразить в виде контура

Пиктограмма с изображением карандаша, расположенная между именем слоя и

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

тирования. Имейте в виду, что скрытый слой редактировать нельзя. При попытке отредакти-

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

показано рис. 2.6.

, d .

Перечеркнутая пиктограмма карандаша

Рис. 2.6. Скрытый слой является недоступным для редактирования,

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

карандаша

Чтобы изменить расположение слоев, щелкните на имени слоя и перетащите его на новое

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

жатой клавишу <Shift>.

Пиктограммы, расположенные в нижней части области слоев в окне Timeline, позволяют

добавить новый слой, направляющий слой или вставить папку слоя. Направляющие слои по-

зволяют выравнивать объекты. Их можно использовать для статического выравнивания эле-

ментов (например, для выравнивания объектов на других слоях относительно объектов или

сетки, созданных на направляющем слое) или в качестве направляющих движения, позво-

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

направляющий, щелкните на пиктограмме Add Motion Guide (Добавить направляющую дви-

жения). В опубликованных Flash-фильмах направляющие слои не отображаются.

Превосходной новой Flash MX являются папки слоев. Теперь слои можно

группировать и в папках. Это позволяет не только легко найти нуж-

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

папки, содержащие слои, с которыми в данный момент необходимо работать. Чтобы по-

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

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

КАЛЬКИРОВАНИЕ и РЕДАКТИРОВАНИЕ НЕСКОЛЬКИХ КАДРОВ

В области фильма одновременно отображается только один кадр. Для облегчения процес-

са выравнивания, особенно при работе с покадровой анимацией, с целью одновременного

отображения ряда кадров в области фильма применяется функция калькирования. На трех

кнопках, расположенных в нижней части панели Timeline, изображены по-разному наложен-

44 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

друг на друга квадраты. После щелчка на кнопке Onion Skin (Калькирование)

одновременно будет отображено несколько кадров, как показано на рис. 2.7.

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

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

кадров можно путем перетаскивания маркеров Start Onion Skin (Начало калькирования) и End

Onion Skin (Конец калькирования). При перемещении воспроизводящей головки изменяется

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

После щелчка на кнопке Onion Skin Outlines (Контурное калькирование) производится

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

туров. Для редактирования всех калькируемых кадров щелкните на кнопке Edit Multiple

Frames (Редактирование всех кадров). Рядом с тремя описанными выше кнопками распола-

гается и четвертая, Modify Onion Markers (Изменение маркеров калькирования). После

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

дут двигаться при изменении текущего кадра. Здесь же можно выбрать число калькируемых

кадров: Onion 2, Onion 5 или Onion All.

ПАНЕЛЬ ИНСТРУМЕНТОВ

На этой панели (рис. 2.8) размещаются инструменты, предназначенные для работы во

Flash. Данная панель подразделяется на четыре области: Tools (Инструменты), View (Вид),

Colors (Цвета) и Options (Параметры). Некоторые из инструментов имеют модификаторы,

отображаемые в области Options при их выборе.

ПОДРАЗДЕЛ TOOLS

В верхней части панели инструментов в подразделе Tools располагаются инструменты вы-

бора, рисования, раскрашивания и изменения объектов.

Кнопка Edit Multiple Frames

(Правка нескольких кадров)

Кнопка Onion Skin

(Калькирование)

Раскрывающееся меню

Modify Onion Markers

(Изменение маркеров

калькирования)

Кнопка Onion Skin Outlines

(Контурное калькирование)

Рис. Для одновременного отображения нескольких кадров

перетащите маркеры калькирования

ГЛАВА 2. ИНТЕРФЕЙС FLASH 45

Arrow (Стрелка) —

Line

Pen (Перо) — A.

Oval

Pencil (Карандаш) —

Free Transform (Свободное преобразование) —

Ink Bottle

Eye Dropper (Пипетка) —

Black and White (Черно-белый) •

No Color (Бесцветный) •

— — s

• (Частичное выделение)

• Lasso (Лассо)

.

• Rectangle (Прямоугольник)

• Brush (Кисть)

• Fill Transform (Преобразование заливки)

• Paint Bucket (Заливка)

• Eraser (Ластик)

• Zoom (Масштаб)

• Stroke Color (Цвет

• Fill Color (Цвет заливки)

• Swap Colors (Поменять цвета)

— Модификаторы инструментов

Рис. 2.8. Панель инструментов Flash MX

ARROW

Инструмент Arrow (Стрелка) используется для выделения объектов в рабочей области.

С помощью этого инструмента можно одним щелчком выделить объект, нарисовать область

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

и штрихования объекта. Правда, после щелчка на изображении, содержащем и штрихи, и за-

ливку, будет выделена только та область, на которой был произведен щелчок. Поскольку ин-

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

виша быстрого доступа <V>.

При выборе инструмента Arrow обратите внимание на то, что в разделе Options панели инстру-

ментов будут отображены три модификатора. Первый из них, имеющий вид кнопки с изображени-

ем магнита, называется Snap to Objects (Привязка к объектам). При его выборе (по умолчанию) на

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

кого-либо объекта к другому, к которому он может быть привязан. Когда будет выделен объект или

его часть, станут доступными модификаторы Smooth (Сглаживание) и Straighten (Выпрямление).

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

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

ИНСТРУМЕНТ SUBSELECTION

С помощью инструмента Subselection (Частичное выделение) производится выделение

отрезков прямых линий или контуров изображения. Его также можно использовать для ото-

бражения точек на линиях и контурах и последующего перетаскивания этих точек с целью

изменения изображения.

ИНСТРУМЕНТ LINE

Щелкнув и перетащив инструмент Line (Линия), вы создадите прямую линию. Удерживая

нажатой клавишу с помощью данного инструмента можно рисовать линии по гори-

вертикали или по диагонали.

LASSO

С помощью инструмента Lasso (Лассо) можно выделить области неправильной формы.

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

46 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

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

пока вы не отпустите кнопку, создавая тем самым конечную точку.

Инструмент Lasso имеет три модификатора. Два верхних называются Magic Wand

(Волшебная палочка) и Magic Wand Settings (Параметры волшебной палочки). Они позволяют

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

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

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

ляется пороговое значение, определяющее, насколько чувствительной является "волшебная па-

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

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

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

Последним модификатором является Polygon (Режим многоугольника), при использова-

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

ИНСТРУМЕНТ PEN

Инструмент Реп (Перо) является наиболее мощным инструментом рисования. С его по-

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

ков. Чтобы нарисовать участок в виде прямой линии, просто щелкните на инструменте Pen, a

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

TEXT

После щелчка на инструменте Text создается место для начала ввода текста. Атрибуты

текста назначаются на панели инспектора свойств.

OVAL

С помощью инструмента Oval (Овал) можно нарисовать овалы и идеальные круги. Чтобы

нарисовать овал, щелкните и перетащите инструмент; для создания круга при щелчке и пере-

таскивании удерживайте нажатой клавишу

ИНСТРУМЕНТ RECTANGLE

Инструмент Rectangle (Прямоугольник) позволяет рисовать прямоугольники и квадраты.

Чтобы нарисовать прямоугольник, щелкните и перетащите инструмент; для создания квадра-

та при щелчке и перетаскивании удерживайте нажатой клавишу Инструмент Rectan-

gle имеет модификатор Round Rectangle Radius (Радиус скругления углов прямоугольника),

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

ИНСТРУМЕНТ PENCIL

Инструмент Pencil (Карандаш) позволяет рисовать неровные линии. В отличие от инст-

рументов Реп или Line, с помощью которых можно рисовать только от точки до точки, инст-

румент Pencil двигается вслед за мышью и является цифровым эквивалентом рисования ка-

рандашом. Модификатор Pencil Mode (Режим карандаша) позволяет выпрямлять или скруг-

лять траектории при рисовании.

ИНСТРУМЕНТ BRUSH

Инструмент Brush (Кисть) имитирует мазок кистью при рисовании. Это лучший инстру-

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

рашивания, размер и форму кисти, а также заблокировать цвет заливки. Модификатор Brush

Mode (Режим кисти) позволяет рисовать поверх штрихов или заливки либо защищать части

объекта, подобно использованию трафарета. В режиме Paint Fills (Закрашивание заливки)

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

остаются нетронутыми. В режиме Paint Behind (Закрашивание позади) объекты рисунка за-

щищены и окрашивать разрешается только пустые участки. В режиме Paint Selection

ГЛАВА 2. ИНТЕРФЕЙС FLASH 47

(Закрашивание выделенного фрагмента) окрашивается только заливка выделенного объекта.

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

ливки, поэтому я настоятельно рекомендую просто выделить объект и применить к нему но-

вую заливку посредством поля Fill (Заливка) на панели инспектора свойств либо в разделе

Color панели инструментов. Последним режимом модификатора Brush Mode является Paint

Inside (Закрашивание внутри контура), который позволяет применять цвет к области залив-

ки, где был начат мазок, но не к его контурам.

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

один модификатор — Pressure (Нажим). С его помощью можно изменять размер мазка кисти

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

ИНСТРУМЕНТ FREE TRANSFORM

Инструмент Free Transform (Свободное преобразование) является нововведением

Flash MX. Он позволяет выполнять преобразования как индивидуально, так и в

комбинации с объектами, группами, экземплярами и текстовыми блоками. Для

выполнения преобразования выделите объект в рабочем поле и щелкните на

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

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

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

Данный инструмент имеет модификаторы Rotate and Skew (Вращение и наклон), Scale

(Масштабирование) и два новых: Distort (Искривление) и Envelope (Огибающая). Модифи-

катор Distort позволяет промоделировать построение перспективы объекта. Для этого нужно

щелкнуть и перетащить угловые или боковые маркеры ограничивающего контура. При этом

будут преобразованы соседние края, как показано на рис. 2.9.

Как видно на рис. 2.10, модификатор Envelope позволяет деформировать и искажать вы-

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

а для деформации ее содержимого достаточно перетащить маркеры Безье. Деформацию мож-

но даже преобразовать в отдельные ключевые кадры, так что она будет выполняться пошагово

в течение определенного временного интервала.

Рис. 2.9. Модификатор изменяет форму

и объекта, моделируя его ракурс

Рис. Модификатор Envelope искажает и

деформирует объекты

ИНСТРУМЕНТ FILL TRANSFORM

Помимо чистых цветов, в качестве заливки можно использовать градиентное и даже растро-

вое заполнение. Инструмент Fill Transform (Преобразование заливки) позволяет отрегулировать

градиентную и растровую заливки. При щелчке на градиентной или растровой заливке ее об-

рамление и середина помечаются круглыми и квадратными маркерами, которые можно пере-

таскивать. Если навести на один из этих маркеров указатель мыши, он изменит свой вид, указы-

вая на опции редактирования. Пользователь может изменить форму, повернуть, масштабиро-

48 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

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

Можно даже создать мозаичное заполнение растровым изображением.

ИНСТРУМЕНТ INK BOTTLE

Инструмент Ink Bottle (Чернильница) используется для изменения существующего конту-

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

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

внесенных изменений достаточно щелкнуть на нужном штрихе.

ИНСТРУМЕНТ PAINT BUCKET

Инструмент Paint Bucket (Заливка) используется для изменения существующей заливки.

Аналогично инструменту Ink Bottle, его можно использовать для редактирования заливки в

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

инспектора свойств, либо поля Fill Color (Цвет заливки) на панели инструментов, а чтобы

внести изменения, достаточно щелкнуть на инструменте Paint Bucket.

ИНСТРУМЕНТ EYEDROPPER

Инструмент Eyedropper (Пипетка) позволяет копировать атрибуты штриха или заливки

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

растрового изображения, которое будет использоваться в качестве заливки. Щелкните инст-

рументом Eyedropper на штрихе или заливке, подлежащих копированию. В зависимости от

того, был ли выделен штрих либо заливка, инструмент Eyedropper превратится или в Ink Bot-

tle, или в Paint Bucket. При щелчке на другом объекте его штрих или заливка станут такими

же, как и у первого.

ERASER

С помощью инструмента Eraser (Ластик) можно стереть объекты во всем поле

или в его части. При перетаскивании этого инструмента будет вытерто все, что окажется на

его пути. Параметры модификатора Erase Mode (Режим ластика) позволяют указать элемен-

ты, подлежащие удалению, например, штрихи и заливку в пределах одного слоя (Erase Nor-

mal — Обычное стирание), только заливку (Erase Fills), только штрихи (Erase Strokes), толь-

ко выделенную заливку (Erase Selected Fills) или только заливку, которую уже начали сти-

рать (Erase Inside — Стирание внутри объектов). Модификатор Faucet (Кран) позволяет

целиком удалить штрихи или заливку одним щелчком мыши. Модификатор Eraser Shape

(Форма ластика) позволяет указать форму и размер ластика.

На заметку Модификатор Faucet имеет неправильную форму. Выделение выполняет капля

воды, а не сам кран. Поэтому при работе с маленькими объектами поместите

каплю воды точно над фрагментом, который подлежит выделению.

ПОДРАЗДЕЛ VIEW

Просматривать рабочее поле и перемещаться в его пределах можно с помощью двух инстру-

ментов: Hand (Рука) и Zoom (Масштаб). Фактический размер фильма может составлять лишь

небольшой участок рабочей области. Инструмент Zoom позволяет увеличивать и уменьшать

участки рабочего поля. Щелкните на инструменте Zoom либо воспользуйтесь клавишей <М>

или <Z>, а затем щелкните в рабочем поле или перетащите контур выделения над фрагментом,

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

Zoom, удерживая нажатой клавишу <Option> (для Macintosh) или (для Windows).

Инструмент Hand (Рука) позволяет перемещаться в пределах рабочего поля. Чтобы вос-

пользоваться инструментом Hand при работе с каким-то другим инструментом, нажмите и

удерживайте клавишу пробела. Обычно при масштабировании объекта возникает необходи-

2. ИНТЕРФЕЙС FLASH 49

мость переместить рабочую область так, чтобы она находилась над нужным фрагментом объ-

екта. Для этого при выбранном инструменте Zoom нажмите клавишу пробела и сместите изо-

бражение в нужное место рабочей области. После того как клавиша пробела будет отпущена,

вы вернетесь к тому инструменту, с которым работали ранее.

ПОДРАЗДЕЛ COLORS

В подразделе Colors панели инструментов задают цвета штрихов и заливки. Если в рабочем

поле не выделен никакой фрагмент, то после щелчка в поле Stroke (Штрих) или Fill (Заливка)

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

выделены какие-то объекты, то изменение цвета штриха или заливки на панели инструментов

приведет к немедленному изменению соответствующих атрибутов этих объектов.

Под полями Fill и располагаются три кнопки. Кнопка Black and White (Черно-

белый) изменяет цветовые параметры на заданные по умолчанию черный штрих и белую за-

ливку. Щелчок на кнопке No Color (Бесцветный) отключает либо штрих, либо заливку, в за-

висимости от того, какой из этих атрибутов был выбран. Кнопка Swap Colors (Поменять цве-

та) изменяет цвет выделенного контура на цвет заливки и наоборот.

КЛАВИШИ БЫСТРОГО ДОСТУПА

В программе Rash MX имеются клавиши быстрого доступа ко многим панелям и коман-

дам меню. Они помогут сэкономить в процессе работы массу времени, поэтому уделите не-

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

ся пользоваться чаще всего.

В табл. указаны клавиши быстрого доступа к различным инструментам. Поскольку ин-

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

пользуются одиночные клавиши.

ТАБЛИЦА 2.1. КЛАВИШИ БЫСТРОГО ДОСТУПА к ИНСТРУМЕНТАМ

ИНСТРУМЕНТ КЛАВИША БЫСТРОГО ДОСТУПА

Arrow (Стрелка) <V>

(Частичное выделение) <А>

Line (Линия) <N>

Lasso <L>

Pen (Перо) <Р>

Text (Текст) <Т>

Free Transform (Свободное преобразование) <Q>

Fill Transform (Преобразование заливки) <F>

Ink Bottle (Чернильница) <S>

Paint Bucket (Заливка)

(Пипетка) <l>

Eraser (Ластик) <Е>

Hand (Рука) <Н>

Zoom (Масштаб) <Z>

В табл. 2.2 перечислены комбинации клавиш быстрого доступа к панелям, которые работают как

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

50 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

ТАБЛИЦА 2.2. КЛАВИШИ БЫСТРОГО ДОСТУПА к ПАНЕЛЯМ

ПАНЕЛЬ

Tools (Инструменты)

(Временная шкала)

Property Inspector (Инспектор свойств)

Answers (Ответы)

Align (Выравнивание)

Color Mixer (Цветовой микшер)

Color Swatches (Каталоги цветов)

Info (Информация)

Scene (Сцена)

Transform (Преобразование)

Actions (Действия)

Debugger (Отладчик)

Movie Explorer (Проводник

Reference (Справка)

Output (Вывод данных)

Accessibility (Доступность)

Components (Компоненты)

Component Parameters (Параметры компонентов)

Library (Библиотека)

MACINTOSH

<Cmd+F2>

<Option+Cmd+T>

<Cmd+F3>

<Option+Fl>

<Cmd+F9>

<Cmd+l>

<Cmd+T>

<F9>

<Option+F3>

<F2>

<Option+F2>

<Cmd+F7>

<Option+F7>

<F11>

WINDOWS

<Ctrl+F2>

<Alt+Fl>

<F9>

<Alt+F3>

<F2>

<Alt+F2>

<Alt+F7>

<F11>

НАСТРОЙКА КЛАВИШ БЫСТРОГО ДОСТУПА

Во Flash MX клавиши быстрого доступа заданы по умолчанию, но их можно откорректи-

ровать в соответствии с собственными предпочтениями. На рис. видно, что в программе

имеется несколько наборов клавиш быстрого доступа, использующихся в наиболее популяр-

ных приложениях. Можете воспользоваться одним из этих наборов или создать свой собст-

венный, выполнив команду Shortcuts быстрого доступа).

В программе предварительно заданы следующие наборы клавиш быстрого доступа: Mac-

romedia Standard (Macromedia по умолчанию), Fireworks 3, Fireworks 4, Flash 5, FreeHand

9, Illustrator 10, Photoshop 5 и Photoshop 6. Если вы никогда раньше не

работали с Flash MX, но являетесь опытным пользователем любого из этих приложений, то вам

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

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

наиболее похожий на тот, что предстоит создать. Затем щелкните на кнопке Duplicate Set

(Дублировать набор), расположенной справа от раскрывающегося меню Current Set

(Текущий набор), и задайте уникальное имя нового набора. Затем выберите один из элемен-

тов раскрывающегося меню Commands (Команды). При выборе элемента данного меню ко-

манды будут отображаться индивидуально, и их можно будет выбирать. Щелкните на коман-

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

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

или просто добавить к ней какие-то клавиши. После редактирования комбинации клавиш

щелкните на кнопке Change (Изменить). После как новый набор будет полностью со-

ставлен, щелкните на кнопке ОК.

ГЛАВА 2. ИНТЕРФЕЙС FLASH 51

Current

Macromedia

3

Flash

Illustrator

Illustrator 9

Photoshop 5

Photoshop 6

Commands: [ Commands

fr

>

>

2. Воспользуйтесь одним из имеющихся наборов клавиш бы-

строго доступа или создайте свой собственный

БИБЛИОТЕКА

Библиотека является местом размещения символов и импортированных элементов филь-

ма. Библиотека представляет собой список содержимого, где перед каждым элементом раз-

мещена пиктограмма, указывающая на его тип. Элементы можно группировать в папки, каж-

дую из которых можно разворачивать отдельно, что позволит минимизировать прокрутку эк-

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

библиотеки быстро увеличивается по мере разработки проекта, и если их не систематизиро-

вать, наступит полная неразбериха.

СОЗДАНИЕ ОБЩИХ БИБЛИОТЕК

В программе Flash имеется возможность сохранения постоянных наборов библиотек по-

средством команды Common Libraries (Общие библиотеки). Создав общую библиотеку,

предназначенную для работы над определенным проектом, можно быть уверенным в том, что

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

Во Flash MX имеется несколько встроенных общих библиотек, содержащих образцы кно-

пок и звуковых файлов. Доступ к этим библиотекам можно получить посредством команды

Libraries библиотеки).

52 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

К ФИЛЬМА

На панели Movie Explorer (Проводник фильма) представлена иерархическая структура

каждого элемента Flash-фильма. Здесь можно отобразить все содержимое фильма

по каждому слою или сцене, как показано на рис. Это позволяет, например, найти и за-

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

кой-то элемент, обязательно воспользуйтесь панелью Movie Explorer, и все проблемы будут

быстро решены. Можете даже сделать распечатку, чтобы иметь наглядное представление о

структуре фильма и его элементах.

Для открытия панели Movie Explorer выполните команду Explorer. Восполь-

зовавшись кнопками-фильтрами, расположенными в верхней части окна, можно установить,

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

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

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

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

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

Для выделения элемента в списке нужно дважды щелкнуть на нем. Если дважды щелкнуть на

тексте, его можно будет отредактировать прямо на панели Movie Explorer. Меню параметров

(его кнопка располагается в правом верхнем углу панели) позволяет переименовывать экзем-

пляры и символы, редактировать символы прямо в рабочем поле или в новом окне, перехо-

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

щелчка на строке кода последний откроется в окне редактора ActionScript Editor.

ЗАДАНИЕ ПАРАМЕТРОВ FLASH

Для задания глобальных параметров среды проектирования предназначено диалоговое

окно Preferences (Параметры), показанное на рис. 2.13, которое открывается после выпол-

нения команды Большинство задаваемых парамет-

меню Options (Параметры)

fr 10

|

> for 2

* for 3

for

|

Д

> ''•

for

Go to Symbol

Select Symbol Instances

Find

Show Movie Dements

Show Symbol

All

Copy

Branch

Branch

Others

.' :

Help

Panel

Panel

Рис. 2.12. На панели Movie Explorer отображено полное со-

держимое фильма

ГЛАВА 2. ИНТЕРФЕЙС FLASH 53

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

даваемые параметры будут зеркальным отображением настроек другого, хорошо знакомого

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

ную для себя среду проектирования.

ОБЩИЕ НАСТРОЙКИ

Первым параметром вкладки General Preferences (Общие настройки) (см. рис. 2.13) является

Undo Levels (Уровни отмены). Он определяет число отмен и повтора команд, хранящихся в памяти во

время каждого сеанса работы. Диапазон значений может 0 до 200; по умолчанию задано зна-

чение 100. Чем больше число, тем больше памяти будет задействовано для хранения данных, необхо-

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

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

Далее пользователи Windows увидят параметр Printing Options (Параметры печати) с оп-

цией Disable PostScript (Отключить язык PostScript), которая по умолчанию отключена. Если

при печати файла на принтере, поддерживающем PostScript, у вас возникли проблемы, уста-

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

леннее. На компьютерах Macintosh параметр Printing Options отсутствует.

Затем следуют поля опции Selection Options (Параметры выделения): Shift Select

(Выделение с помощью клавиши и Show Tooltips (Показывать всплывающие под-

сказки об инструментах). По умолчанию флажки установлены в полях обеих опций. Если ус-

тановлен флажок в поле опции Shift Select, то после щелчка в рабочем поле можно будет вы-

делить только один объект. Чтобы к выделенному фрагменту можно было добавить дополни-

тельные объекты, при выделении необходимо удерживать нажатой клавишу Если

снять флажок с поля опции Shift Select, то после щелчка в рабочей области к выделенному

фрагменту будут автоматически добавляться другие объекты.

Если установлен флажок в поле опции Show Tooltips, то при наведении указателя мыши

на тот или иной инструмент на экране будет отображаться контекстная информация о дан-

ном инструменте, в том числе и клавиши быстрого доступа к нему (если таковые имеются).

Эта функция особенно полезна для тех, кто только начинает осваивать Flash MX.

Теперь рассмотрим опции группы Timeline Options (Параметры временной шкалы). Уста-

новление флажка в поле Disable Timeline Docking (Отключить привязку временной шкалы)

Undo

Options: И Shift Select

D Span Selection

Color ft color

О color

54

Рис, Диалоговое окно Preferences для

настройки глобальных параметров среды проектирования

ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

препятствует привязке панели Timeline к рабочей области, в результате чего она всегда будет

плавающей. Данной функцией можно воспользоваться для максимально возможного увели-

чения рабочего поля пространстве экрана. По умолчанию флажок в поле

опции Disable Timeline Docking не установлен.

Параметр Span Based Selection (Выделение в пределах диапазона) является новым

способом выделения кадров на панели Timeline шкала) (рис. Ко-

гда установлен флажок в поле данной опции, после щелчка на каком-либо кадре на

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

ключевыми кадрами, либо между начальным и конечным кадрами (если ключевые кадры отсут-

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

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

димо щелкнуть на нем правой кнопкой мыши либо при щелчке удерживать нажатой клавишу

(для Macintosh) или <Ctrl> (для Windows). Если флажок в поле опции Span Based Se-

lection не установлен (по умолчанию), то после щелчка на кадре будет выделен только этот кадр.

Таким образом производилось выделение кадров в программе Flash 5.

Опция Named Anchor on Scene (Имено-

ванный анкер на сцене) также является ново-

введением Rash MX. Теперь можно добавлять

именованные анкеры так, чтобы после щелчка

на кнопке Forward (Вперед) или Back (Назад) броузера

можно было переходить от одной сцены фильма к другой.

можно разместить и для от одного к

мышью выделить целый диапазон

другому, но делать это придется вручную. Если в поле оп-

ции Named Anchor on Scene установлен флажок, програм-

ма автоматически помещает именованный анкер в первый

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

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

преследуют чисто организационные цели.

Параметр Highlight Color Options (Параметры цвета выделения) определяет цвет ограничи-

тельного контура, обрамляющего объекты и элементы при их выделении. Установка пере-

ключателя в поле опции Use This Color (Использовать данный цвет) позволяет выбрать лю-

бой Web-безопасный цвет из имеющейся цветовой палитры. Если установлен переключатель

в поле опции Use Layer Color (Использовать цвет слоя), то при работе с программой цвет бу-

дет назначаться в соответствии со слоем, на котором располагается данный объект. При соз-

дании каждого слоя для него назначается цвет. Этот же цвет используется для заполнения

цветного квадрата, который расположен справа от имени слоя. Установка переключателя в

поле опции Use Layer Color позволяет быстро определить, в каком слое располагается объект.

Новой функцией Flash MX является автоматическая подсказка о замене недос-

тающих шрифтов при открытии фильма, содержащего не установлен-

ные в системе. Параметр Font Mapping Default (Отображение шрифтов по умол-

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

при замене недостающих шрифтов.

ПАРАМЕТРЫ РЕДАКТИРОВАНИЯ

Во вкладке Editing Preferences (Параметры редактирования) сосредоточены параметры

настройки рисования, инструмента Реп (Перо), а также параметры расположения текста по

вертикали. Все параметры данной вкладки по умолчанию отключены.

ГЛАВА 2. ИНТЕРФЕЙС FLASH 55

В группу опций Pen Tools (Инструменты пера) входит параметр Show Pen Preview

(Предварительный просмотр пера), позволяющий предварительно просматривать сегменты

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

создана конечная точка. Если в поле данной опции флажок не установлен, то создаваемые

сегменты нельзя будет увидеть до тех пока не будет создана конечная точка.

При установке флажка в поле опции Show Solid Points (Показывать сплошные точки) не-

выделенные анкерные точки будут отображаться сплошными, а выделенные анкерные точ-

ки — пустыми. Если флажок в поле данной опции не установлен (по умолчанию), выделен-

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

На заметку Чтобы получить возможность работать с именованными анкерами, откройте

диалоговое окно Publish Settings (Параметры публикации), перейдите во

вкладку HTML и из раскрывающегося меню Template (Шаблон) выберите пункт

Flash with Named Anchors (Flash с именованными анкерами).

Если установлен флажок в поле опции Show Precise Cursors (Показывать точные курсо-

ры), то в рабочем поле инструмент Реп будет иметь вид перекрестия, что облегчает процедуру

точного размещения анкерных точек. По умолчанию при использовании инструмента Реп

отображается его пиктограмма. Чтобы в процессе рисования переключаться между этими на-

стройками, воспользуйтесь клавишей <Caps LockX

В программе Rash MX текст можно располагать как по горизонтали, так и по вертикали. Для

этого достаточно щелкнуть на кнопке Text Direction (Направление текста), расположенной на

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

с облегчением. Теперь по умолчанию текст можно располагать по вертикали, установив флажок

в поле опции Default Text Orientation (Ориентация текста по умолчанию), расположенной в

группе Vertical Text (Расположение текста по вертикали). Помимо этого, можно воспользовать-

ся опциями Right to Left Text Flow (Написание текста справа налево) и No Kerning (Без кер-

нинга). Даже если установлен флажок в поле опции No Kerning, вы все равно сможете задавать

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

Параметры категории Drawing Settings (Параметры рисования) позволяют установить

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

для всех параметров выбрано значение Normal (Обычное).

Параметр Connect Lines (Соединять линии) определяет, насколько близко может распо-

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

ней. Кроме того, он определяет чувствительность распознавания горизонтальной и верти-

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

вана линия для того, чтобы было выполнено соответствующее выравнивание. При включен-

ной опции Snap to Objects (Привязка к объектам) данный параметр определяет, насколько

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

другу. Данный параметр может принимать значения Must Be Close (Должны быть рядом),

Normal (Обычно) и Can Be Distant (Могут отстоять).

При работе в режиме Straighten (Спрямление) или Smooth (Сглаживание) параметр Smooth

Curves (Гладкие кривые) указывает степень применения сглаживания или выпрямления к кри-

вым или к прямым линиям. При сглаживании из кривых удаляются точки, что приводит к соз-

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

может иметь значения Off (Отключить), Strict (Строго), Normal (Обычно), Tolerant (Допустимо).

Параметр Recognize Lines (Распознавание линий) определяет пороговое значение, при

котором программа распознает как линии неровные сегменты, нарисованные с помощью ин-

струмента Pencil (Карандаш), и преобразует их в строгие прямые. Данный параметр может

иметь значения Off (Отключить), Strict (Строго), Normal (Обычно), Tolerant (Допустимо).

56 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Параметр Recognize Shapes (Распознавание форм) определяет, насколько точно должна

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

как круг, овал, квадрат, прямоугольник или дуга. Данный параметр может иметь значения Off

(Отключить), Strict (Строго), Normal (Обычно), Tolerant (Допустимо).

Параметр Click Accuracy (Точность щелчка) определяет пороговое значение того, насколько

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

метр может иметь значения Strict (Строго), Normal (Обычно) и Tolerant (Допустимо).

ПАРАМЕТРЫ БУФЕРА ОБМЕНА

Параметры вкладки Clipboard Preferences (Параметры буфера обмена) определяют, ка-

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

FreeHand Text (Текст FreeHand), зависят от используемой платформы. '

В распоряжении пользователей Windows имеются группы опций Bitmaps (Растровые изображе-

ния) и Gradients (Градиентное заполнение). В группе Bitmaps можно указать глубину цвета (Color

Depth) и разрешение (Resolution), применить сглаживание контурных неровностей (установив фла-

жок в поле опции Smooth) и указать предельный объем памяти, допустимый при копировании рас-

тровых изображений в буфер обмена (опция Size Limit). Если объем памяти ограничен, можно

уменьшить значение, по умолчанию установленное в поле Size Limit (Ограничить объем).

Параметр Gradients (Градиентное заполнение) позволяет указать качество градиентного

заполнения, копируемого в буфер обмена и вставляемого в другие приложения. Данный па-

раметр не влияет на качество градиентного заполнения, вставляемого в программе Flash, по-

скольку оно всегда является максимальным.

Пользователи Macintosh могут группой параметров PICT Settings (Параметры

изображения), в состав которой входят опции Туре (Тип), Resolution (Разрешение) и Gradients

(Градиентное заполнение). Параметр Туре определяет формат копирования графики. Данный пара-

метр может принимать значения Objects (для работы с векторной графикой) или Bitmaps (Растровые

изображения) с указанием диапазона битовой глубины. Параметр Resolution (Разрешение) определя-

ет число точек на дюйм (dpi) в копируемых изображениях. Здесь же имеется поле опции, предназна-

ченное для включения данных PostScript. Параметр Gradients указывает качество градиентного за-

полнения графики, копируемой и вставляемой не в программу Flash. По умолчанию для данного па-

раметра задано значение Normal (Обычное), но можно выбрать и значения None (Нет), Fast

(Быстрое) и Best (Наилучшее). Чем выше параметр качества, тем дольше будет копироваться графика.

Как и аналогичный параметр для Windows, данный параметр не влияет на градиентного за-

полнения, вставляемого во Flash, поскольку здесь всегда поддерживается максимальное качество.

Для параметра FreeHand Text имеется только поле опции Maintain Text as Blocks

(Поддерживать текст в виде блоков). Установив флажок в поле данной опции, вы сможете

вставить текст из программы FreeHand и сохранить его доступным для редактирования.

НАСТРОЙКА ПРЕДУПРЕЖДАЮЩИХ СООБЩЕНИЙ

Во вкладке Warning Preferences (Параметры предупреждающих сообщений) можно ука-

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

чанию включены все опции.

• Warn on Save for Macromedia Flash 5 Compatibility (Предупреждать о совместимости

при сохранении в формате Macromedia Flash 5). Предупреждающее сообщение будет

выводиться при попытке сохранить файлы с содержимым Flash MX в формате Flash 5.

• Warn on Missing Fonts (Предупреждать об отсутствующих шрифтах). Предупреждаю-

щее сообщение будет выводиться при попытке открытия файла, содержащего шриф-

ты, не установленные в вашей системе.

ГЛАВА 2. ИНТЕРФЕЙС FLASH 57

• Warn on Loss of Expert Mode Formatting (Предупреждать о потере форматирования

режима Expert). Предупреждающее сообщение будет выводиться при попытке перейти

из режима Expert в режим Normal на панели Actions с потерей при-

мененного в режиме Expert.

• Warn on Reading Generator Content (Предупреждать при считывании содержимого

программы Generator). Поверх любого содержимого программы Generator будет ото-

бражен символ X красного цвета. Запомните, что объекты программы Generator боль-

ше не поддерживаются.

• Warn on Inserting Frames When Importing Content (Предупреждать о вставке кадров

при импортировании содержимого). Предупреждающее сообщение будет выводиться

в случае необходимости расширения панели Timeline, чтобы она могла вместить им-

портируемое содержимое.

ПАРАМЕТРЫ РЕДАКТОРА ACTIONSCRIPT

Доступ к параметрам редактора ActionScript можно также получить с панели Actions

(Действия), выбрав из всплывающего меню пункт Preferences (Параметры).

Группа опций Editing Options (Параметры редактирования) позволяет настраивать параметры

форматирования при работе с панелью Actions. При работе в режиме Expert установка флажка в поле

опции Automatic Indentation (Автоматический отступ) устанавливает отступ кода. Для задания вели-

чины отступа в поле Tab Size (Величина отступа) вводится число от 1 до 4 (задано по умолчанию).

При установке флажка в поле опции Code Hints (Советы по использованию кода) по мере ввода кода

как в режиме Normal, так и в режиме Expert на экран будет выводиться панель с подсказками. Пере-

мещение ползунка Delay (Задержка) позволяет отрегулировать временной по истечении

которого будет открываться панель Code Hints. По умолчанию ползунок установлен в значение 0.

Параметры группы Text (Текст) позволяют указать тип и размер шрифта, отображаемого

на панели Actions.

Параметры Syntax Coloring (Выделение синтаксиса цветом) предназначены для зада-

ния цвета текста синтаксических элементов, таких как ключевые слова (Keywords), идентификато-

ры (Identifiers), комментарии (Comments) и строки (Strings), переднего (Foreground) и заднего

плана (Background).

Все параметры редактора ActionScript имеют значения, заданные по умолчанию. Чтобы

вернуться к этим настройкам, щелкните на кнопке Reset to Defaults (Восстановить значения

по умолчанию), расположенной в нижней части окна Preferences.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Я пробовал работать с параметрами и расположением панелей и случайно скрыл

нужную панель. Помогите!

Не паникуйте. Панели легко восстановить на экране. Для этого есть несколько способов.

• Откройте меню Window (Окно) и выберите панель, которую следует отобразить.

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

• Если неожиданно исчезли все панели, скорее всего, вы случайно нажали клавишу

Нажмите ее еще раз, и панели снова появятся на экране.

• Набор панелей, отображаемый по умолчанию, всегда можно восстановить, выполнив

команду Layout

по умолчанию).

58 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

FLASH ЗА СОЗДАНИЕ ИДЕАЛЬНОГО

ИНТЕРФЕЙСА FLASH MX

После того как вы немного поработаете с Flash, вы будете знать, какие наборы панелей

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

используете для выполнения тех или иных задач, и сохраните их как отдельные наборы. По-

тратив совсем немного времени на создание нужных наборов панелей, вы в дальнейшем су-

щественно увеличите эффективность своей работы.

При работе с Flash я пользуюсь набором панелей для рисования и создания сценариев. В

набор для рисования, изображенный на рис. входят панели Timeline шкала),

Property Inspector (Инспектор свойств), Align (Выравнивание), Color Mixer (Цветовой мик-

шер), Color Swatches (Каталоги цветов), Components (Компоненты) и Library (Библиотека).

Имейте в виду, что размер рабочего поля можно увеличить, а привязанные панели можно

разворачивать по мере необходимости, что позволит увеличить размер рабочей области.

В набор для написания сценариев входят панели Timeline (Временная шкала), Editor

(Редактор ActionScript), Property Inspector (Инспектор свойств), Components

nent Parameters (Параметры компонентов) и Movie Explorer фильма).

Рис. Пользовательский набор панелей для рисования

ГЛАВА 2. ИНТЕРФЕЙС FLASH 59

ГЛАВА 3

РИСОВАНИЕ во FLASH

ЭТОЙ

Знакомство с векторной графикой 61

Использование инструментов рисования 62

Редактирование и корректирование изображений 68

Использование заливки 72

Стирание 75

Использование вспомогательных элементов компоновки 76

Создание масок 78

Возможные проблемы 79

Flash за работой: насколько большим получится изображение 79

ЗНАКОМСТВО с ВЕКТОРНОЙ ГРАФИКОЙ

Технология Flash изначально была разработана как анимационное приложение, предна-

значенное для преобразования старой, пошаговой анимации в формат, пригодный для раз-

мещения в Web. В основе Flash всегда лежала процедура рисования. Несмотря на то что в на-

стоящее время появились гораздо более современные технологии, такие как сценарии и ком-

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

начинается знакомство с Flash.

Компьютеры отображают графику в двух форматах: векторном и растровом. Растровые

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

соответствует определенное значение цвета. Будучи объединенными, разные цвета пикселей

создают форму, являющуюся изображением. В растровом изображении представлена инфор-

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

осуществляется попиксельно. Растровые изображения превосходно подходят для отображе-

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

необходимость изменить размер растрового изображения? Этого можно достичь двумя спо-

собами: либо полностью переделать изображение и воссоздать его с нужными размерами, ли-

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

Наряду с растровой графикой существует еще и векторная, в которой изображения создают-

ся с помощью линий и кривых посредством ряда сохраненных команд. Эти команды, именуе-

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

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

раздо сильнее детализировать изображение и изменять его размеры без потери четкости. Проце-

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

Векторная графика лучше всего подходит для отображения простых изображений со сплошны-

ми цветовыми участками, таких как пиктограммы, логотипы и рисованная анимация. И вектор-

ные, и растровые изображения создаются по заказу клиента, но файлы векторных изображений

имеют меньшие размеры, и создать их можно быстрее. Растровые изображения передаются по-

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

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

ваются процессором, т.е. размер файла и скорость отображения определяются сложностью пе-

реданных инструкций, а не размером графического файла.

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

что она работает с векторными изображениями. В программе могут быть отображены и растровые

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

ИСПОЛЬЗОВАНИЕ ИНСТРУМЕНТОВ РИСОВАНИЯ

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

программе Flash. Нарисованные во Flash изображения состоят из штрихов и заливки (или

того и другого). Штрихи являются контуром, внутри которого располагается заливка. Даже в

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

друга. Это позволяет задавать их атрибуты индивидуально и даже перемещать их независимо

друг от друга, в результате чего создаются достаточно необычные эффекты.

Изображения, наложенные друг на друга в пределах одного слоя, взаимодействуют. Изо-

бражение, нарисованное поверх другого, заменяет собой те участки исходного изображения,

которые оно закрывает. При соприкосновении изображения одного цвета сливаются друг с

другом, а изображения разных цветов остаются отдельными, даже несмотря на то, что их на-

ложенные участки заменяются. Линии, нарисованные с помощью инструментов Pencil

(Карандаш), Line (Линия), Brush (Кисть), Oval (Овал) или Rectangle (Прямоугольник), раз-

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

жения, расположенные под ними.

Подробная информация обо всех инструментах представлена в главе 2

"Интерфейс Flash".

Этим необычным поведением можно воспользоваться для создания интересных негативных

изображений. Чтобы запретить взаимодействие изображений, сгруппируйте их (выделив и вы-

полнив команду или поместите их в отдельные слои.

При рисовании цвета штриха и заливки будут такими, как указаны в полях Stroke

(Штрих) и Fill (Заливка) на панели инструментов, или на панели инспектора свойств при ра-

боте с определенным инструментом, или на панели Color Mixer (Цветовой микшер). Цвет, за-

62 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

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

изображение имеет контур, но заливка может применяться только к изображениям, имею-

щим замкнутые внутренние области.

ИНСТРУМЕНТ LINE

Line (Линия) является одним из основных инструментов рисования. С его помощью мож-

но нарисовать прямые линии или штрихи. Выберите инструмент Line, а затем щелкните в ра-

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

при перетаскивании клавишу можно расположить линии строго по горизонтали, по

вертикали или по диагонали.

Инструмент Line можно использовать и для создания замкнутых фигур, таких как квадра-

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

придется добавлять вручную, с помощью инструмента Paint Bucket (Заливка), после того, как

форма будет замкнута.

ИНСТРУМЕНТ PENCIL

Инструмент Pencil (Карандаш) позволяет создавать линии и изображения неправильной

формы. Выберите инструмент Pencil, а затем в подразделе Options (Параметры) панели инст-

рументов выберите один из режимов карандаша, позволяющих в процессе рисования спрям-

лять линии, сглаживать или оставлять их шероховатыми (с этой целью применяется модифи-

катор Ink После выбора инструмента щелкните в рабочем поле и перетащите кур-

сор. В результате будет нарисована линия. Удерживая клавишу <Shift>, можно располагать

линии строго по горизонтали или по вертикали. Как и при работе с инструментом Line, с по-

мощью инструмента Pencil можно создавать замкнутые фигуры, но для их заливки придется

отдельно применять инструмент Paint Bucket.

ИНСТРУМЕНТЫ OVAL и RECTANGLE

Инструменты Oval (Овал) и Rectangle (Прямоугольник) позволяют легко нарисовать про-

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

ментом и перетащите курсор. Для создания идеальных квадратов и окружностей при перетас-

кивании удерживайте нажатой клавишу

С помощью данных инструментов можно создать прямоугольники со скругленными уг-

лами. Задача эта весьма кропотливая, но при наличии терпения можно добиться впечатляю-

щих результатов. Сначала выберите инструмент Rectangle, а затем в нижней части панели

инструментов выберите модификатор Round Rectangle Radius (Радиус закругления углов

прямоугольника). В поле Corner Radius (Радиус закругления) введите числовое значение.

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

выбирается методом проб и ошибок.

ИНСТРУМЕНТ PEN

Инструмент Реп (Перо) является самым мощным средством рисования. Тем, кто раньше

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

бенно к тому, как он рисует кривые. Вам придется потратить некоторое время, чтобы научиться

использовать всю мощь инструмента, но в результате вы будете рисовать такие кривые и изо-

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

рисования инструментом Реп заключается в создании анкерных точек и их по-

следующем соединении. Выберите инструмент Реп и перетащите указатель мыши по рабоче-

му полю. Обратите внимание на то, что справа от пера располагается маленький символ х

(рис. 3.1), сигнализирующий о размещении первой анкерной точки.

ГЛАВА 3. РИСОВАНИЕ во FLASH 63

Рис. При инструмента Реп справа от пера располагается символ х,

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

СОЗДАНИЕ ПРЯМЫХ ОТРЕЗКОВ

Для создания отрезков выберите инструмент Реп и разместите первую анкерную точку. Она

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

ров. Если при работе с инструментом Реп удерживать клавишу будут нарисованы гори-

зонтальные, вертикальные или расположенные по диагонали (т.е. под углом 45°) линии. Про-

цесс задания анкерных точек необходимо закончить, сообщив тем самым Rash о том, что траек-

тория замкнутой или незамкнутой формы завершена. Для завершения разомкнутой траектории

либо дважды щелкните в конечной анкерной точке, либо щелкните вне траектории, удерживая

нажатой клавишу <Cmd> (Macintosh) или <Ctrl> (Windows), либо щелкните на инструменте Реп

панели инструментов. Для завершении замкнутой траектории удерживайте инструмент Реп над

первой анкерной точкой. На рис. 3.2 показано, что справа от пера появится маленький кружок,

свидетельствующий о том, что вы замыкаете траекторию.

Рис. 3.2. Если инструмент Реп правильно размещен при замыкании траектории, то

справа от него появится маленький кружок

СОЗДАНИЕ КРИВОЛИНЕЙНЫХ СЕГМЕНТОВ

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

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

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

маркера (рис. 3.3). Чтобы нарисовать кривую с помощью инструмента Реп, щелкните им в

рабочем поле и перетащите анкерные точки в том направлении, в котором хотите нарисовать

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

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

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

Рис. 3.3. Две анкерных точки и два управляющих маркера

Если перетащить второй анкер в том же направлении, что и первый, будет нарисована

зигзагообразная кривая (рис. 3.4).

64 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Рис. 3.4. анкерных точек в одном направлении приводит к

созданию зигзагообразной кривой

Длина и угол управляющих маркеров определяют форму кривой. Лучше всего завершить

создание траектории перед корректировкой кривых. Чтобы мастерски рисовать кривые Бе-

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

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

не занимались этим, сначала нарисуйте приблизительную форму кривой, а затем займитесь

ее корректировкой. Чтобы замкнуть криволинейную траекторию, щелкните в начальной ан-

керной точке и перетащите курсор в сторону от кривой, как показано на рис. 3.5.

Рис. 3.5. Чтобы замкнуть криволинейную траекторию, щелкните в начальной

анкерной точке и перетащите курсор в сторону от кривой

КОРРЕКТИРОВКА АНКЕРНЫХ ТОЧЕК

Самый быстрый способ рисования инструментом Реп заключается в создании траектории и

последующей корректировке анкерных точек. Анкерные точки криволинейных траекторий

имеют управляющие маркеры, а анкерные точки прямых отрезков являются угловыми точками.

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

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

Чтобы откорректировать анкерные точки, сначала их нужно выделить. Место размещения

анкерных точек в криволинейных и неоднородных контурах может быть далеко не очевид-

ным. Для отображения анкерных точек выберите инструмент Subselection (Частичное выде-

ление) и щелкните на контуре (рис. 3.6).

Рис. 3.6. Для отображения анкерных точек щелкните на контуре инстру-

ментом Subselection

ГЛАВА 3. РИСОВАНИЕ во FLASH 65

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

все остальные анкерные точки контура. Щелчок на контуре вне анкерной точки приведет к

отображению анкерных точек, а для выделения точки нужно будет щелкнуть непосредствен-

но на ней. Чтобы добавить к выделенному контуру дополнительные анкерные точки, при

щелчке удерживайте нажатой клавишу <Shift>. Для перемещения анкерных точек щелкните

и перетащите курсор, как показано на рис. 3.7. Чтобы лишь слегка передвинуть анкерную

точку, выделите ее и клавишами со стрелками.

Рис. Для изменения формы кривой щелкните и перетащите управляю-

щий маркер

При редактировании контура может возникнуть необходимость преобразовать угловую

точку в точку кривой в целях добавления кривых или выполнить обратное преобразование

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

управляющий маркер, удерживая при перетаскивании нажатой клавишу <Option>

(Macintosh) или <Alt> (Windows). Перетащите управляющий маркер в направлении необхо-

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

керные точки с помощью инструмента Subselection. Затем выберите инструмент и

щелкните на точке кривой, в результате чего она будет преобразована в угловую точку.

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

тализации или, наоборот, упрощения. Дополнительные точки позволяют детализировать

контур, добавляя к нему кривые или Для добавления анкерной точки щелкните на кон-

туре инструментом Реп. Для упрощения контура следует удалить анкерные точки. Для этого

щелкните на точке инструментом Subselection и нажмите клавишу <Delete>. Кроме того,

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

дважды — для удаления точки кривой.

КОРРЕКТИРОВКА СЕГМЕНТОВ

Сегменты контура можно редактировать независимо от их анкерных точек. К примеру,

может возникнуть необходимость откорректировать небольшой участок кривой. Чтобы от-

корректировать размеры и угол кривизны, щелкните и перетащите управляющие маркеры.

Если пересекаются два криволинейных сегмента, два управляющих маркера будут направле-

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

стороны относительно общей анкерной точки. Перетаскивание одного конца двунаправлен-

ного маркера изменит обе кривые с обеих сторон от анкерной точки, которая останется на

своем месте, как показано на рис. 3.8.

Рис. 3.8. одного конца двунаправленного маркера изменит

обе кривые с обеих сторон от общей анкерной точки

66 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Чтобы откорректировать дугу криволинейного участка между двумя анкерными точками,

перетащите один конец двунаправленного маркера, удерживая при этом нажатой клавишу

<0ption> (Macintosh) или <Alt> (Windows).

Если криволинейный отрезок пересекается с прямолинейным, управляющий маркер бу-

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

инструментом Subselection и перетащите его, а для кривой щелкните и пере-

тащите анкерную точку.

Для перемещения сегментов можно воспользоваться инструментом Arrow (Стрелка). Если

инструмент Arrow расположить над контуром, то справа от стрелки появится маленький уго-

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

волинейного сегмента справа от стрелки появится маленькая кривая линия (рис. 3.9).

Рис. 3.9. Если инструмент Arrow расположить над криволинейным сегмен-

том, то рядом с указателем появится маленькая дуга

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

на рис. Чтобы переместить сегмент, щелкните и перетащите его.

Рис. 3.10. Если инструмент Arrow расположить над отрезком прямой, то

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

ИНСТРУМЕНТ BRUSH

Инструмент Brush (Кисть) заслуживает особого поскольку он является един-

ственным средством, позволяющим имитировать мазки кистью, как показано на рис. 3.11.

Чтобы получить наиболее реалистичные мазки, необходим специальный чувствительный к

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

ское перо. Попытка рисовать с мыши сродни попытке подписать квитанцию кус-

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

образом изменяют толщину штриха.

ГЛАВА 3. РИСОВАНИЕ во FLASH 67

Рис. 3.11. С помощью инструмента Brush создаются штрихи неправильной формы, по-

хожие на мазки кистью

Для корректировки размера и формы кисти выберите один из модификаторов, располо-

женных в разделе Options панели инструментов. Выбрав нужный режим кисти, можно вы-

полнить окраску обычным образом, создать только заливку, рисовать на заднем плане отно-

сительно только внутри объектов или внутри выделенного контура. Комбинируя

мазки кистью с точно нарисованными формами, можно создать очень интересную текстуру

изображения.

РЕДАКТИРОВАНИЕ и КОРРЕКТИРОВАНИЕ ИЗОБРАЖЕНИЙ

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

создать идеальное изображение. Лучше всего (особенно для новичков) создать приблизи-

тельную форму, а затем довести ее до совершенства путем редактирования. Редактировать

существующие формы гораздо легче, чем создавать их с нуля.

ИСПОЛЬЗОВАНИЕ ИНСТРУМЕНТОВ ARROW и SUBSELECTION

Вы уже знаете, что инструменты Arrow и Subselection можно использовать для редактиро-

вания контуров. Просто щелкните и перетащите нужный сегмент или точку. При перетаски-

вании анкерной точки изменятся место ее расположения, а также размер и форма прилегаю-

щих сегментов. При перетаскивании сегмента изменится его форма, а анкерные точки по обе

стороны от сегмента останутся на своих местах.

ВЫПРЯМЛЕНИЕ и СГЛАЖИВАНИЕ

Контуры и изображения, имеющие неправильную форму, можно как выпрямлять, так и

сглаживать. Предположим, что с помощью инструмента Pencil вы нарисовали несколько

кривых произвольной формы, но некоторые из них оказались слишком сильно изогнутыми

68 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

или, наоборот, слишком пологими. Чтобы откорректировать кривую, выделите ее с помощью

инструмента Arrow, а затем на панели инструментов выберите модификатор Straighten

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

буйте поочередно применить модификаторы. Нет ничего удивительного в том, что модифи-

катор Straighten не оказывает влияния на прямые линии или фигуры с прямыми сторонами.

Аналогичным образом, модификатор Smooth нельзя применить к овалам и окружностям, хо-

тя с его помощью все-таки можно немного изменить кривые линии.

ОПТИМИЗАЦИЯ КРИВЫХ

Чем больше анкерных точек содержат нарисованные кривые, тем больше вычислений не-

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

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

ных точек, кривые можно оптимизировать. Это приведет к тому, что кривые станут более

сглаженными и изящными. Делается это для того, чтобы для создания нужного изображения

использовалось необходимое и достаточное количество анкерных точек.

Для оптимизации кривой выделите контур и выполните команду

откроется диалоговое окно Optimize Curves (Оптимизировать

кривые), изображенное на рис. 3.12. В этом окне имеются ползунок Smoothing

(Сглаживание), а также параметры использования нескольких проходов и отображения ито-

гового сообщения. Задайте необходимые параметры и щелкните на кнопке ОК. Сглаживание

уменьшает по сравнению с исходной кривой число анкерных точек. Чтобы значительно

уменьшить число анкерных точек, установите флажок в поле опции Use multiple passes

(Пройти несколько раз). Это приведет к выполнению нескольких операций сглаживания, при

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

няться до тех пор, пока дальнейшая оптимизация будет возможна. При установлении флажка

в поле опции Show totals message (Показать итоговое сообщение) сравниваются исходное и

оптимизированное число кривых с указанием степени оптимизации.

Smoothing;

N1 ч

Use multiple passes (slower)

message

Кривые можно сгладить в диалоговом окне

Optimize Curves

РАБОТА со ШТРИХАМ и

Штрихом называется линия или контур изображения. Штрихи имеют три атрибута: цвет,

толщину и стиль. Цвет штриха можно задать в поле Stroke (Штрих), на панели инспектора

свойств или на панели Color Mixer. Толщину и стиль штриха можно задать только на панели

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

инспектора свойств, однако на ней можно выбрать только безопасные Web-цвета.

Палитра безопасных Web-цветов была разработана четыре или пять лет назад при попытке

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

несовместимости содержимого Web является то, что различные операционные системы и бро-

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

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

ГЛАВА 3. РИСОВАНИЕ во FLASH 69

поддерживается другой системой. Поэтому была разработана палитра безопасных Web-цветов,

содержащая цветов, общих для двух основных броузеров (Internet Explorer и Netscape

Navigator) и двух основных операционных систем, Windows и Macintosh. Эти цвета имеются в

каталоге, поддерживаемом программой Flash. Однако некоторые компьютеры имеют расши-

ренные возможности отображения цветов, поэтому было принято соглашение о том, что можно

пользоваться и цветами, не входящими в палитру безопасных Web-цветов. Кроме того,

цветов — это очень ограниченная палитра для дизайнерских разработок. В Flash

имеется панель Color Mixer (Цветовой микшер), позволяющая создавать свои собственные цвета

и оттенки, а также изменять коэффициент прозрачности цветов.

Панель инспектора свойств используется для назначения и редактирования атрибутов

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

1. Выберите подходящий инструмент рисования.

2. На контекстно-зависимой панели инспектора свойств будут отображены соответст-

вующие атрибуты (в данном случае — это атрибуты штриха, как показано на рис. 3.13).

Толщина штриха

Выпадающая палитра цвета штриха

Цвет штриха I Стиль штриха

Рис. Атрибуты штриха на панели инспектора свойств

3. Щелкните в каталоге цветов и из открывшейся палитры выберите нужный цвет.

4. Чтобы задать толщину штриха, в поле толщины штриха введите число либо восполь-

зуйтесь ползунком.

5. Толщина штриха умножается с шагом 0,25 и может лежать в диапазоне 0,25 до 10.

Чем больше число, тем толще штрих.

6. Задайте стиль штриха. Рядом с полем толщины штриха расположено раскрывающееся

меню, из которого можно выбрать один из наиболее распространенных стилей штриха

(рис. 3.14). Стиль Hairline (Волосяная линия) соответствует самому тонкому штриху,

толщиной 0,25. При этом ранее заданная толщина штриха не принимается во внима-

ние. Штрихи всех остальных стилей могут быть любой толщины.

Для создания собственного стиля штриха щелкните на кнопке Custom (Настройка), в ре-

зультате чего откроется диалоговое окно Stroke Style (Стиль штриха), изображенное на

рис. 3.15. Подходите к созданию стиля с умом. Помните, что сложные линии, особенно не-

Рис. Для задания стиля штриха воспользуйтесь панелью инспектора свойств

70 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

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

зывается на размере файла и скорости отображении линий.

На заметку Использование любого из стилей пунктирной линии существенно влияет на

размер файла и скорость воспроизведения изображения. Пользуйтесь такими

стилями очень осторожно.

Чтобы отредактировать стиль, сначала убедитесь, что в рабочем поле ни-

чего не выделено. Штрихи можно редактировать с помощью инструмента Ink Bottle

(Чернильница), изображенного рис.

Задайте атрибуты штриха на панели инспектора свойств, а затем щелкните на штрихе ин-

струментом Ink Bottle для применения этих атрибутов (рис.

Style в

Type:

Рис. С помощью диалогового окна Stroke Style можно создать

собственный стиль штриха

Инструмент

Bottle

(Чернильница)

Рис. Для редактирования воспользуйтесь инструментом Battle

ГЛАВА 3. РИСОВАНИЕ во FLASH 71

Рис. 3.17. При редактировании штриха измените его атрибуты на панели ин-

спектора свойств, а затем щелкните на штрихе инструментом Ink Bottle

ИСПОЛЬЗОВАНИЕ ЗАЛИВКИ

Заливка — это внутренняя область изображения, которая может представлять собой чис-

тый цвет, градиентное заполнение и даже растровый рисунок. Заливку можно применить к

любому замкнутому контуру, а изображение, нарисованное с помощью инструмента Oval

(Прямоугольник) или Rectangle (Прямоугольник), будет автоматически заполнено заливкой

(за исключением случаев, когда на панели инструментов в подразделе Colors выбрана опция

No Color (Бесцветный), как показано на рис.

Рис. Чтобы нарисовать замкнутый контур без заливки, щелкните в

поле на панели инструментов и выберите опцию No Color

Чтобы отредактировать заливку, измените ее параметры на панели Color Property

Inspector или на панели инструментов, а затем щелкните на заливке инструментом Paint

Bucket (рис. 3.19).

Рис. Чтобы отредактировать заливку, измените ее атрибуты, а за-

тем щелкните на заливке инструментом Paint Bucket

ЗАЛИВКА чистым ЦВЕТОМ

Как и при работе со штрихами, цвет заливки можно задать в трех местах: в поле Fill (Заливка)

панели инструментов, на панели инспектора свойств и на панели Color Mixer. Чтобы задать чис-

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

палитре безопасных Web-цветов, воспользуйтесь панелью Color Mixer (рис. 3.20).

На панели Color Mixer можно выбрать одну из двух моделей цветопередачи: RGB

(красный-зеленый-синий) или HSB (оттенок-насыщенность-яркость). Щелкните в правом

верхнем углу панели Color Mixer (см. рис. 3.20), из раскрывшегося всплывающего меню Mixer

72 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

выберите цветовой режим. RGB и HSB являются разными моделями воспроизведения цвета.

RGB — это стандартная аддитивная цветовая модель, созданная для просмотра графики на

мониторах компьютеров. В модели RGB цвета создаются путем смешивания основных ком-

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

нию. HSB означает "оттенок-насыщенность-яркость". В данной модели цвета определяются

в соответствии с этими тремя значениями. Если вы не привыкли к использованию модели

HSB, оставьте заданный по умолчанию режим RGB.

Затем щелкните в раскрывающемся меню Fill (Заливка) и выберите значение Solid

(Чистый). Для выбора цвета щелкните в цветовом поле. Если хотите детализировать цвет,

воспользуйтесь ползунком Brightness (Яркость). Чтобы сделать цвет частично прозрачным,

откорректируйте процентное значение в поле Alpha (Прозрачность).

На заметку При работе с панелью Color Mixer доступа к элементам управления обяза-

тельно щелкните на пиктограмме или Fills, а не в цветовом поле. После

щелчка в цветовых полях будут открываться соответствующие палитры.

Образец цвета

Цвет

Цвет

штриха

Выпадающее меню

Mixer (Микшер)

цветов

Коэффициент прозрачности

— Элемент управления яркостью

Текстовое поле Hex Edit

(Правка значения цвета)

Цветовое пространство

Рис. 3.20. Воспользовавшись панелью Color Mixer, в качестве заливки

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

безопасных Web-цветов, а также градиентное заполнение

ГРАДИЕНТНОЕ ЗАПОЛНЕНИЕ: ЛИНЕЙНОЕ и РАДИАЛЬНОЕ

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

плавный переход от одного цвета к другому. Линейное градиентное заполнение представляет

собой непрерывный переход от одного цвета к другому в диапазоне между этими цветами.

Радиальное градиентное заполнение представляет собой цветовой диапазон в круговой диа-

грамме с направленностью от центра окружности. Радиальное градиентное заполнение до-

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

Fill панели а также на панели инспектора свойств или Color Mixer в нижней

части цветовой палитры вы увидите образцы градиентного заполнения (рис. 3.21).

ГЛАВА 3. РИСОВАНИЕ во FLASH 73

Рис. 3.21. Образцы градиентного заполнения располагаются нижнем

углу всплывающего окна цветовой палитры

Пользователь может создать собственное градиентное заполнение и указать использую-

щиеся в нем цвета. Для создания пользовательского градиентного заполнения воспользуйтесь

панелью Color Mixer. Щелкните в поле Fill и выберите тип градиентного заполнения

(линейное или радиальное). При этом посередине панели Color Mixer появится панель зада-

ния градиентного заполнения вместе с соответствующими указателями (рис. 3.22).

Указатели градиентного заполнения

Линейка задания

заполнения

Рис. 3.22. соответствующими указателями на панели

Color Mixer, можно задать пользовательское градиентное заполнение

Чтобы изменить цвет градиентного заполнения, укажите, какой цвет подлежит измене-

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

ного заполнения. Затем щелкните в цветовом поле, расположенном в левом верхнем углу па-

нели Color Mixer, и выберите безопасный Web-цвет либо щелкните в цветовом пространстве и

выберите пользовательский цвет. Новый цвет отобразится на панели задания градиентного

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

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

полнения между двумя исходными указателями. Щелкните на указателе и перетащите его на

новое место. Для сохранения градиентного заполнения щелкните в правом верхнем углу па-

нели Color Mixer (см. рис. 3.20), в результате чего откроется всплывающее меню Mixer, из ко-

торого следует выбрать пункт Add Swatch (Добавить палитру). Новое градиентное заполне-

ние будет добавлено на панели Color Swatches (Каталоги цветов) текущего документа.

РАСТРОВОЕ ИЗОБРАЖЕНИЕ

Панель Color Mixer также позволяет использовать в качестве заливки растровые изобра-

жения, являющиеся альтернативой традиционной заливке чистым цветом или градиентным

заполнением. В качестве заливки можно назначить любое растровое изображение, которое к

тому же можно расположить мозаичным чтобы оно охватывало всю область заливки

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

слишком часто. Для создания растровой заливки щелкните на панели Color Mixer в поле Fill.

74 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Затем из раскрывающегося меню Fill выберите пункт Bitmap (Растровое изображение). От-

кроется диалоговое окно Import to Library (Импортировать в библиотеку), изображенное на

рис. 3.23, в котором следует выбрать нужное растровое изображение.

Растровое изображение отображается как текущий цвет в левом верхнем углу панели

Color Mixer и применяется в качестве заливки выделенного контура (рис. 3.24).

Рис. 3.23. Диалоговое окно Import to Library открывается по-

сле выбора в качестве типа заливки растрового изображения

TV

Рис. 3.24. Применить растровое изображение в качестве заливки

можно с помощью панели Mixer

СТИРАНИЕ

Инструмент Eraser (Ластик) позволяет стирать по отдельности или все штрихи и заливку в

рабочем поле.

Инструмент Eraser и модификаторы подробно описаны в главе 2

"Интерфейс Flash".

Чтобы быстро удалить содержимое рабочего поля, дважды щелкните на инструменте

Eraser. Для выборочного удаления заливки, линий, выделенной заливки или областей внутри

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

ластей заливки, выберите модификатор Faucet (Кран).

Для удаления элементов можно также выделить их инструментом Arrow (Стрелка) и на-

жать клавишу <Delete>.

ГЛАВА 3. РИСОВАНИЕ во FLASH 75

ИСПОЛЬЗОВАНИЕ ВСПОМОГАТЕЛЬНЫХ ЭЛЕМЕНТОВ

компоновки

Во Flash существует несколько вспомогательных элементов, позволяющих повысить точ-

ность рисования и создать унифицированные рисунки. Сетки, направляющие и направляю-

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

упорядоченности и Если элементы будут размещены случайным образом,

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

недоставать гармоничности.

СЕТКИ, НАПРАВЛЯЮЩИЕ И НАПРАВЛЯЮЩИЕ СЛОИ

Сетки, направляющие и направляющие слои позволяют точно расположить объекты в рабо-

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

рым можно выравнивать или привязывать объекты. При отображении сетки все рабочее поле

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

размещенными на заднем плане изображения. Направляющие представляют собой отдельные

горизонтальные или вертикальные линии, которые помещают в рабочее поле вручную. Направ-

ляющие слои позволяют создавать собственные визуальные элементы выравнивания.

Сетка представляет собой визуальный каркас для выравнивания нарисованных или по-

мещаемых в документ элементов. Сетка не экспортируется, т.е. в конечном фильме она видна

не будет. Для отображения сетки выполните команду Grid

Показать сетку). Для редактирования сетки выполните команду

Grid сетку), в результате чего откроется диа-

логовое окно Grid (Сетка), изображенное на рис. 3.25. В нем можно указать шаг сетки в пик-

селях, выбирая значения от 7 до 288.

I

| Save Default I

3.25. В диалоговом окне Grid можно изменить

параметры размера, цвета и привязки к сетке

Здесь же можно включить опцию привязки так, чтобы объекты были выровнены точно

вдоль сетки.

При включении сетки ее линии автоматически охватывают все рабочее поле, тогда как

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

нии там, где это необходимо. Направляющие являются наиболее полезным инструментом

выравнивания повторяющихся элементов, задающих структуру документа, таких как панели

меню или столбцы текста.

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

включить линейки, которые будут отображены вдоль верхней и левой сторон

рабочего поля. Для добавления направляющей щелкните на горизонтальной линейке вверху

рабочего поля и перетащите курсор вниз от нее, в результате чего будет создана

76 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

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

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

щую, щелкните на ней инструментом Arrow и перетащите в нужное место. Для привязки объ-

ектов к направляющим выполните команду to Guides

к направляющим). Чтобы удалить направляющую с рабо-

чего поля, перетащите ее с помощью инструмента Arrow на исходную линейку.

Для редактирования направляющих выполните команду Guides

Редактировать направляющие), в результате чего откроется диалого-

вое окно Guides (рис. 3.26). Его параметры аналогичны параметрам диалогового окна Grid, a

кроме того, в нем есть дополнительная кнопка Clear All (Удалить все), после щелчка на кото-

рой будут удалены все направляющие.

Color:

Snap

Show Guides

0 Sna p to Guides

Lock

rial

OK

•

','• Cancel

j

Save J

Puc. 3,26. В диалоговом окне Guides можно изменить

параметры цвета и привязки к

Направляющие слои позволяют создавать направляющие неправильной формы. С помо-

щью сетки и направляющих можно создать горизонтальные и вертикальные прямые линии,

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

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

использовании направляющих слоев пользователь не ограничен направляющими, представ-

ляющими собой перпендикулярные линии или даже вообще линии. В направляющем слое

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

для выравнивания объектов. Для создания направляющего слоя щелкните на пиктограмме

Guide (Направляющий слой), расположенной в нижней части панели слоев. Нарисуйте на-

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

тельно объектов направляющего слоя, воспользуйтесь панелью Align (Выравнивание).

ЕЛЬ ALIGN

С помощью панели Align (Выравнивание) объекты в рабочем поле можно выравнивать

относительно друг друга. Для выравнивания объектов относительно рабочего поля щелкните

на кнопке То Stage (К рабочему полю), расположенной в правой части панели (рис. 3.27).

Например, этой кнопкой можно воспользоваться для расположения объектов по центру или

вдоль левого края рабочего поля. Для выравнивания объектов относительно друг друга щелк-

ните на кнопке То Stage. Выделите два или большее число объектов и воспользуйтесь кноп-

ками группы Align для выравнивания правых или левых краев объектов, для их центрирова-

ния по горизонтали или по вертикали либо для выравнивания верхних или нижних краев.

Кнопки группы Distribute (Распределение) используются для поочередного распределения

ряда объектов: по их верхним или нижним краям, по горизонтальному или вертикальному

центру, либо по левым или правым краям.

На При выравнивании объектов относительно друг друга программа фиксирует, по

какому краю вы хотите выполнить выравнивание, а затем использует край само-

го дальнего в этом направлении объекта для выравнивания остальных объектов.

ГЛАВА 3. РИСОВАНИЕ во FLASH 77

Рис. 3.27. Align позволяет выравнивать объекты в рабочем поле от-

носительно друг друга

ПРИВЯЗКА

Еще одним способом выравнивания элементов является их привязка. Одной из са-

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

Поскольку Rash является векторной программой, то это позволяет легко и не всегда

преднамеренно помещать объекты между целыми частями пикселей. Кажущиеся

несущественными дробные части пикселей, тем не менее, могут разрушить выравнивание и

создать проблемы. Функция привязки к пикселям включена только в версию Flash MX. Привяз-

ка к пикселям реализуется путем создания сетки с шагом в один пиксель между направляющи-

ми и последующей привязки объектов рабочего поля к линиям этой сетки. Для включения при-

вязки к пикселям выполните команду to Pixels (Привязать к пикселям). Теперь лю-

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

координате пикселя. Подавляющее большинство проблем выравнивания теперь решено. Во из-

бежание проблем выравнивания изображения рекомендуется всегда включать функцию при-

вязки к пикселям. К сожалению, при открытии нового документа или новом запуске Rash

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

В процессе работы функцию привязки к пикселям можно временно нажав

клавишу <С>. При повторном нажатии этой клавиши функция снова будет включена.

На заметку Если задать увеличение рабочего поля, равное 400%, будет видна сетка при-

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

шу <Х>. Если отпустить ее, сетка появится снова.

МАСОК

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

расположенных на заднем плане. Например, текст можно использовать в качестве маски для

отображения частей изображения, расположенных в пределах контуров букв, как показано на

рис. 3.28. Создать маску очень просто. Нарисуйте простые контуры на слое, который распо-

ложен над слоем, подлежащим маскированию. Вопреки ожиданиям, маски во Flash исполь-

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

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

ните на слое правой кнопкой мыши (либо щелкните, удерживая клавишу <Ctrl>) и из

контекстного меню выберите пункт Mask (Маска). Таким образом, маска будет применена, а

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

Подробная информация об использовании

"Демонстрация мощи видеоклипов".

масок приведена в главе 17

78 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Рис. 3.28. В качестве маски можно использовать текст

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Когда я щелкаю и перетаскиваю контур, штрихи остаются на своем месте.

После щелчка на контуре, содержащем и штрихи, и будет выделен только тот из

этих элементов, на котором был выполнен щелчок. Чтобы выделить оба элемента, на контуре

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

щить ее с помощью инструмента Arrow.

Можно ли импортировать векторную графику, созданную в других приложениях?

Да, при выполнении команды можно импортировать

файлы форматов . ai и . eps программы Illustrator, но, к сожалению, только те, которые были со-

хранены в формате версии 8 или предыдущей. Импортировать можно и файлы, созданные в про-

грамме версий 7-10. При импортировании во Flash можно сохранить текстовые блоки,

слои, символы библиотеки и страницы программы FreeHand. Эта программа входит в линейку

продуктов Macromedia, поэтому неудивительно, что Flash поддерживает ее гораздо лучше.

FLASH ЗА РАБОТОЙ: НАСКОЛЬКО БОЛЬШИМ ПОЛУЧИТСЯ

ИЗОБРАЖЕНИЕ

Несмотря на все функции точного рисования, имеющиеся во Flash, не существует способа

узнать, насколько большим получится нарисованное изображение. Может показаться, что

все-таки есть какой-то способ указать, что вы хотите нарисовать квадрат 15x15 пикселей, но,

к сожалению, это не так. Вот какие возможности имеются.

• Нарисуйте контур, максимально приближенный к нужным размерам. Затем выделите и

отредактируйте его, введя правильные значения ширины и высоты на панели инспектора

свойств или Info. Этот подход несколько утомителен, но его можно использовать для

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

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

• Создайте направляющие и расположите их так, чтобы они образовывали нужные раз-

меры создаваемого объекта. Затем нарисуйте объект при включенной функции при-

вязки к направляющим. В процессе рисования объект будет привязан к направляю-

ГЛАВА 3. РИСОВАНИЕ во FLASH 79

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

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

прямоугольникам с закругленными углами, поскольку выравнивание выполняется по

прямоугольной сетке.

При работе с прямоугольниками, имеющими закругленные углы, начните с создания

закругленных углов в прямоугольнике нужных размеров. Затем выделите анкерные

точки двух соседних углов, как показано на рис. 3.29, и слегка подвиньте их с помо-

щью клавиш со стрелками до тех пор, пока прямоугольник не приобретет правильные

размеры. Этот способ может быть достаточно утомительным, но он поможет сохранить

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

Рис. 3.29. С помощью инструмента можно изменить размеры

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

закругления

80 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

ГЛАВА 4

ИСПОЛЬЗОВАНИЕ РАСТРОВЫХ

ИЗОБРАЖЕНИЙ ВО FLASH

В ЭТОЙ

Импортирование растровых изображений

Трассировка растровых изображений 87

Разбивка растровых изображений 92

Сжатие растровых изображений 93

Возможные проблемы 94

Flash за работой: анимация растровых изображений 95

ИМПОРТИРОВАНИЕ РАСТРОВЫХ ИЗОБРАЖЕНИЙ

Несмотря на то что является векторной программой, вы не ограничены работой только

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

гих форматов, в том числе и растровые изображения. Векторная графика не может конкуриро-

вать с фотореалистичностью растровых изображений. Хотя растровые изображения необходимо

редактировать в других программах, Flash позволяет импортировать и преобразовывать их.

Растровые изображения во Flash можно импортировать во множестве различных форма-

тов. Очень многое зависит от того, установлена ли в вашей системе программа QuickTime 4

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

тировать во Flash MX без установки QuickTime.

Плейер QuickTime расширяет поддержку некоторых форматов файлов и особенно полезен

при коллективном использовании файлов на компьютерах обеих платформ. В табл. 4.2 пере-

числены импортируемые форматы файлов, доступные при наличии QuickTime.

ТАБЛИЦА 4.1. ИМПОРТИРУЕМЫЕ во FLASH MX ФОРМАТЫ ФАЙЛОВ РАСТРОВЫХ ИЗОБРАЖЕНИЙ,

НЕ ТРЕБУЮЩИЕ НАЛИЧИЯ QUICKTIME

ФОРМАТ РАСШИРЕНИЕ ФАЙЛА ПЛАТФОРМА

Растровое изображение Windows

Расширенный метафайл Windows Windows

• Обе

GIF, GIF Обе

JPEG Обе

PICT Macintosh

PNG Обе

Flash Player 6 • Обе

Метафайл Windows Windows

ТАБЛИЦА 4.2. ИМПОРТИРУЕМЫЕ во FLASH MX ФОРМАТЫ ФАЙЛОВ, ДОСТУПНЫЕ ПРИ НАЛИЧИИ

QUICKTIME

ФОРМАТ РАСШИРЕНИЕ ФАЙЛА ПЛАТФОРМА

Photoshop Обе

PICT Обе

QuickTime Image .ptif Обе

Silicon Graphics Image • Обе

TGA Обе

TIFF _ _ Обе _

Несмотря на то что с помощью QuickTime можно файлы Photoshop, имею-

щиеся слои при этом выравниваются. В большинстве случаев формат импортируемых растро-

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

Процедура импортирования растровых изображений очень проста. Импортируемые эле-

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

прямо в библиотеку. Это будет особенно полезно при импортировании большого количества

файлов. Импортировать можно одновременно несколько элементов, а потом работать с каж-

дым из них индивидуально. Элементы можно также импортировать прямо в рабочее поле,

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

файл — в библиотеку.

Чтобы импортировать элемент прямо в рабочее поле, выполните команду

как показано на рис. а для импортирования элемента в библио-

теку выполните команду to Library в библиотеку).

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

(рис. 4.2), в котором следует выбрать импортируемый файл. Из раскрывающегося меню Show

(на компьютерах Macintosh) или Type of File (Тип файлов) (на компьютерах с Windows) выбе-

рите либо тип импортируемого файла, либо пункт All Formats (Все форматы). В диалоговом

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

импортирования щелкните на кнопке Open (Открыть).

82 ЧАСТЬ СРЕДА и FLASH

View Mot

New From

Open Recent

Open as

Save :

Save •

Save As

Revert •'

Export

Publish

Publish Preview

Page

Print Margins-

Quit

Рис. Чтобы импортировать файл в поле, из меню File выберите пункт

Import, а для импортирования в библиотеку — пункт Import to Library

1

Рис. 4.2. В диалоговом окне можно выбрать и предварительно просмот-

реть файлы, подлежащие импортированию

После выбора команды выбранный файл будет помещен и в рабочее поле, и в

библиотеку (рис. 4.3).

ПОДГОТОВКА РАСТРОВЫХ ИЗОБРАЖЕНИЙ К ИМПОРТИРОВАНИЮ

Несмотря на то что процедура импортирования растровых изображений очень проста, ре-

дактировать их во Flash так же, как векторную графику, нельзя. Следовательно, перед импор-

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

ны все операции их редактирования, с которыми не сможет справиться Flash. Самое главное,

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

стали такими, какие будут использоваться во Flash.

Очень важно понимать, каким образом векторная природа Flash влияет на обработку рас-

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

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

мые данные для воспроизведения изображения попиксельно. Несмотря на возможность им-

портирования растровых изображений во Flash, в распоряжении пользователя не будет всех

ГЛАВА 4. ИСПОЛЬЗОВАНИЕ РАСТРОВЫХ ИЗОБРАЖЕНИЙ во FLASH 83

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

имеющихся функций реализуются за счет увеличения размеров файла. Характерным приме-

ром является изменение размеров растрового изображения.

Размер импортированного во Flash изображения (см. рис. 4.3) слишком велик. Протести-

руем текущее растровое изображение. Для этого сначала выполните команду

Movie фильм), а затем в режиме Test — команду

Profiler пропускной способности). Текущий размер фильма составляет

60 Кбайт, как показано на рис. 4.4.

in

I

®

4.3. При выполнении команды выбранный файл будет в

библиотеку, а его экземпляр — в рабочее поле

Изменим размер растрового изображения в рабочем поле, воспользовавшись инструмен-

том Transform (Преобразование) и удерживая нажатой клавишу <Shift> для сохранения про-

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

меры растрового изображения были уменьшены на 50%, размер файла все равно составляет

60 Кбайт, как показано на рис. 4.5.

Как такое могло произойти? Ведь размер файла растрового изображения определяется раз-

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

но отобразить. Дело в том, что при работе во вступают в силу ограничения, характерные

для векторной графики. Flash не может уменьшить файл за счет уменьшения изображения.

Кроме того, при изменении размеров растровых изображений, особенно при их увеличении,

понижается качество файла. Растровые изображения содержат конечное количество пикселей.

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

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

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

венные многим некачественным изображениям, размещенным в Web.

Из всего сказанного можно сделать следующий вывод: заранее планируйте размещение

растровых изображений в своих фильмах и импортируйте их именно с такими размерами, ко-

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

Photoshop и импортируйте его во Flash, заранее уменьшив на 50%. На рис. 4.6 видно, что раз-

мер файла при этом будет на 40% меньше по сравнению с тем, что можно было бы получить

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

84 I. СРЕДА и ИНСТРУМЕНТЫ FLASH

4.4. Текущий размер импортированного растрового изобра-

жения составляет 60 Кбайт

Sat: B)

54 fr

• •

60 KB B3

(1

60 KB B)

KB

4 KB

2KB

1

400 В

" " • ' "

Даже после сжатия растрового изображения на 50% об-

щий размер все равно остается равным 60 Кбайт

ГЛАВА 4. ИСПОЛЬЗОВАНИЕ РАСТРОВЫХ ИЗОБРАЖЕНИЙ во FLASH 85

4.6. Импортирование растрового изображения с уменьшен-

ными размерами приведет к тому, что размер файла фильма

уменьшится до 36 Кбайт

Во Flash MX на панели инспектора свойств, под экземпляром растра (см. рис. 4.3), расположена

кнопка Edit (Редактировать). После щелчка на ней запустится внешняя программа, в которой можно

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

и щелкните на кнопке Edit. В результате растровое изображение будет во внешней программе

редактирования. Отредактируйте изображение и сохраните его. При этом изображение во Flash будет

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

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

тем, который был получен при изменении размеров перед импортированием (36 Кбайт). Это еще раз

говорит о том, что лучше всего спланировать заранее и уменьшить размер изображения перед его

импортированием. Если же после импортирования растрового изображения во Flash вы обнаружите,

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

ходному изображению в соответствующем графическом редакторе, измените нужным образом разме-

ры и только потом заново импортируйте изображение во Flash.

Чтобы уменьшить влияние размеров файлов импортируемых растровых изображений,

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

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

ренного выше растрового я создал версию этого файла в Photoshop и использо-

вал альфа-каналы для обрезки фона. Это привело к созданию силуэтной версии рисунка

(рис. 4.7), что уменьшило размер файла фильма до 6 Кбайт.

Короче говоря, чем лучше вы знакомы с графическими тем лучших резуль-

татов достигнете при работе с растровыми изображениями во Flash. Но даже если вы не яв-

ляетесь большим специалистом в программах редактирования изображений, то все равно

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

размеров растровых изображений перед их импортированием.

ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Fr fr

t

• •-'

7 KB

7 KB (7221

PMC. 7. Импортирование того же самого растрового изображе-

но к которому для обрезки фона были применены альфа-

привело к уменьшению размера фильма до 6 Кбайт

ТРАССИРОВКА РАСТРОВЫХ ИЗОБРАЖЕНИЙ

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

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

целом сравнение растровой и векторной графики сродни сравнению яблок и слонов. Растро-

вые и векторные изображения имеют совершенно разное предназначение. Растровые изо-

бражения лучше всего подходят для фотографий, а векторная графика — для нарисованных

изображений, содержащих участки сплошного цвета.

Подробная информация о векторной графике приведена в 3 "Рисование

во Flash".

Во Flash существует возможность преобразования растровых изображений в векторные,

что при преобразовании подходящего растрового изображения приводит к уменьшению раз-

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

Не все растровые изображения подходят для трассировки. Трассировка очень детализиро-

ванного фотографического изображения приведет к тому, что файл векторного изображения

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

простой графики, содержащей однородные цвета, которые легко описать несколькими инст-

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

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

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

ГЛАВА 4. ИСПОЛЬЗОВАНИЕ РАСТРОВЫХ ИЗОБРАЖЕНИЙ во FLASH 87

Растровые изображения против векторных: цена графики

Каждый формат, и и векторный, имеет свою стоимость, которая определяется спо-

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

осуществляется попиксельно, то стоимость определяется скоростью загрузки. Большие размеры

файлов, медленная скорость соединения, конкуренция загружаемых элементов фильма из-за

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

нию загрузки растровых изображений и, следовательно, к высокой стоимости содержимого. Что

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

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

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

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

отображения сложной векторной графики. Стоимость векторной графики может в два раза пре-

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

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

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

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

узле медленные компьютеры могут "погрязнуть" в вычислениях и да-

же "зависнуть", если передаваемые окажутся слишком сложными для исполнения.

На рис. 4.8 приведен пример изображения, хорошо подходящего трассировки. Лучше всего

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

Изображения со сложной структурой, как, например, на рис. 4.9, или с большим количе-

ством цветовых оттенков лучше оставить растровыми.

Несмотря на то что в векторный формат проще всего преобразовывать про-

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

изображениям. Применяя менее точные параметры трассировки, сложное

изображение можно упростить и создать абстрактное стилизованное

ное изображение.

Для трассировки растрового изображения выделите его экземпляр в рабочем поле, а затем

выполните команду Bitmap растровое изображе-

ние). При этом откроется диалоговое окно Trace Bitmap, как на рис.

Рис. 4.8. Благодаря простой форме цветка

и небольшому количеству цветовых от-

тенков это изображение хорошо подхо-

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

88 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Изображение, имеющее сложную структуру и мно-

жество оттенков, лучше оставить растровым

Tract

Color

pixels

Corner I

Puc. Диалоговое окно Bitmap позволяет

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

В диалоговом окне содержатся четыре параметра трассировки. Параметр Color Threshold

(Порог цвета) определяет, насколько хорошо в трассированном растровом изображении бу-

дут сохранены цветовые детали. Чем меньше число (в диапазоне от 1 до 500), тем больше от-

тенков будет сохранено и тем более сложной будет трассировка. Параметр Minimum Area

(Минимальная область) указывает число окружающих пикселей (от 1 до 1000), которые будут

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

Параметр Curve Fit (Соответствие кривой) определяет, насколько тщательно следует при-

держиваться дуг кривых при трассировке. На рис. показано, что значения данного пара-

метра варьируются от Pixels (Пиксели), соответствующего самой точной и сложной трасси-

ровке, до Very Smooth (Очень сглажено), что соответствует наименее детальной трассировке.

Параметр Corner Threshold (Порог угла) аналогичным образом указывает, насколько точ-

но следует выполнять трассировку углов. Параметр может принимать значения Many Corners

(Много углов), Normal (Обычно) и Few Corners (Мало углов). Выполните трассировку с за-

данными по умолчанию параметрами, чтобы получить базовое представление об этой опера-

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

сложная трассировка выполняется дольше. Если вы хотите получить другие результаты трас-

сировки, выполните команду или воспользуйтесь комбина-

цией клавиш <Cmd+Z> (Macintosh) или <Ctrl+Z> (Windows). Снова выполните трассировку

изображения и поэкспериментируйте с различными параметрами.

ГЛАВА 4. ИСПОЛЬЗОВАНИЕ РАСТРОВЫХ ИЗОБРАЖЕНИЙ во FLASH 89

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

тировать. Обращайте внимание и на размер файла. Менее точные параметры трассировки приво-

дят к созданию изображений меньшего размера и более импрессионистского вида (рис.

При задании параметров более точной трассировки будет создано векторное изображе-

ние, очень похожее на исходное растровое, как на рис. Однако чем сложнее трассировка,

тем большим будет размер файла.

Bitmap

V; Color Threshold:

Threshold:

Pixels

Very

Tight

Normal

Smooth

Smooth

При трассировке растрового изображе-

ния диапазон значений параметра Curve Fit варь-

ируется от Pixels до Very Smooth

Рис. После трассировки растровые изо-

бражения могут стать импрессионистскими

Рис. При более точных параметрах трас-

сировки будет получено изображение, близкое к

исходному

ОПТИМИЗАЦИЯ ТРАССИРОВАННЫХ ИЗОБРАЖЕНИЙ

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

размер исходного растрового изображения, Если вы работаете не на медленном компьютере,

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

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

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

ду в результате чего на экране будут отображены только кон-

туры изображения (рис. Чтобы вернуться к обычному виду, выполните команду

90 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Рис. Для оценки сложности выполненной трассировки просмотрите контуры

изображения

Трассировка изображения, контуры которого изображены справа, очевидно, слишком

сложна для размещения в Internet. Одним из способов уменьшить детализацию трассировки

является оптимизация кривых. Для этого выполните команду

в результате чего откроется диалоговое окно Optimize Curves

(Оптимизация кривых), приведенное на рис.

Smoothing: *

None

Options:

о fiJShow totals

Puc. 4.15. Корректируя параметры в диалоговом окне

Optimize Curves, можно упростить трассированное

изображение

Поэкспериментируйте, перетаскивая ползунок Smoothing (Сглаживание). Чтобы на экран вы-

водилось сообщение о количестве кривых и степени сглаживания, установите флажок в поле оп-

ции Show Totals Message (Показывать итоговое сообщение) и щелкните на кнопке ОК. В резуль-

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

shapes had curves.

The shape has curves.

Is a 40% reduction.

Puc. В итоговом указывают-

ся данные об общем уменьшении числа кривых

Команда Optimize Curves является очень мощным средством. Обычно с ее помощью

можно оптимизировать изображения на 40-50%. Если этого недостаточно, отмените выпол-

нение трассировки и выполните ее снова, но с другими параметрами.

ГЛАВА 4. ИСПОЛЬЗОВАНИЕ ИЗОБРАЖЕНИЙ во FLASH 91

РАЗБИВКА РАСТРОВЫХ ИЗОБРАЖЕНИЙ

Разбивка растрового изображения заключается в разделении его на составляющие пиксе-

ли, которые затем можно выделить и индивидуально редактировать. Если растровое изобра-

жение не разбито, его можно выделить и работать с ним только глобально, т.е. как с единым

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

инструментами рисования и окраски для редактирования отдельных пикселей.

Чтобы разбить растровое изображение, выделите его в рабочем поле и выполните команду

Break Apart Разбить). Затем для выделения участков растрового изобра-

жения воспользуйтесь инструментом Lasso (Лассо) с модификатором Magic Wand

(Волшебная палочка). После щелчка на растровом изображении модификатором Magic Wand

будут выделены пиксели в соответствии с цветовым диапазоном, как показано на рис.

Рис. 4,17. Модификатор Magic Wand ин-

струмента Lasso позволяет выделить

отдельные участки растрового изобра-

жения, которые помечаются точками

Для доступа к модификатору Magic Wand выберите на панели инструментов инструмент

Lasso. Затем в подразделе Options выберите модификатор Magic Wand Properties (Свойства вол-

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

Рис. 4.18. Выберите инструмент Lasso,

а затем для доступа к настройкам щелк-

ните на кнопке Magic Wand

В диалоговом окне Magic Wand Settings (Параметры волшебной палочки), изображенном

на рис. 4.19, параметр Threshold (Пороговое значение) указывает, насколько точно цвет дол-

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

выделенный фрагмент. Значения этого параметра могут лежать в диапазоне от 0 до 200. Чем

больше число, тем шире диапазон цветов, включаемых в выделенный фрагмент. Значение О

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

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

92 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Smoothing (Сглаживание) определяет, насколько гладкими должны быть края выделенного

фрагмента. Он может принимать значения Pixels (Пиксели), Rough (Грубое), Normal

(Обычное) и Smooth (Гладкое). Повторные приводят к добавлению элементов к вы-

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

Fill для изменения цветов заливки.

Magic

| [

Рис. 4.19. В диалоговом окне Magic

Wand Settings можно изменить способ

выделения фрагментов изображения

СЖАТИЕ РАСТРОВЫХ ИЗОБРАЖЕНИЙ

В связи с тем, что наличие растровых изображений может существенно увеличить размер

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

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

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

нить, откорректировав свойства растрового изображения. Эта процедура будет особенно уме-

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

вому окну Bitmap Properties (Свойства растровых изображений) выделите изображение на

панели Library (Библиотека) и щелкните на кнопке Properties (Свойства), как показано на

рис. 4.20. Можно также выделить элемент библиотеки, щелкнуть на нем правой кнопкой

мыши (Windows) либо щелкнуть, удерживая клавишу <Ctrl> (Macintosh), и из появившегося

контекстного меню выбрать пункт Properties.

Откроется диалоговое окно Bitmap Properties (рис. 4.21). Из раскрывающегося меню

Compression (Сжатие) выберите пункт Photo (JPEG) для сжатия растрового изображения в

формат JPEG. В этом случае при выполнении сжатия будут отброшены данные о некоторых

пикселях. Для сохранения исходных параметров сжатия импортированного растрового изо-

бражения установите флажок в поле опции Use Imported JPEG Data (Использовать импор-

тированные данные JPEG). При каждом сжатии JPEG-файла будут отбрасываться данные, и

качество изображения будет существенно ухудшаться. Как правило, во избежание ухудшения

качества изображения лучше всего использовать импортированные данные JPEG. Можно за-

дать новые параметры качества JPEG, но это не улучшит качество импортированного JPEG-

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

качества JPEG, снимите флажок с поля опции Use Imported JPEG Data, а в поле Quality

(Качество) введите число от 1 до 100. Если вы задаете новые параметры JPEG, обязательно

проверьте качество полученного изображения и убедитесь, что оно существенно не ухудши-

лось. Используйте формат JPEG при работе с растровыми изображениями, содержащими фо-

тографические данные и широкий диапазон полутонов.

Чтобы выполнить сжатие без потери данных о пикселях, из раскрывающегося меню Com-

pression выберите пункт Loseless (PNG/GIF) (Без потерь Данный тип сжатия

лучше использовать при работе с трассированными растровыми изображениями, представ-

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

ГЛАВА 4. ИСПОЛЬЗОВАНИЕ РАСТРОВЫХ ИЗОБРАЖЕНИЙ во FLASH 93

Чтобы сравнить размер файла, к которому применены параметры сжатия, с исходным,

щелкните на кнопке Test (Тестировать), в результате чего в нижней части диалогового окна

появятся данные о сжатии (рис. 4.22). После щелчка на кнопке Update (Обновить) вы сможе-

те увидеть эффект применения параметров, просмотрев полученное изображение в левом

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

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

те удовлетворены параметрами сжатия, щелкните на кнопке ОК.

| j

pixel

smoothing

[Photo

О Use imported JPEG data ;

I Test

I Help |

Рис. 4.21. В диалоговом окне Bitmap Properties можно указать пара-

метры сжатия импортированных растровых изображений

compressed 10.3 of original

Puc. 4.22. После щелчка на кнопке Test будет выполнено сравнение

размера файла после сжатия с исходным

Растровые изображения могут существенно увеличить привлекательность Flash-фильма,

особенно в комбинации с "родной" для программы векторной графикой. Растровые изобра-

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

тесь растровыми изображениями с осторожностью, все время обращая внимание на размер

файла, но всеми средствами старайтесь внедрять их в свои фильмы.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

в созданном фильме растровые изображения получились размытыми ?

Для растровых изображений, получившихся размытыми, проверьте параметры, заданные в

диалоговом окне Bitmap Properties. Проверьте, чтобы не был установлен флажок в поле опции

Allow Smoothing (Разрешить сглаживание), поскольку сглаживание устраняет контурные

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

Кроме того, в диалоговом окне Publish Settings (Параметры публикации) перейдите во вкладку

HTML и из раскрывающегося меню Quality (Качество) выберите пункт Best (Самое лучшее).

Подробная информация о параметрах публикации приведена в главе 30

публикация и экспортирование фильмов".

94 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Есть ли какой-то способ выполнить трассировку растрового изображения так,

чтобы на одних участках оно стало более детализированным, а на других — менее дета-

?

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

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

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

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

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

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

FLASH ЗА РАБОТОЙ: АНИМАЦИЯ РАСТРОВЫХ

ИЗОБРАЖЕНИЙ

Векторная природа Flash становится очевидной при анимации растровых изображений.

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

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

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

ственно увеличить размер файла и вызвать совершенно нежелательные эффекты, например

запинки при воспроизведении.

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

наилучших результатов анимация должна быть как можно проще. Чем меньше будут растровые

изображения, тем меньше запинок будет при воспроизведении анимации. Меньшие растровые

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

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

других эффектов. В противном случае пользователям придется долго ждать загрузки содержи-

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

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

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

размера файла. Как всегда, поэкспериментируйте с различными значениями частоты смены

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

ГЛАВА 4. ИСПОЛЬЗОВАНИЕ РАСТРОВЫХ ИЗОБРАЖЕНИЙ во FLASH 95

ГЛАВА 5

РАБОТА с ТЕКСТОМ

В ЭТОЙ ГЛАВЕ...

Инструмент Text 99

Инспектор свойств 100

Атрибуты символов 101

Атрибуты абзаца 103

Параметры текста 105

Редактирование и преобразование текста

Эффективные приемы работы с текстом

Возможные проблемы

Flash за работой: копирование текстовых полей

В программе Flash MX представлен широчайший диапазон средств работы с текстом, на-

чиная от простого статичного и заканчивая стилизованным и Более того, в

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

внешних источников. Чтобы в полном объеме освоить методы манипулирования текстом во

Flash MX, необходимо иметь четкое представление о том, как обрабатывается текст в про-

грамме, и знать некоторые специальные приемы работы с ним.

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

Как такое может происходить, учитывая ежеминутно подчеркиваемую векторную природу

Flash? Дело в том, что мониторы отображают пиксели и точки независимо от форматов при-

ложений. Как раз такой способ представления особенно неудачен для отображения букв.

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

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

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

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

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

отображения пикселей на компьютерных мониторах. Попыткой восстановления некоторой

утонченности кривых в пиксельном окружении является процедура сглаживания. При ее вы-

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

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

нечеткими. Пусть, например, имеется черный текст на белом фоне. На рис. показано, что

при выполнении процедуры сглаживания вокруг искривленных участков черных букв добав-

ляются серые пиксели.

К сожалению, процедура сглаживания приводит к тому, что текст, особенно небольшого

размера, становится нечетким (рис. 5.2).

Рис. Буква, изображенная справа, является сглаженной. Для достижения

эффекта к кривым были добавлены серые пиксели

14 text

24 point text

36 point text

Puc. Процедуру сглаживания лучше применять к шрифтам относительно

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

Можно использовать растровые шрифты, которые разработаны без использования кри-

вых и предназначены специально для отображения на компьютерах. Из-за отсутствия кривых

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

шрифты являются пиксельными, они должны иметь строго определенные размеры и пози-

ционироваться точно на целых пикселях. Такие шрифты лучше использовать при необходи-

мости отображения букв с малыми размерами.

Благодаря растущей популярности Flash растровые шрифты становятся все более доступ-

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

таких шрифтов является узел на котором представлено большое количе-

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

основного текста, а также шрифты с засечками.

98 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Ресурсы растровых шрифтов

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

Internet не был представлен какой-нибудь новый шрифт. Ниже приведено несколько полезных

ресурсов.

Совершенно фантастический ресурс, на

котором представлено огромное количество ссылок на всевозможные шрифты.

Предлагает большое количество качественных шрифтов разных

размеров. Некоторые шрифты можно загрузить бесплатно, а за 100 долларов вы получите неог-

раниченный доступ к огромному количеству шрифтов, созданных в 2002 году.

На этом узле продается большое количество шрифтов. К

сожалению, пока что эти шрифты предназначены только для PC. Бесплатно с данного узла мож-

но загрузить только некоторые шрифты, а за каждый из остальных придется платить.

Бесплатные пиксельные шрифты имеются на следующих узлах:

(для доступа к растровым шрифтам последовательно выберите

пункты Item и Font);

ИНСТРУМЕНТ TEXT

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

Snap to Pixels (Привязать к пикселям). (Для этого выполните команду Snap to

Pixels.) При этом растровые шрифты будут гарантированно выровнены по целым пикселям,

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

когда текст внедряется в пределах символов и затем помещается в основную временную шка-

лу, гарантии того, что он не будет размытым, нет.

Подробная информации о предотвращении нечеткости шрифтов приведена в

разделе "Возможные проблемы" в конце этой главы.

Для добавления текста к фильму выполните следующие действия.

1. Выберите инструмент Text.

2. Щелкните в рабочем поле, в результате чего будет создана точка ввода текста.

3. Начните ввод текста.

Вот и все, что необходимо. Кроме того, можно выбрать инструмент Text и перетащить кур-

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

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

мание, что изменяется только ширина текстового блока, тогда как высота остается неизменной.

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

Подробно о задании атрибутов текста рассказывается ниже, в разделе

"Атрибуты символов".

По мере ввода текста он будет автоматически переноситься с одной строки на другую, а

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

стового поля имеется маркер, который определяет тип текстового блока и позволяет изменять

5. РАБОТА с ТЕКСТОМ 99

его размеры. Квадрат, расположенный в правом верхнем углу текстового блока (рис. 5.3), яв-

ляется маркером фиксированного блока текста и указывает на то, что задана высота текста.

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

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

вом нижнем углу, обозначает, что текстовый блок является вертикальным. Чтобы изменить

размеры текстового блока, убедитесь, что на панели инструментов выбран инструмент Text и

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

вид горизонтальной двунаправленной стрелки. Для изменения размеров текстового блока пе-

ретащите курсор влево или вправо.

Этот маркер используется для

изменения размеров текстового поля

my is

Рис. 5.З. Для изменения размеров

текстового поля перетащите

маркер текстового блока

Для изменения размеров текстовых блоков не пользуйтесь полями Width

(Ширина) и Height (Высота) панели инспектора свойств. Это приведет к искаже-

нию текста (его растяжению или сжатию).

ИНСПЕКТОР свойств

При работе с текстом необходимо использовать инструмент Text (Текст) или Arrow

(Стрелка) в сочетании с панелью инспектора свойств. Инструмент Text определяет размеще-

ние текста, размеры текстовых блоков и используется для выделения текста в пределах тек-

стовых блоков. Инструмент Arrow используется для изменения местоположения текстовых

блоков и редактирования текстовых блоков как единого целого. На панели инспектора

свойств (рис. 5.4) задают атрибуты текста. Использовавшиеся в версии Flash 5 панели Char-

acter (Символ) и Paragraph (Абзац) теперь заменены одной панелью инспектора свойств, что

сделало редактирование текста более удобным.

Текст можно редактировать как глобально (т.е. воздействовать на текстовые блоки целиком),

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

тивным средством внесения глобальных изменений в текстовые блоки (изменение шрифта,

цвета, размера или направления шрифта) является инструмент Arrow, с помощью которого сле-

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

они автоматически будут применены ко всему текстовому блоку. Однако при таком подходе

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

интервал. Чтобы отредактировать атрибуты отдельных символов, необходимо вьщелить отдель-

ный символ с помощью инструмента Text. Любые последующие изменения, сделанные на пане-

ли инспектора свойств, будут применены только к выделенным символам.

На заметку Чтобы при редактировании текста быстро перейти от инструмента Arrow к инст-

рументу Tool, дважды щелкните в тестовом блоке инструментом Arrow. При

этом курсор примет вид точки ввода, и станет активным инструмент Text.

100 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

type

(Тип

Поле Auto Kern Кнопка Text Direction

(Автоматический кернинг) (Направление текста)

Кнопки

выравнивания

Справка

I

Межзнаковый

интервал Шрифт

Кнопка Show

borders (Показать

границы)

Кнопка

HTML

Параметры

форматирования

Кнопка расширения панели

Кнопка Rotation (Вращение)

Кнопка Text Поле Device Fonts

(Редактируемый текст) (Встроенные шрифты)

Рис. 5.4. Для задания и редактирования атрибутов текста воспользуйтесь панелью

инспектора свойств

АТРИБУТЫ символов

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

или символы, и те, что применяются к абзацам. К атрибутам символов относятся выбор

шрифта, кегль, направление текста, кернинг, межбуквенный интервал и расположение сим-

волов. Атрибуты можно задать как перед вводом текста в рабочем поле (для доступа к свойст-

вам текста на панели инспектора свойств выберите инструмент Text), так и после.

Чтобы отредактировать отдельные символы, выберите инструмент Text и выделите им

нужные буквы в рабочем поле, как показано на рис. 5.5. Затем измените параметры текста на

панели инспектора свойств.

lite, r

r

Puc. 5.5. Для редактирования отдельных в текстовом блоке щелкните и

перетащите инструмент Text

ВЫБОР ШРИФТА И КЕГЛЯ

Чтобы выбрать шрифт, введите его имя в поле Font (Шрифт) либо щелкните на кнопке

одноименного раскрывающегося меню и выберите необходимый шрифт из числа имеющихся

в системе. После ввода имени шрифта вручную необходимо щелкнуть в точке ввода в рабочем

поле. В противном случае Flash MX будет продолжать вводить текст в поле Font.

Аналогичным образом можно вручную ввести кегль в поле Point size (Кегль) либо вы-

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

сти кегль вручную гораздо легче, чем манипулировать ползунком. Я пользуюсь ползунком

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

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

ГЛАВА 5. РАБОТА с ТЕКСТОМ 101

Для выбора цвета шрифта воспользуйтесь цветовым полем. После щелчка на нем откроется

палитра безопасных Web-цветов. Выберите из нее нужный цвет. Чтобы задать свой собственный

цвет, не входящий в данную палитру, воспользуйтесь панелью Color Mixer (Цветовой микшер).

Подробная информация о работе с цветами во Flash и о панели Color Mixer

приведена в 3 "Рисование во Flash". Кроме того, можно обратиться к

разделу "Эффективные приемы работы с текстом" далее в этой главе.

Цвет заливки текста Rash назначает автоматически. К шрифту можно применить стилевое

оформление, воспользовавшись кнопками Bold (Полужирный) и Italic (Курсив), однако при этом

будет утеряна утонченность гарнитуры. Очень многие шрифты специально разработаны в версиях

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

полужирную или курсивную версию того же самого шрифта, как показано на рис. 5.6.

Рис. 5.6. Для получения наилучшего результа-

та вместо кнопки или Italic выберите по-

лужирную или курсивную версию шрифта

НАПРАВЛЕНИЕ ТЕКСТА

Новая функция Flash MX позволяет управлять направлением текста, что обеспечи-

вает возможность поддержки азиатских языков. С помощью кнопки Text Direction

(Направление текста), показанной на рис. 5.7, можно создать вертикальный текст,

направленный слева направо или справа налево.

Horizontal

to

Right to

Puc. Кнопка Text Direction позволяет выбрать горизон-

тальное или вертикальное направление текста

МЕЖЗНАКОВЫЙ ИНТЕРВАЛ

Кернингом называется интервал между двумя буквами или символами, а межзнаковым ин-

тервалом — определенный промежуток между выделенными символами или целыми текстовы-

ми блоками. И кернинг, и межзнаковый интервал можно задавать в виде положительных и от-

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

личиваться, а при задании отрицательных — уменьшаться до тех пор, пока буквы не начнут

накладываться друг на друга (рис. 5.8). Нулевое значение является нейтральным. Для достиже-

ния общей удобочитаемости текста лучше всего задавать значения от 0 до +5 или даже меньшем,

в зависимости от размера текста. Чем меньше размер шрифта, тем больше эффект от задания

межзнакового интервала. Многие шрифты сразу создаются с нужным кернингом, который

можно использовать, установив флажок в поле опции Auto Kern (Автоматический кернинг).

102 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Рис. 5.8. Межзнаковый интервал: вверху, посередине и внизу

Для задания межзнакового интервала сначала выделите буквы, слова или целые текстовые

блоки с помощью инструмента Text. Затем введите в поле Character Spacing (Межзнаковый

интервал) положительное или отрицательное число либо щелкните на кнопке раскрываю-

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

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

Кернинг вертикального текста можно отключить. При этом значение межзнакового интерва-

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

Подробная информация о задании параметров приведена в главе 2

"Интерфейс Flash".

ПОЛОЖЕНИЕ СИМВОЛА

Атрибут положения символа определяет, где именно расположен текст относительно ба-

зовой линии. Базовая линия — это невидимая горизонтальная линия, на которой расположе-

ны символы шрифта (рис. 5.9). Атрибут положения символа может иметь значения Normal

(Обычное), (Верхний индекс) и Subscript (Нижний индекс). В большинстве случа-

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

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

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

ния Supescript текст располагается выше базовой линии; это положение применяется к та-

ким специальным символам, как товарный знак (™) и зарегистрированная торговая мар-

ка (®). При выборе значения Subscript текст располагается чуть ниже базовой линии.

Верхний индекс

Базовая линий Нижний индекс

Рис. 5.9. Базовая линия — это воображаемая линия, на которой располага-

ются символы. Символы, являющиеся верхним или нижним индексом, распо-

лагаются соответственно выше или ниже базовой линии

АТРИБУТЫ АБЗАЦА

Атрибуты абзаца позволяют форматировать участки начиная от отдельных абзацев

и заканчивая целыми текстовыми блоками. Эти атрибуты являются глобальными по своей

ГЛАВА 5. РАБОТА с ТЕКСТОМ 103

природе и применяются не к отдельным буквам или словам, а к целым блокам текста. К па-

раметрам форматирования абзацев относятся выравнивание, задание полей и отступов.

Чтобы отформатировать абзац, выделите его целиком с помощью инструмента Text. Что-

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

ВЫРАВНИВАНИЕ

Для выравнивания абзацев по левому или правому краю, по центру или по всей ширине вос-

пользуйтесь кнопками Alignment (Выравнивание). При выравнивании по ширине создаются аб-

зацы газетного типа, т.е. выровненные одновременно и по правому, и по левому краю. При вы-

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

не было слишком большим. Опции выравнивания применимы и к вертикальному тексту.

При работе с растровыми шрифтами используйте заданное по умолчанию выравнивание

по левому краю. При выравнивании по правому краю, по центру и по ширине растровые

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

Самым опасным является выравнивание по ширине, при котором шрифты могут быть растя-

нуты на дробные координаты, даже при включенной функции Snap to Pixels (рис. 5.10).

Рис. Не выполняйте выравнивание по ширине при работе с растро-

выми шрифтами, так как они могут растянуться и стать нечеткими

ОТСТУПЫ, МЕЖДУСТРОЧНЫЙ ИНТЕРВАЛ И ПОЛЯ

Для задания отступов, междустрочного интервала и полей щелкните на кнопке Format

(Формат), в результате чего откроется диалоговое окно Format Options (Параметры формати-

рования), показанное на рис. Значения в пикселях можно ввести вручную либо задать

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

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

(Готово). К сожалению, в этом диалоговом окне отсутствует кнопка Cancel (Отмена), поэто-

му, перед тем как щелкнуть на кнопке Done, еще раз проверьте заданные настройки. Чтобы

вернуться к предыдущим параметрам форматирования, нажмите комбинацию клавиш

<Cmd+Z> (Macintosh) или <Ctrl+Z> (Windows).

В поле Indent (Отступ) диалогового окна Format Options указывают величину отступа (в

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

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

i

Indent

Spacing:

|0px I

Bight

Рис. В диалоговом окне Format Options можно указать атрибуты абзацев

104 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

от другого. При вводе в поле Indent положительного числа первая строка абзаца будет сдвину-

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

строка абзаца располагается левее всех остальных, как показано на рис. Задавать отрица-

тельное значение отступа имеет смысл, только если задано левое поле, в противном случае

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

Welcome to the latest,

greatest incarnation

of our site, newly

updated for summer

2002.

5,12. При задании в поле Indent отрицательного значения создает-

ся обратный отступ

Параметр Line Spacing (Междустрочный интервал) указывает промежуток (в пунктах)

между строками текста. Этот параметр является важным для удобочитаемости текста. Если

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

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

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

умолчанию междустрочный интервал составляет 120% и в целом применим для основного

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

поэкспериментировать с данным параметром и найти наиболее подходящее для каждого

конкретного случая значение.

Для параметров Left Margin (Левое поле) и Right Margin (Правое поле) указываются зна-

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

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

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

ТЕКСТА

При работе с Flash пользователь не ограничен только статическим текстом, т.е. таким, ко-

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

файле Пользователь может вводить текст в поля ввода а кроме того, текст мож-

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

вали только статический текст, который не разрешается вводить и обновлять в фильме, — все

изменения должны вноситься в файле FLA. Поля ввода данных и динамического текста мож-

но заполнять в процессе воспроизведения фильма, а работа с таким текстом осуществляется с

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

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

текст и каким образом он будет появляться при воспроизведении фильма. Атрибуты вводи-

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

инспектора свойств.

Вводимый ТЕКСТ

Вводимый текст вставляется (как при заполнении формы) в процессе воспроизведения

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

димые в них данные можно было сохранить и использовать с помощью ActionScript.

ГЛАВА 5. РАБОТА с ТЕКСТОМ 105

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

в главе 16 "Взаимодействие, события и установление последовательности".

Если вы хотите работать с вводимым текстом, убедитесь, что является активным инстру-

мент Text, и на панели инспектора свойств из раскрывающегося меню Text type (Тип текста)

выберите пункт Input Text (Вводимый текст). В рабочем поле необходимо создать текстовое

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

вый блок, выделив его и изменив значение типа текста на Input Text. Границы полей вводи-

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

кер, обозначающий блок вводимого или динамического текста. На панели инспектора

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

работе со статическим текстом. Чтобы увидеть, как будет выглядеть текст при вводе пользова-

телем, наберите что-нибудь в поле ввода (рис.

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

ли в макете графически не указано, где именно пользователь должен вводить текст, включите ото-

бражение границ поля вводимого текста, щелкнув на кнопке Show Borders (Показать границы).

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

собой черный контур с белым фоном. Если такой вид нежелателен, то поле вводимого текста мож-

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

рис. Альтернативный способ — задать цвет фона и границ с помощью ActionScript.

ДИНАМИЧЕСКИЙ ТЕКСТ

Динамический текст загружается из внешнего источника в процессе воспроизведения

фильма. "Динамическим" называется содержимое, выбираемое в процессе воспроизведения,

а не составленное заранее в файле Это — потрясающая возможность отображения со-

Welcome to the

latest incarnation

of our site, newly

updated for

summer 2002.

Format

Indent; [0

Line 2

j

Параметры Left Margin и Right Margin позволяют увеличить

расстояние по обе стороны текстового блока

Рис. Чтобы увидеть, как будет выглядеть текст, вводимый поль-

зователем, введите в поле какое-нибудь слово

106 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

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

отпадает необходимость редактирования файла FLA. На рис. видно, что текстовому полю

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

Для добавления динамического текста выполните следующие действия.

1. Из раскрывающегося меню Text type выберите пункт Dynamic Text (Динамический текст).

2. Создайте поле динамического текста в рабочем поле.

3. Как и при работе с полями вводимого текста, границы полей динамического текста

отображаются в рабочем поле в виде пунктирных линий. Маркер текстового блока рас-

положен в правом нижнем углу и свидетельствует о наличии поля вводимого или дина-

мического текста.

Чтобы увидеть, как будет выглядеть содержимое, введите что-нибудь в поле динамиче-

ского текста.

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

отображения белого фона, поместите поле поверх графического

элемента

ПАРАМЕТРЫ ФОРМАТИРОВАНИЯ ТЕКСТА

К вводимому и динамическому тексту применимо несколько специальных

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

получить доступ к свойствам с помощью ActionScript. Для этого введите уникальное имя эк-

земпляра в поле Instance Name (Имя экземпляра), расположенное под полем Text type на

панели инспектора свойств (рис.

|

j 0

Puc. Имена переменных позволяют получить доступ к содержимому тексто-

вых полей с помощью ActionScript

Подробно об использовании ActionScript для доступа к текстовым полям рассказы-

вается в главе 16 "Взаимодействие, события и установление последовательности" и

в главе 20 "Использование встроенных объектов фильмов".

Имена переменных позволяют программным способом получить доступ к текстовым по-

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

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

значить имя переменной для текстового поля, введите уникальное имя в поле Variable

(Переменная), как показано на рис.

ГЛАВА 5. РАБОТА с ТЕКСТОМ 107

С помощью раскрывающегося меню Line Type (Тип строки) можно указать, разрешается

ли вводить в текстовое поле больше одной строки. Из данного меню можно выбрать значение

Multiline (Несколько строк), разрешающее вводить несколько строк текста, или Multiline No

Wrap (Несколько строк без переноса), что позволит отображать несколько строк только в

случае ввода пользователем символа жесткого переноса посредством клавиши

(Macintosh) или <Enter> (Windows).

Поле Maximum Characters (Максимальное количество символов), расположенное в пра-

вом нижнем углу панели инспектора свойств (см. рис. 5.16), позволяет ограничить количест-

во символов, вводимых в текстовое поле.

После щелчка на кнопке Render as HTML (Отображать как HTML) HTML-

форматирование текста будет сохранено, если текстовым полям поставлены в соответствие

значения переменных или экземпляров, содержащих такое форматирование. Если данная

опция включена, то при экспортировании SWF-файлов Flash применяет к тексту соответст-

вующие дескрипторы HTML. Во Flash поддерживаются HTML-дескрипторы ссылок, полу-

жирного и курсивного начертания, подчеркивания, абзаца, а также цвета, гарнитуры и разме-

ра шрифта. Поддерживаются HTML-атрибуты левого и правого поля, отступа и междустроч-

ного интервала. Отображение текста с сохранением HTML-форматирования можно задать и

программным способом, с помощью свойства html объекта

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

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

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

вставки, отожмите кнопку Selectable Text (Выделяемый текст) (рис. 5.17).

Рис. Если отжать кнопку Selectable Text, то пользователи не

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

ВНЕДРЕННЫЕ и ВСТРОЕННЫЕ ШРИФТЫ

При создании текста в программе Flash в распоряжении дизайнера имеются все шрифты,

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

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

рование текста, которое вы выполнили столь старательно, просто пропадет? Этого не про-

изойдет, но следует предпринять некоторые шаги, которые позволят другим пользователям

увидеть именно те шрифты, которые вы хотите.

Существуют два способа. Одним из них является внедрение начертания шрифтов, которое

позволит сохранить начертание шрифтов, даже если они не установлены в другой системе. Flash

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

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

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

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

текста, не внедрены по умолчанию, и, следовательно, они не сглаживаются. Для внедрения

шрифтов выполните следующие действия.

1. В рабочем поле выберите поле динамического или вводимого текста.

2. На панели инспектора свойств щелкните на кнопке Edit Character Options

(Редактировать параметры символов). Откроется диалоговое окно Character Options

(рис. позволяющее указать параметры внедрения шрифтов.

108 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Embed

No

All Characters

О Only

letters .

| Letters (8~г)

Q

And these characters:

i

| Help

.

В диалоговом окне Character Options

можно указать, внедрено ли начертание шриф-

тов для полей динамического и вводимого текста

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

(No Characters), для всех символов Characters) или только для определенных символов

(Only). Таким образом, Flash помогает несколько уменьшить размер файла, позволяя заранее

спланировать, для каких символов в заданном текстовом поле потребуются внедренные кон-

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

цифр), не нужно внедрять никакие символы, кроме цифр. Поэтому для текстового поля даты

в диалоговом окне Character Options установите переключатель в поле опции Only (Только),

а затем установите флажок в поле опции Numerals (Цифры).

Далеко не все шрифты могут быть внедрены и экспортированы вместе с фильмом. Иногда

Flash не распознает данные о начертании шрифта. Чтобы проверить, можно ли внедрить тот

или иной шрифт, выделите текст и выполните команду Text Сгладить

текст). Если шрифт будет отображен с зазубренными краями, это значит, что Flash не распо-

знает его начертание и не сможет экспортировать.

Второй способ — это встраивание шрифтов. Операционные системы имеют ограниченное

число автоматически установленных шрифтов. Для систем Macintosh и Windows эти шрифты

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

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

ные линии (рис. а в шрифтах без засечек они отсутствуют. Машинописные шрифты яв-

ляются моноширинными, т.е. все буквы имеют одинаковую ширину. Обратите внимание, что

в машинописном шрифте и буква "А", и буква "i" имеют одинаковую ширину (рис. 5.19,

справа). Сравните это с примерами шрифтов с засечками и без засечек.

С засечками Без засечек Машинописный

Рис. Среди встроенных шрифтов есть шрифты с засечками,

без засечек и моноширинные

При выборе встроенных шрифтов они не внедряются, а вместо этого надстройка Rash Player

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

задать три типа встроенных шрифтов: _sans (без засечек), при выборе которого обычно использу-

ется шрифт Helvetica или _serif (с засечками), при выборе которого обычно используется

шрифт Times или Times New Roman, или (машинописный), при выборе которого ис-

РАБОТА с ТЕКСТОМ 109

пользуются шрифты, аналогичные Courier. Для задания встроенных шрифтов выберите соответст-

вующий пункт из раскрывающегося меню Font (Шрифт), как показано на рис. 5.20.

При использовании встроенных шрифтов размер файла

фильма будет меньше, чем при работе с внедренными шриф-

тами, но здесь присутствует элемент неопределенности. Если в

системе пользователя не установлены шрифты, соответствую-

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

замены. Встроенные шрифты не являются сглаживаемыми, Чтобы задать тип

поэтому лучше всего они отображаются при малых размерах, встроенных шрифтов,

когда сглаживание обычно приводит к нечеткому отображе- пункт из

Поскольку эти шрифты не являются сглаживаемыми, то раскрывающегося меню Font на

большого кегля их края будут зазубренными.

РЕДАКТИРОВАНИЕ и ПРЕОБРАЗОВАНИЕ ТЕКСТА

При редактировании текста во Flash можно применять базовые методики обработки тек-

ста. Текст во Flash можно копировать или вырезать, а затем вставлять в другие приложения. К

сожалению, функция проверки орфографии во Flash отсутствует. Чтобы выполнить такую

проверку, текст из Flash нужно скопировать в текстовый редактор, а затем скопировать об-

ратно (если в будут внесены какие-то изменения). Форматирование текста при этом со-

храняется. При копировании текста обратно во Flash обязательно выделите исходный фраг-

мент и замените его, иначе будет создан новый блок скопированного текста, и он будет раз-

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

Для выделения символов внутри текстового блока используется инструмент Text. Для вы-

деления нескольких символов щелкните и перетащите курсор, а для выделения целого слова

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

щелкните в начале фрагмента, а затем — в конце, удерживая нажатой клавишу <Shift>. Чтобы

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

(Macintosh) или <Ctrl+A> (Windows).

Для выделения текстового поля с целью его перемещения или копирования воспользуй-

тесь инструментом Arrow. Если при щелчке этим инструментом удерживать нажатой клавишу

можно выделить несколько текстовых полей. Чтобы скопировать и переместить тек-

стовый блок целиком, щелкните на нем, удерживая нажатой клавишу <Option> (Macintosh)

или (Windows), а затем переместите блок, воспользовавшись инструментом Arrow.

РАЗБИВКА ТЕКСТА

Во Flash MX имеется возможность разбить текст и поместить каждый его символ в

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

нить анимацию к отдельным символам. Во Flash 5 при разбивке текста он сразу пре-

образовывался в кривые, а во MX при однократном выполнении команды раз-

бивки каждый символ текста помещается в отдельный текстовый блок. Для разбивки текста вы-

полните следующие действия.

1. Выделите текстовый блок с помощью инструмента Arrow.

2. Выполните команду Apart Чтобы преобразовать

текстовые блоки символов в кривые, выполните эту команду еще раз (рис. 5.21).

После того как текст будет преобразован в кривые, он больше не будет распознаваться и

его нельзя будет редактировать как текст.

После выполнения разбивки текста Flash MX позволяет быстро разнести блоки символов с целью

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

110 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

Рис. 5.21. При первом выполнении команды разбивки каждый символ

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

выполнении текстовые блоки будут преобразованы в кривые

I D

выполнения команды Distribute to Layers каждый блок

символа будет помещен в отдельный

команду to Layers по слоям). Flash поместит каждую бу-

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

имен распределенным слоям

Каждому распределенному слою присваивается имя, соответствующее букве, которую он содержит.

Если в слове эта буква встречается несколько раз, вы получите несколько слоев с одинаковыми име-

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

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

ПРЕОБРАЗОВАНИЕ ТЕКСТА

После того как текст разбит на символы и преобразован в кривые, его можно трансфор-

мировать и сделать невероятно впечатляющим. На рис. 5.23 видно, что с помощью инстру-

мента Subselection (Частичное вьщеление) можно выделить точки и переместить их, изменяя

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

мы и их последующей анимации с помощью промежуточных изображений.

Подробно о создании анимации и о промежуточных изображениях речь пойдет

в главе 7 "Анимация во Flash".

Рис. 5.23. После того как текст разбит и преобразован в кривые, с помощью инст-

румента Subselectionможно перетащить анкерные точки и изменить форму букв

ГЛАВА 5. РАБОТА с ТЕКСТОМ 111

Чтобы сдвинуть контуры текста, воспользуйтесь новыми модификаторами Distort

(Искривление) и Envelope (Огибающая). Их нельзя применить к группам или симво-

лам, поэтому текст обязательно нужно преобразовать в кривые. Выберите либо инст-

румент Arrow, либо Free Transform и перетащите его поверх слова, чтобы оно преобра-

зовывалось как единое целое. Если вы работаете с инструментом Arrow, выберите инструмент Free

Transform, а затем в нижней части панели инструментов выберите модификатор Distort или Enve-

lope. Перетащите маркеры преобразования, окружающие слово, как показано на рис. 5.24.

Самое впечатляющее преобразование можно выполнить с помощью модификатора Envelope,

полностью изменив форму букв (рис. 5.25). Пользуйтесь этим мощным средством осторожно, по-

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

ЭФФЕКТИВНЫЕ ПРИЕМЫ РАБОТЫ С ТЕКСТОМ

Самым важным критерием при работе с текстом является его последующая удобочитае-

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

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

задачей является создание текста, доступного и легкого для чтения.

Л

Рис. 5.24. Модификатор Distort используется

для создания эффекта перспективы

О

Рис. 5.25. Чтобы создать наиболее впе-

чатляющие эффекты, воспользуйтесь

модификатором Envelope

112 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

На удобочитаемость текста влияют следующие атрибуты:

• контраст текста и фонового цвета;

• шрифты с засечками;

• кегль;

• межбуквенный и междустрочный интервал.

Эти атрибуты особенно важны при работе с растровыми шрифтами. Очень часто кегль

растровых шрифтов задан предварительно и является небольшим. Поэтому наличие сущест-

венного контраста цвета шрифта и фонового цвета является еще более важным. Темный текст

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

ном фоне, но только в том случае, если цвета хорошо контрастируют. Старайтесь не комби-

нировать текст и фоновый цвет, имеющие похожую яркость, особенно если шрифт имеет не-

большой как, например, растровый.

Кроме того, не использовать шрифты с засечками небольших размеров. Засечки

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

шрифт будет очень маленького то эти различия будет очень трудно заметить. Сглажи-

вание контурных неровностей еще сильнее обостряет эту проблему. На Web-узле Minimi пред-

лагается растровый шрифт с засечками который более удобочитаем при малых размерах.

Подробная информация о шрифтах, доступных на Web-узле Minimi, и о других

растровых шрифтах во врезке "Ресурсы растровых шрифтов".

Если вы работаете не с растровыми шрифтами, то можете управлять размером текста. Про-

смотрите текст, применяя к нему разные размеры шрифта и параметры форматирования, и подбе-

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

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

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

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

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

Проверьте, чтобы фрагмент фильма был помещен на целую координату в основной вре-

менной шкале, поскольку это размещение определяет координаты текста, внедренного во

фрагмент фильма. Даже если текст во вложенном фрагменте размещен на целых координа-

тах (х.О), но в основной временной шкале фрагмент фильма помещен на дробную координату

(например, х.5), то текст фактически будет располагаться на дробной координате:

х.О + х.5 = х.5.

Кроме того, при публикации фильма, содержащего растровые шрифты, во вкладке HTML

диалогового окна Publish Settings (Параметры публикации) из раскрывающегося меню Scale

(Масштабирование) обязательно выберите пункт No Scale (Без масштабирования). Если

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

приведет к растягиванию или сжатию SWF-файла. Текст также будет растягиваться или сжи-

маться и в результате будет отображен с размерами, отличными от тех, что были заданы в

файле Растровые шрифты отображаются в виде определенного числа поэтому

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

Особенно проблематичным является использование растровых шрифтов в компонентах. Дело

в что фрагменты фильма в пределах компонентов, содержащих текст, не размещены на целых

пикселях. Холл Hall) написал сценарий, позволяющий обойти размещение пик-

селей. Его можно загрузить узла html.

ГЛАВА 5. РАБОТА с ТЕКСТОМ 113

О параметрах публикации подробно рассказывается в главе 30 "Оптимизация,

публикация и экспортирование фильмов", а об использовании компонентов —

в главе 9 "Кнопки, меню и поля ввода данных" и в главе 22 "Компоненты".

Почему нельзя использовать полужирный и курсивный шрифт в полях

текста?

При применении HTML-форматирования к внедренным шрифтам могут возникнуть про-

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

ходимо внедрять, а это приведет к существенному увеличению размера фильма — данные о

шрифтах, содержащихся в фильме утроятся. Однако можно пойти на некоторые хитрости. Не-

обходимо создать текстовое поле для указания каждого начертания. Это можно сделать путем

создания псевдотекстовых полей, указывающих альтернативные начертания (одно — для полу-

жирного шрифта, другое — для курсивного и т.д.), и их размещения за пределами видимой об-

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

случаях число внедряемых символов можно ограничить, в частности, если известны типы сим-

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

дополнительных начертаний существенно увеличит размер файла фильма.

Более простым решением будет указание для поля динамического текста встроенных

шрифтов. Это гарантирует корректное отображение HTML-текста и не увеличивает конеч-

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

кономите на размере файла и будете твердо уверены в правильном отображении HTML-

текста. Поэтому стоит пойти на такой компромисс.

FLASH ЗА РАБОТОЙ: КОПИРОВАНИЕ ТЕКСТОВЫХ ПОЛЕЙ

Если необходимо создать несколько полей вво-

димого или динамического текста, имеющих одина-

ковые размеры и атрибуты, то проще всего будет

создать одно текстовое поле и скопировать его нуж-

ное количество раз. Однако скопированные тексто-

вые поля будут иметь одинаковые атрибуты, в том

числе и имена экземпляров и переменных. Это вне-

сет полную неразбериху в сценарий. Поэтому вы

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

и переменным для каждого текстового поля.

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

текстовых полей вы не можете найти никакие

ошибки, проверьте имена экземпляров и пере-

менных на наличие повторов. Поскольку на па-

нели инспектора свойств одновременно могут

быть отображены атрибуты только одного тексто-

вого поля, для просмотра всего списка перемен-

ных воспользуйтесь панелью Movie Explorer

(Проводник фильма), которая показана на

рис. или вкладкой Variables (Переменные)

панели Debugger (Отладчик).

Д DC, (copy в

•• 8

5.26. На панели Movie Explorer видно,

что два текстовых поля имеют одинаковые

имена экземпляров

114 ЧАСТЬ I. СРЕДА и ИНСТРУМЕНТЫ FLASH

АНИМАЦИЯ и ЗВУК

В ЭТОЙ

Глава 6. Символы, экземпляры и элементы библиотек

Глава 7. Анимация во Flash

Глава 8. Использование звука

Глава 9. Кнопки, меню и поля ввода данных

Глава 10. Интеграция видео

ГЛАВА 6

СИМВОЛЫ, ЭКЗЕМПЛЯРЫ И ЭЛЕМЕНТЫ

БИБЛИОТЕК

В ЭТОЙ

Понятие символов

Создание символов

Редактирование символов 123

Экземпляры 129

Библиотека

Возможные проблемы 134

Flash за работой: вложение символов

ПОНЯТИЕ символов

Краеугольными камнями Macromedia Flash и основными строительными блоками созда-

ваемых фильмов являются символы. Всякий раз при импортировании растрового изображе-

ния, рисовании контура или анимации объекта Flash должна сохранять данные, необходимые

для отображения этих элементов в опубликованном фильме. При работе с любым содержи-

мым, предназначенным для размещения в Web, стратегической задачей является достижение

разумного компромисса между уменьшением размера файла и увеличением фактического со-

держимого. Этот вопрос приходится решать постоянно. Символы представляют собой хра-

нящиеся образцы, т.е. объекты, которые можно использовать нужное число раз.

Символы хранятся в библиотеке, а их экземпляры перетаскивают из библиотеки в рабочее

поле. Каждый экземпляр символа, расположенный в рабочем поле, является копией, незави-

симой от своего оригинала. Каждым экземпляром можно совершенно свободно манипулиро-

вать, не изменяя при этом оригинал. Поскольку хранится только оригинал, повторно приме-

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

количество экземпляров, что окажет лишь минимальное воздействие на размер файла. Ис-

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

Flash Player необходимо загрузить символ только один раз.

Символы можно считать конструктивными элементами Rash. Они не только способствуют

уменьшению размера файла, но и при правильном использовании существенно повышают эф-

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

элементы фильма на составляющие конструктивные блоки, которые можно связывать друг с

другом с целью создания сложной анимации и системы интерфейса. Когда необходимо внести

изменения, их можно сделать всего в одном месте, воздействуя на многие части фильма.

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

использование элемента позволяет сэкономить на размере файла, преобразование любого

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

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

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

ственную шкалу, рабочее поле и слои.

ГРАФИЧЕСКИЕ символы

Графические символы — наиболее простые и наименее мощные. Они привязаны к основной

временной шкале и лучше всего подходят для статических изображений, например для фона. Гра-

фические символы могут быть но не могут содержать звуки или интерактивные

элементы. Кроме того, поскольку графические символы управляются с помощью основной вре-

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

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

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

Кнопки

Кнопки являются интерактивными символами, которые реагируют на определенные дей-

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

временной шкале кнопок (рис. 6.1) имеются кадры Up, Over, Down и Hit, соответствующие

различным состояниям кнопок. шкала кнопок не разворачивается во времени,

подобно другим временным зависимостям. Вместо этого в ней происходит перемещение ме-

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

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

либо действий со стороны пользователя. Over (Поверх) соответствует состоянию ролловера в

случае, если пользователь наводит указатель мыши на кнопку. Down (Нажата) — это состоя-

ние или внешний вид кнопки, когда пользователь щелкает на ней. Состояние Hit (Активная

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

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

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

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

Подробная информация о кнопках представлена в главе 9 "Кнопки, меню и

поля ввода данных".

ВИДЕОКЛИПЫ

Видеоклипы представляют собой самодостаточные мини-фильмы. При необходимости

для них можно задать собственную, независимую шкалу, не привязанную к ос-

новной. Возможность размещения одной временной шкалы в пределах другой является

118 ЧАСТЬ II. АНИМАЦИЯ ЗВУК

"изюминкой" Flash и основой комплексной интерактивности и многострочного потока дан-

ных. Основную временную зависимость можно считать головным видеоклипом. Видеоклипы

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

другие вложенные видеоклипы.

Об объекте Movie Clip (Видеоклип) и его использовании с ActionScript расска-

зывается в главе 17 "Демонстрация мощи видеоклипов".

.

Рис. 6.1. Кнопки имеют

шкалу с состояниями Up,

Over, Down и Hit

СОЗДАНИЕ символов

С чего же начать создание фильмов Flash? Сначала нужно создать конструктивные эле-

менты определенного фильма.

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

чем поле. Чем больше вы работаете во Flash, тем лучше сможете планировать создание сим-

волов. Если перед созданием какого-то объекта вы знаете, что его нужно будет использовать

неоднократно, то лучше всего сразу создать символ, а затем создать объект как символ.

Может случиться и так, что сначала вы создадите элемент фильма, а только потом пойме-

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

легко преобразовать в символ.

Чтобы создать новый пустой символ, проверьте, чтобы в рабочем поле не было ничего выде-

лено, а затем выполните команду Symbol символ) или восполь-

зуйтесь комбинацией клавиш <Cmd+F8> (Macintosh) или <Ctrl+F8> (Windows). В результате

откроется диалоговое оно Create New Symbol (Создать новый символ), показанное на рис. 6.2.

New

Movie Clip

О Button

|

Puc. 6.2. В диалоговом окне Create New Symbolможно задать имя и

тип

Введите имя символа и выберите его тип: Movie Clip (Видеоклип) (задан по умолчанию);

Button (Кнопка) или Graphic (Графика). После этого щелкните на кнопке ОК. Символ будет

добавлен в библиотеку и в режиме редактирования откроется в рабочей области. На рис. 6.3

видно, что имя символа появится в информационной строке, расположенной сверху рабочего

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

страции символа. Теперь к символу можно добавить содержимое.

ГЛАВА 6. Символы, ЭКЗЕМПЛЯРЫ и ЭЛЕМЕНТЫ БИБЛИОТЕК 119

Рис. 6.3. Новый созданный символ помеща-

ется в библиотеку и открывается в режиме

редактирования

На В процессе работы всегда ищите возможность преобразовать в составляю-

щие части, которые затем можно неоднократно использовать. Символы повышают

эффективность работы, поэтому старайтесь использовать их в полном объеме.

РЕГИСТРАЦИЯ

Точка регистрации — это контрольная точка, использующаяся при размещении символа

цифровым образом. Существует девять стандартных точек регистрации: каждый из четырех

углов, центральная точка и средняя точка с каждой стороны объекта. Точка регистрации оп-

ределяет координату 0,0 (0,х и 0,у) символа.

Процедура изменения регистрационной точки подробно описана ниже, в раз-

деле "Редактирование точек регистрации".

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

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

ма координат, где координата 0,0 (х,у) обозначает верхний левый угол рабочего поля или эк-

рана (в опубликованном фильме). Ось х расположена по горизонтали, а ось у — по вертикали.

Чтобы не возвращаться к школьному курсу алгебры, напомним, что при перемещении объек-

та вправо увеличивается его координата х, а при перемещении объекта вниз увеличивается

координата у. При перемещении объекта влево его координата х уменьшается после пере-

сечения оси у принимает отрицательные значения, а сам объект смещается за пределы рабо-

чего поля (или экрана). При перемещении объекта вверх уменьшается его координата у и по-

сле пересечения оси х принимает отрицательные значения, а сам объект смещается за преде-

лы рабочего поля (или экрана). Прямоугольная система координат изображена на рис. 6.4.

Чтобы точно разместить объекты в рабочем поле, необходимо знать внутреннюю регистраци-

онную точку каждого объекта. Например, если в верхнем левом углу рабочего поля

(координаты 0,0) необходимо разместить квадрат размером 10x10 пикселей, нужно указать, какая

часть квадрата должна быть помещена в точку с координатами Если точка регистрации нахо-

дится в центре квадрата, то именно она и будет помещена в точку с координатами 0,0. В этом слу-

чае большая часть квадрата окажется за пределами рабочего поля, как показано на рис. 6.5.

120 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

Отрицательные значения х х.

Рис. 6.4. В системе координат, использующейся во Flash, координата 0,0 соответ-

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

Рис. Если точкой регистрации квадрата является его

центр, объект будет расположен таким образом

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

в начало координат и весь квадрат расположится в пределах рабочего поля или экрана (рис. 6.6).

На заметку При выполнении преобразования объекта в символ возможными параметра-

ми являются девять стандартных точек регистрации. Однако впоследствии сим-

вол можно отредактировать, изменив его точку регистрации на любую другую в

пределах символа.

ГЛАВА 6. Символы, ЭКЗЕМПЛЯРЫ и ЭЛЕМЕНТЫ БИБЛИОТЕК 121

Рис. Если точкой регистрации квадрата является его верх-

ний левый угол, то объект будет размещен таким образом

ПРЕОБРАЗОВАНИЕ в символ

Чтобы преобразовать в символ объект, расположенный в рабочем поле, выделите его и

выполните команду to Symbol в символ), как пока-

зано на рис. 6.7, или нажмите клавишу <F8>.

После выполнения данной команды откроется диалоговое окно Convert to Symbol

(рис. 6.8), очень похожее на окно Create New Symbol. Единственное отличие заключается в

том, что в окне Convert to Symbol можно задать точку регистрации.

Чтобы указать точку регистрации объекта, щелкните на одном из квадратиков опции Regis-

tration (Регистрация). Вообще, в качестве точки регистрации удобнее всего использовать верх-

ний левый угол объектов. Я практически всегда изменяю точку регистрации на левый верхний

поскольку эта контрольная точка является наилучшей для размещения объектов. При вы-

полнении преобразования объекта в символ точкой регистрации по умолчанию является цен-

тральная точка объекта. Однако при ее изменении в диалоговом окне Convert to Symbol новая

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

Чтобы узнать, как изменить точку регистрации символа, обратитесь к разделу

"Редактирование точек регистрации" далее в этой главе.

Задайте имя символа, укажите его тип и щелкните на кнопке ОК. Символ будет добавлен в

библиотеку, а элемент, выделенный в рабочем поле, станет экземпляром этого символа и бу-

дет помечен квадратным ограничительным контуром, как показано на рис. 6.9. Крестик в

кружочке обозначает точку регистрации данного символа.

Text Window He

me

Blank Keyframe

Create Motion

Remove

Puc. Чтобы преобразовать в символ

ект, расположенный в рабочем поле, выпол-

ните команду to Symbol

122 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

.-

Name:

Graphic

Рис. окно Convert to Symbol позволяет преобразо-

вать объект рабочего поля в символ и задать его точку регистрации

Рис. 6.9. При выполнении преобразования в символ фрагмент, вы-

деленный в рабочем поле, станет экземпляром и будет обрамлен

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

Существующий символ можно продублировать и использовать в качестве шаблона нового

символа. Выделите в рабочем поле экземпляр и выполните команду Sym-

bol символ). В открывшемся диалоговом окне Symbol Name (Имя

символа), которое показано на рис. 6.10, можно задать имя нового символа. Затем новый

символ можно редактировать.

Пусть во Flash требуется создать игру в крестики-нолики. Сетку игры можно создать с по-

мощью символов. Первым символом будет вертикальная линия. Для создания горизонталь-

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

После дублирования вертикальной линии ее можно развернуть и создать символ горизон-

тальной линии (рис.

РЕДАКТИРОВАНИЕ символов

В процессе разработки проект обязательно претерпевает определенные изменения, и сим-

волы приходится редактировать. Измениться может цветовая схема, графика и даже навига-

ционная структура фильма. Поскольку образцами элементов фильма являются символы, то

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

лов. Если клиенту перестанет нравиться, например, цвет, то с помощью символов его можно

быстро изменить и обновить по всему фильму. Символы можно редактировать тремя спосо-

бами: на месте, в новом окне и в режиме редактирования символов.

РЕДАКТИРОВАНИЕ НА МЕСТЕ

Из самого имени команды Edit in Place (Редактировать на месте) следует, что она позволяет

внести изменения в символ в контексте содержимого рабочего поля. Эту команду удобно при-

СИМВОЛЫ, ЭКЗЕМПЛЯРЫ И ЭЛЕМЕНТЫ БИБЛИОТЕК 123

менять для корректировки размера, цвета и формы. Для применения команды дважды щелкни-

те на символе в рабочем поле либо выделите символ и выполните команду in Place.

Можно также правой кнопкой на символе (Windows) или щелкнуть, удерживая кла-

вишу <Ctrl> (Macintosh), и из выпадающего меню выбрать пункт in Place (рис.

Рис. 6.10. Чтобы продублировать символ, выделите

существующий экземпляр и выполните команду

Symbol

В диалоговом окне Symbol Name дубликату символа можно присвоить имя

124 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

Рис. Затем дубликат символа можно отредак-

и создать новый уникальный символ

•

Free Transform

Skew

Distribute to

In

Swap

Symbol—

Properties

Puc. 6.13. Чтобы отредактировать символ

на месте, выделите его и из выпадающего

меню выберите пункт Edit in

Вернемся к примеру с игрой в крестики-нолики. Если символ круга слишком большой и не

соответствует сетке игры, то с помощью команды Edit in Place его можно масштабировать со-

гласно размерам сетки, добившись тем самым согласования размеров относительно других эле-

ментов (рис.

По завершении редактирования щелкните на кнопке возврата или на имени текущей сце-

ны в информационной строке в левом верхнем углу рабочего поля, либо выберите текущую

сцену из выпадающего меню Scene (Сцена), либо выполните команду Document

документа).

РЕДАКТИРОВАНИЕ в новом ОКНЕ

Символы можно редактировать и в новом окне. При этом в новом окне открывается вре-

менная шкала символа, а основной фильм остается в исходном окне. Это позволяет при ре-

СИМВОЛЫ, ЭКЗЕМПЛЯРЫ И ЭЛЕМЕНТЫ БИБЛИОТЕК 125

дактировании символа обращаться к разным элементам фильма, даже к тем, которые распо-

лагаются не в одном кадре с символом.

Чтобы отредактировать в новом окне, выделите его в рабочем поле, а затем щелк-

на нем правой кнопкой мыши (Windows) или щелкните, удерживая клавишу <Ctrl>

(Macintosh), и из выпадающего меню выберите пункт Edit in New Window (Редактировать в

новом окне), как показано на рис.

После того как символ откроется в новом окне (рис. 6.16), внесите в него необходимые

изменения, а затем щелкните на кнопке закрытия, расположенной в левом (Macintosh) или в

правом верхнем углу окна (Windows), и вернитесь к основной временной шкале.

Рис. Команда Edit in Place позволяет

отредактировать символы в контексте

других объектов рабочего поля

Free

: and

Distribute to Layers

Duplicate

to

Properties

Рис. Чтобы отредактировать символ

в новом окне, из выпадающего меню выбе-

рите пункт Edit in New Window

126 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

' •

После выполнения команды Edit in Window символ откроется в

окне

РЕЖИМ СИМВОЛОВ

При редактировании в этом режиме вы перейдете из основной рабочей области во вре-

менную шкалу символа, в какой бы шкале не работали до этого. Если в символ требуется вне-

сти значительные изменения, его легче всего редактировать отдельно. Перейти в режим ре-

дактирования символов можно несколькими способами.

• Выделите символ в рабочем поле. Затем щелкните на нем правой кнопкой мыши

(Windows) или щелкните, удерживая клавишу <Ctrl> (Macintosh), и из выпадающего

меню выберите пункт Edit.

• Выделите символ в рабочем поле и выполните команду Symbols

Редактировать символы).

• Дважды щелкните на пиктограмме символа (расположенной слева от его имени) на

панели Library (Библиотека), как показано на рис.

• Выделите символ на панели Library и из меню параметров этой панели выберите пункт

Edit (рис. 6.18). Либо же щелкните на пиктограмме символа правой кнопкой мыши

(Windows) или щелкните, удерживая клавишу <Ctrl> (Macintosh), и из выпадающего

меню выберите пункт Edit.

Внесите необходимые изменения и вернитесь к основной временной шкале, щелкнув на

кнопке возврата, расположенной в информационной строке, либо выполнив команду

Document.

ГЛАВА 6. Символы, ЭКЗЕМПЛЯРЫ и ЭЛЕМЕНТЫ БИБЛИОТЕК 127

о

Component

Чтобы перейти в режим редактирова-

ния символов, дважды щелкните на пиктограм-

ме символа на панели Library

Рис. В качестве альтернативного способа

можно выбрать из выпадающего меню пункт Edit

ТОЧЕК РЕГИСТРАЦИИ

Поскольку базовой точкой при выполнении преобразований и размещении символа явля-

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

требуется отредактировать. Наиболее распространенным примером такой ситуации является

сценарная строка состояния, которая часто используется для отображения хода выполнения

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

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

ки. Если регистрационной точкой является центр символа строки состояния, то прямоуголь-

ник будет расширяться в обе стороны от центра (рис. а это не совсем то, что нужно.

Чтобы панель загрузки расширялась только вправо (обычно именно таким образом ото-

бражается процесс выполнения задачи), регистрационной точкой символа строки состояния

должна быть центральная точка левой стороны прямоугольника (рис. 6.20).

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

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

использовании инструмента Free Transform (Свободное преобразование). На рис. 6.21 показано,

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

Чтобы изменить расположение регистрационной точки, щелкните и перетащите этот кружок.

PROGRESS: 50 % downloaded

Рис. Если точкой регистрации является

центр объекта, то любые преобразования бу-

дут выполняться в направлении от этой точки

128 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

PROGRESS: 50% downloaded

Рис. 6.20. Регистрационной точкой символа строки

состояния центр левой стороны прямо-

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

направо

Рис. 6.21. изменения регистрационной точки символа выберите инструмент

Transform, а затем щелкните и перетащите белый кружок

О точках регистрации рассказывалось выше, в разделе "Регистрация".

ЭКЗЕМПЛЯРЫ

Все символы размещаются на панели Library. Всякий раз при помещении символа в рабочее

поле вы фактически помещаете туда экземпляр символа, а не сам символ. Это — важная деталь. Из-

менение исходного символа на панели Library означает изменение оригинала и каждого экземпля-

ра этого символа. Однако экземпляры независимы от своих исходных символов. Экземпляр можно

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

Чтобы отредактировать экземпляр, выделите его и внесите необходимые изменения. Если

выделить экземпляр и преобразовать его с помощью инструмента Free Transform, то измене-

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

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

Кроме того, можно изменить тип поведения экземпляра. Пусть, например, имеется эк-

земпляр графического символа, который нужно анимировать независимо от основной вре-

менной шкалы. Тип этого экземпляра легко изменить с графики на видеоклип. Для этого вы-

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

ный тип экземпляра (рис. 6.22).

ИЗМЕНЕНИЕ свойств ЭКЗЕМПЛЯРА

Экземпляр имеет некоторые свойства, которые не за-

висят от его исходного символа, — это яркость, оттенок,

коэффициент прозрачности и расширенная настройка

цвета. Задать эти свойства можно с помощью раскрываю-

щегося меню Color (Цвет) на панели инспектора свойств

(рис. 6.23).

Воспользуйтесь параметром Brightness (Яркость), если

хотите сделать экземпляр светлее или темнее. Введите

•

Рис. 6.22. Для изменения поведе-

ния экземпляра воспользуйтесь

раскрывающимся меню Instance

(Экземпляр) на панели инспекто-

ра свойств

ное значение прямо в поле Brightness или, перетаскивая ползунок, измените относительную

яркость экземпляра в диапазоне от 100% (белый) (черный), как показано на рис. 6.24.

ГЛАВА 6. Символы, ЭКЗЕМПЛЯРЫ и ЭЛЕМЕНТЫ БИБЛИОТЕК 129

. С помощью меню Color можно управлять свойствами цвета экземпляра

О

Изменение яркости его светлее или темнее

Параметр Tint (Оттенок) позволяет изменять оттенок цвета экземпляра путем корректи-

ровки значений красной, зеленой и синей составляющих, а также коэффициента прозрачно-

сти. Сначала вьщелите цвет, оттенок которого необходимо откорректировать, и либо введите

его значения в поля RGB либо выберите безопасный Web-цвет,

щелкнув в поле цветовой палитры. После этого задайте значение коэффициента прозрачно-

сти, корректируя тем самым насыщенность оттенка, как показано на рис. 6.25.

Параметр Alpha позволяет изменять прозрачность экземпляра в диапазоне от 100%

(непрозрачный) до 0% (полностью прозрачный). Введите нужное значение в поле Alpha или

задайте его, перетаскивая ползунок.

Параметр Advanced (Дополнительные настройки) позволяет отдельно откорректировать

значения красной, зеленой и синей составляющих, а также значение коэффициента прозрач-

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

Tint. Из раскрывающегося меню Color выберите пункт Advanced (рис. 6.26). Щелкните на

кнопке Settings (Настройка), в результате чего откроется диалоговое окно Advanced Effect

(Расширенная настройка).

130 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

6.25. Чтобы изменить оттенок цвета, вы-

берите параметр Tint и измените значения крас-

ной, зеленой и синей а также ко-

эффициента прозрачности

Рис. 6.26. Для доступа к диалоговому окну

vanced из меню Color

выберите пункт Advanced и щелкните на поя-

вившейся кнопке Settings

В диалоговом окне Advanced Effect (рис. 6.27) можно изменить либо процентные значе-

ния (поля в левой части окна), либо абсолютные значения (поля в правой части окна) цвето-

вых составляющих и коэффициента прозрачности.

Дополнительная настройка цвета осуществляется путем умножения значений цветовых

составляющих на соответствующие процентные значения. Полученный результат затем при-

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

ются новые значения цветов. Не бойтесь расширенную настройку; просто по-

тратьте некоторое время на то, чтобы поэкспериментировать с цветами. Нагляднее всего бу-

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

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

лена в главе 4 "Использование растровых изображений во Flash".

OB

При разработке фильма может возникнуть необходимость изменить один экземпляр симво-

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

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

те его и на панели инспектора свойств щелкните на кнопке Swap (Заменить), в результате чего

откроется диалоговое окно Swap Symbol (Замена символа) (рис. 6.28). В этом окне показаны все

символы, имеющиеся в библиотеке. Выберите нужный символ и щелкните на кнопке ОК.

3 К

Red а { I

|o

| [o

Help Cancel j

i

Puc. 6.27. В диалоговом окне Advanced Effect можно либо процентные, либо

числовые значения

ГЛАВА 6. Символы, ЭКЗЕМПЛЯРЫ и ЭЛЕМЕНТЫ БИБЛИОТЕК 131

Рис. 6.28. Диалоговое окно Swap Symbol заменить символ, представленный

определенным экземпляром

ИМЕНА символов

Экземплярам видеоклипов и кнопок можно присвоить уникальные имена, которые по-

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

символов ими можно управлять программными средствами. Сценарии дают большую сте-

пень контроля над символом и позволяют создать содержимое, которое может изменяться в

ответ на те или иные действия пользователя.

Подробно об использовании ActionScript для доступа к экземплярам рассказы-

вается в главе 17 "Демонстрация мощи видеоклипов".

Чтобы назначить имя экземпляра, выделите экземпляр кнопки или видеоклипа в рабочем поле

и введите уникальное имя в поле Instance Name (Имя экземпляра), как показано на рис. 6.29.

БИБЛИОТЕКА

Символы размещаются и систематизируются на панели Library (Библиотека). Представьте

что библиотека является коробкой, в которой сложен игрушечный конструктор. Пом-

ните, ваша мама всегда говорила, что каждая деталь конструктора должна лежать на своем

месте в коробке? Чем лучше организована библиотека, тем легче вам будет работать.

Чтобы открыть панель Library, выполните команду

или нажмите клавишу Чтобы вы имели возможность перетаскивать экземпляры сим-

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

гим панелям, которые открыты во время работы. Панель Library состоит из окна предвари-

тельного просмотра и прокручивающегося списка символов и импортированных элементов.

Чтобы увидеть, как систематизированы символы в библиотеке, щелкните на кнопке Wide Li-

brary View (Расширить вид библиотеки) (рис. 6.30).

В первом столбце перечислены имена символов (вмести с пиктограммами их типов), по

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

132 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

нель Library не развернута полностью. Чтобы изменить порядок сортировки символов в биб-

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

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

В столбце Use Count (Количество применений) указывается число, обозначающее количество

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

больше не используются, и соответствующим образом модифицировать файл фильма. Если размер

файла слишком велик, выясните, какие символы имеют большой объем. Возможно, некоторые из

них можно не использовать. Щелкните на заголовке столбца Use Count, чтобы отсортировать эле-

менты по количеству их применений в фильме. По умолчанию столбец Use Count не обновляется,

но чтобы увидеть текущее число применений, из меню параметров панели Library выберите пункт

Keep Use Counts Updates (Обновлять число применений), как показано на рис. 6.31.

1 !

| | J

3. ®

..

•

Рис. 6.29. Имена экземпляров позволят получить доступ к отдельным экземплярам

видеоклипов и кнопок с помощью

April 15, 2002

Puc. 6.30. Чтобы расширить панель Library, щелкните на кнопке Wide Library View

ГЛАВА 6. Символы, ЭКЗЕМПЛЯРЫ и ЭЛЕМЕНТЫ БИБЛИОТЕК 133

Я

New

New Folder .

Rename ' .

и New

Shored

Keep

6.31. Меню параметров панели Library

Содержимое библиотеки можно распределить по папкам. Для создания новой папки

щелкните на пиктограмме New Folder (Создать папку), расположенной в нижней части пане-

ли Library. Как и при работе с папками слоев, использование папок библиотеки позволит оп-

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

для систематизации содержимого библиотеки. Например, можно создать папки для импор-

тированных элементов, символов навигации и т.д. При работе над большим проектом число

элементов библиотеки будет увеличиваться с огромной скоростью, и если не систематизиро-

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

тратить достаточно много времени на прокручивание списка содержимого библиотеки.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Как можно скопировать символ из одного фильма в другой?

Во Flash MX можно легко скопировать символы из одного фильма в другой. Если одно-

временно открыто несколько файлов то просто откройте панель Library, и на ней поя-

вятся все библиотеки открытых документов. В строке заголовка панели Library будут указаны

имена всех файлов FLA, как показано на рис. 6.32. Каждую библиотеку можно свернуть или

развернуть, щелкнув на треугольнике слева от имени файла.

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

тащите в нужную библиотеку либо перетащите его в рабочее поле другого файла При этом

на рабочее поле будет помещен экземпляр символа, а сам символ будет добавлен в библиотеку.

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

ответствующий файл как библиотеку (при этом откроется только панель Library выбран-

ного файла без временной шкалы и рабочего поля). Для этого выполните команду

as Library как библиотеку) и выберите нужный файл

Почему выводится сообщение Resolve Library Conflict (Разрешить конфликт биб-

?

Во Flash MX можно легко заменить существующий символ на новый с тем же самым име-

нем. Но если вы попытаетесь перетащить символ с тем же именем из другого файла то на

134 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

экран будет выведено сообщение о конфликте библиотеки. Таким образом Flash предостерегает

о непреднамеренном переписывании символов. В диалоговом окне Resolve Library Conflict

(Разрешить конфликт библиотеки), которое показано на рис. 6.33, можно выбрать опцию заме-

ны существующего символа.

Рис. 6.32. На панели Library будут перечислены библиотеки всех от-

крытых документов

FLASH ЗА РАБОТОЙ: ВЛОЖЕНИЕ символов

Мы все время рассматривали символы как конструктивные элементы Flash, а теперь воз-

никает вопрос, как сложить их вместе? Одни символы можно вкладывать в другие. Пусть, на-

пример, требуется создать выпадающее навигационное меню на Web-узле розничного про-

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

этого выпадающего меню. Затем символ границы можно преобразовать в видеоклип, в одном

слое которого будет находиться граница, в другом слое — текстовые символы для пунктов ме-

ню, а в третьем — графические символы ролловеров (рис. 6.34).

A One or more library Items already exist the

Don't existing

О existing Items (not undoable)

'

Рис. 6.33. В диалоговом окне Library Conflict можно

выбрать опцию замены

Сведение символов воедино таким образом позволяет быстро отредактировать их. Если

необходимо изменить или реорганизовать текстовые пункты меню, потребуется внести изме-

нения только в символ текста меню, даже если видеоклип меню используется в нескольких

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

ГЛАВА 6. Символы, ЭКЗЕМПЛЯРЫ и ЭЛЕМЕНТЫ БИБЛИОТЕК 135

'

: 1 .! Ll.

•

Рис. 6.34. Символы можно вкладывать друг в друга, создавая сложную графику, которую

впоследствии можно будет модифицировать

136 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

ГЛАВА 7

АНИМАЦИЯ во FLASH

В ЭТОЙ ГЛАВЕ...

Знакомство с анимацией

Кадры и ключевые кадры

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

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

Мультипликация во Flash 152

Основные правила при создании анимации

Возможные проблемы

Flash за работой: упрощение анимации

ЗНАКОМСТВО с АНИМАЦИЕЙ

Анимация — это иллюзия движения, создаваемая с помощью последовательности непод-

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

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

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

как анимация не является искусством перемещения объектов, а представляет собой искусст-

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

Программа Flash обладает уникальными средствами создания анимации. Векторный

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

Векторные графические изображения имеют формы, которые можно легко и точно преобра-

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

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

анимацию. Во Flash можно анимировать и растровые изображения. Система символов Flash

также идеально подходит для анимации. Символы позволяют разбить анимацию на отдель-

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

нию эффективности работ и оптимизации размера файла.

Подробная информация о векторной графике была представлена в главе 3

"Рисование во Flash", о растровых в "Использование

растровых изображений во Flash", а о в главе 6 "Символы,

экземпляры и элементы библиотек".

КАДРЫ И КЛЮЧЕВЫЕ КАДРЫ

Для систематизации и управления фильмом и анимацией во Rash используется времен-

шкала. Панель Timeline шкала) в горизонтальном направлении поделена на

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

нии — на слои, представляющие собой дискретные единицы пространства, уложенные в стек.

Анимация проистекает во времени и в пространстве. Временной интервал анимации опреде-

ляется общим количеством кадров, а занимаемое ими пространство, в свою очередь, опреде-

ляется размерами рабочего поля (хотя в его пределах можно разместить практически неогра-

ниченное число слоев).

Магическое число 16000

Интересовались ли вы когда-нибудь, насколько большим может быть Flash-фильм? Знайте, что при

работе во Flash часто приходится иметь дело с магическим числом 16000. Фильмы иметь до

16000 кадров. При превышении этого значения воспроизведение фильма останавливается. Мак-

симальное число экземпляров символов, которое может содержаться в фильме, тоже составляет

16000. Та же цифра фигурирует в максимально поддерживаемом количестве слоев, которое мо-

жет быть экспортировано, и максимальном количестве загруженных фильмов.

Кадр представляет собой статический временной интервал — содержимое рабочего поля в оп-

ределенный момент времени. В отличие от обычных кадров, ключевые кадры являются критиче-

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

Анимация описывает действие, а сущностью действия является изменение. Анимация во Flash соз-

дается путем отслеживания изменений: где находится место изменения содержимого рабочего по-

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

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

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

может быть отображено неограниченное количество слоев. Очень важно, чтобы содержимое

было разнесено в отдельные слои, поскольку это позволяет анимировать объекты индивиду-

ально. Фильм может иметь статический фон, который остается неподвижным, и несколько

слоев с содержимым, которое анимируется в различных точках фильма. Хотя содержимое

может быть размещено в нескольких слоях, маловероятно, чтобы вы захотели отображать все

содержимое в каждом кадре фильма. Кадры существуют в пределах слоя только когда

содержимое слоя видно в рабочем поле.

ДОБАВЛЕНИЕ, УДАЛЕНИЕ и КОПИРОВАНИЕ КАДРОВ

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

на рис. Добавление кадров определяет, когда содержимое слоя является видимым. Общая

длина фильма определяется максимальным кадром какого-либо слоя. Добавление кадров к

слою удлиняет содержимое в рабочем поле. Удаление кадров укорачивает время, в течение

которого содержимое будет видимым. При добавлении к фильму содержимого и слоев, веро-

138 ЧАСТЬ II. АНИМАЦИЯ ЗВУК

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

различные объекты будут видны на рабочем поле.

Для добавления кадров к слою выделите кадр на панели Timeline и нажмите клави-

шу <F5>. В результате будет выполнена вставка кадров, как показано на рис. 7.2.

Рис. 7.1. Новый документ содер-

жит один слой и один кадр

Рис. 7.2. Для добавления кадров выделите кадр на временной

шкале и нажмите клавишу <F5>

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

В кадрах отображается содержимое предшествующего им кадра. Если

не будет добавлено промежуточных отображений, содержимое между двумя ключевыми кад-

рами останется статичным.

Заполнение кадров

Заполнение т.е. добавление промежуточных отображений, состоит в заполнении про-

межуточных кадров, расположенных между ключевыми, в которых происходит действие. Запол-

нение кадров Flash выполняет автоматически. Вы можете задать движение или промежуточное

отображение, a Flash интерполирует изменения между ключевыми кадрами.

Чтобы добавить ключевой кадр, щелкните на кадре на панели Timeline (Временная шка-

ла) и нажмите клавишу <F6>. Вставленный ключевой кадр будет отображаться в виде пустого

кружка на панели Timeline (рис. 7.3).

Рис. 7.3. Пустые ключевые кадры имеют вид пустых кружков, а

ключевые кадры с содержимым — сплошных

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

ления кадров выделите их, щелкните правой кнопкой мыши (Windows) или щелкните, удер-

живая клавишу (Macintosh), и из контекстного меню выберите пункт Remove Frame

(Удалить кадр). Чтобы преобразовать ключевой кадр в обычный, т.е. удалить изменения,

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

вой кадр и из контекстного меню выберите пункт Clear Keyframe (Очистить ключевой кадр).

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

копировать и вставлять. Для этого выделите кадры и/или ключевые кадры, щелкните правой

кнопкой мыши (Windows) или щелкните, удерживая клавишу <Ctrl> (Macintosh), и из кон-

текстного меню выберите пункт Copy Frames (Копировать кадры). Затем на временной шка-

ле выделите другой кадр, щелкните правой кнопкой мыши (Windows) или удержи-

вая клавишу <Ctrl> и из контекстного меню выберите пункт Paste Frames

(Вставить кадры). Можно копировать и вставлять кадры сквозь слои, например, кадры 4-го

по 12-й в слоях 4 и 5 можно скопировать и вставить в другие слои. Если кадры скопированы

из нескольких слоев, то и вставляются они тоже в несколько слоев.

ГЛАВА 7. АНИМАЦИЯ во FLASH 139

УПРАВЛЕНИЕ КЛЮЧЕВЫМИ КАДРАМИ

Ключевые кадры можно добавить в любом месте в пределах слоя. По необходимости Flash

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

В ключевых кадрах будет отображено содержимое предыдущих ключевых кадров, которое мож-

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

кадры. Для вставки пустого ключевого кадра выделите кадр и нажмите клавишу

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

делите кадр и щелкните на нем правой кнопкой мыши (Windows) или щелкните, удерживая

клавишу <Ctrl> (Macintosh), в результате чего откроется контекстное меню (рис. 7.4). Выбе-

рите из него пункт Convert to Keyframes (Преобразовать в ключевые кадры) или Convert to

Blank Keyframes (Преобразовать в пустые ключевые кадры).

Чтобы переместить ключевой кадр во временной шкале, снача-

ла щелкните на нем. После того как вы отпустите кнопку мыши,

ключевой кадр будет выделен. Теперь перетащите его на новое ме-

сто или даже в новый слой.

ЧАСТОТА СМЕНЫ КАДРОВ

Скорость анимации определяется как частотой смены кадров

фильма, так и числом кадров, в которых воспроизводится анима-

ция во временной шкале. Переменная частота смены кадров явля-

ется сугубо цифровой концепцией воспроизведения анимации.

Анимация в традиционной среде происходит при фиксированной

частоте смены кадров. Flash позволяет задать для фильма частоту

смены кадров, выражаемую в числе кадров в секунду. Частоту сме-

ны кадров лучше задать сразу же при открытии документа. Если вы

впоследствии решите изменить частоту, придется откорректиро-

вать длительность анимации. Для задания частоты смены кадров

фильма выполните следующие действия.

1. Щелкните на незанятом участке рабочего поля. На панели

инспектора свойств появятся параметры документа, как по-

казано рис. 7.5.

Blank Keyframe

.

to

Convert Blank Keyframes

Cut Frames

Paste

All

Symbols

7.4. Дм доступа к

данному контекстному

меню щелкните на кадре

правой кнопкой мыши

(Windows) или

те, удерживая клавишу

<Crrl> (Macintosh)

I. Щелкните в поле Frame Rate (Частота смены кадров) и введите нужное число. По

умолчанию в этом поле введено число 12 (кадров в секунду), но для отображения в Web

приемлемо любое значение от 8 до 18.

Чем выше частота смены кадров, тем больше будет передаваться информации, тем более

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

ская аудитория имеет соединение с высокой пропускной способностью и работает на быст-

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

стве случаев лучше перестраховаться и использовать не очень высокую частоту смены кадров.

Если загрузка анимации будет длиться слишком долго, пользователь может просто не дож-

даться ее завершения и никогда не увидеть ваше творение.

Рис. 7.5. Частота смены кадров фильма задается в параметрах документа, ото-

бражаемых на панели инспектора свойств

140 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

После задания частоты смены кадров основные усилия можно сосредоточить на распределе-

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

медленнее. Чем меньше количество кадров, тем быстрее выполняется анимация. Чтобы добить-

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

СОЗДАНИЕ ПРОМЕЖУТОЧНЫХ ОТОБРАЖЕНИЙ

Во Flash существуют два типа анимации: покадровая и с созданием промежуточных ото-

бражений. Покадровая анимация изменяет содержимое рабочего поля в каждом кадре и со-

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

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

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

Анимация с созданием промежуточных отображений характеризуется нестационарными

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

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

слое, и создает промежуточные отображения, постепенно изменяя содержимое рабочего поля из

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

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

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

1. Откройте новый документ, выполнив команду или вос-

пользовавшись комбинацией клавиш <Cmd+N> (Macintosh) или <Ctrl+N> (Windows).

2. Щелкните на инструменте Oval (Овал) и выберите заливку красного цвета без штриха.

Штрихи и анимация

При анимации сплошных изображений используйте штрихи только по мере необходимости, ко-

гда цвет штриха отличается от цвета заливки. Если цвет штриха не отличается от цвета заливки,

то Flash придется выполнять ненужные вычисления, что замедлит скорость воспроизведения

изображения и увеличит размер файла.

3. Вверху рабочего поля нарисуйте красный круг, перетаскивая инструмент Oval и удер-

живая при этом нажатой клавишу <Shift> (рис. 7.6).

4. Выделите круг и преобразуйте его в символ, нажав клавишу <F8>. В диалоговом окне

Convert to Symbol (Преобразовать в символ) присвойте символу имя переключа-

тель Behavior (Поведение) установите в поле опции Graphic (Графика) и щелкните в

центральном квадрате сетки регистрации. После этого закройте диалоговое окно Con-

vert to Symbol, щелкнув на кнопке ОК.

5. Теперь нужно заставить мяч двигаться. Для этого нужно изменить положение в ра-

бочем поле. На панели Timeline шкала) перейдите к кадру 12 и для вставки

ключевого кадра нажмите клавишу <F6>. Обратите внимание, что в рабочем поле пока

ничего не изменилось.

6. Выберите инструмент Arrow (Стрелка), выделите им мяч и переместите его в нижнюю

часть рабочего поля, как показано на рис. 7.7.

7. Воспроизведите фильм в рабочей области, нажав клавишу (Macintosh) или

<Enter> (Windows). Обратите внимание то, что во время воспроизведения кадров

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

Вспомните, что в кадрах отображается содержимое предшествующего ключевого кадра.

8. Чтобы добиться эффекта постепенного перемещения мяча в нижнюю часть рабочего

поля, выберите любой кадр между первым и двенадцатым. Откройте контекстное ме-

ню, щелкнув на кадре правой кнопкой мыши (Windows) или щелкнув на нем, удержи-

вая клавишу <Ctrl> (Macintosh). Из контекстного меню выберите пункт Create Motion

Tween (Создать эффект промежуточного движения).

ГЛАВА 7. АНИМАЦИЯ во FLASH 141

A

о .

Рис. 7.6. При первом добавлении в рабочее поле нового документа преоб-

разует единственный существующий кадр в ключевой

9. Снова воспроизведите анимацию, нажав клавишу (Macintosh) или <Enter>

(Windows). Теперь мяч будет постепенно падать во всех 12 кадрах.

10. Сохраните файл анимации под именем la. Мы еще вернемся к нему в этой главе.

Подробная информация о процедуре рисования простых фигур приведена в

главе 3 "Рисование во Flash", а о символах — в главе 6 "Символы, экземпляры

и элементы библиотек".

Можно создать и покадровую анимацию мяча, но лучше просто задать путь анимации и

позволить Rash выполнить всю работу автоматически. Тем самым вы сэкономите собствен-

ные силы и не увеличите размер файла. Анимация движения мяча позволяет оценить пре-

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

ПРОМЕЖУТОЧНОЕ ОТОБРАЖЕНИЕ ДВИЖЕНИЯ

. Существуют два типа промежуточных отображений: формы и движения. При промежу-

точном отображении движения интерполируются изменения положения, масштаба, враще-

ния, цвета и прозрачности изображения, расположенного в различных местах в нескольких

ключевых кадрах. При промежуточном отображении формы интерполируются отличия меж-

142 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

ду двумя изображениями, позволяя плавно преобразовывать одно в другое. Промежуточное

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

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

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

попытке создания промежуточного отображения без преобразования изображений в симво-

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

свойств — значок предупреждения (рис. 7.8).

т

II

Puc. В кадр 12 вставьте ключевой кадр и с помощью инструмента Arrow переместите

мяч в нижнюю часть рабочего поля

Эти признаки характеризуют незавершенное создание промежуточных отображений, и

при предварительном просмотре анимации вы увидите, что предполагаемые промежуточные

отображения не выполняются.

НАПРАВЛЯЮЩИЕ ДВИЖЕНИЯ

При создании промежуточного отображения движения Flash прокладывает кратчайший

путь между двумя положениями в ключевых кадрах. Хотя это и позволяет сэкономить на раз-

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

ную траекторию падения. Для получения правильной траектории необходимо создать на-

правляющую движения. Для этого выполните следующие действия.

ГЛАВА 7. АНИМАЦИЯ во FLASH 143

1. Откройте файл f la.

2. Для создания иллюзии отскока мяча необходимо сместить точку, в которой мяч касает-

ся земли. Щелкните на панели Timeline и выберите кадр 12.

3. Выберите инструмент Arrow и перетащите экземпляр мяча вправо по рабочему полю.

4. Воспроизведите нажав клавишу (Macintosh) или

(Windows). На рис. 7.9 видно, что мяч перемещается из верхней части рабочего поля в

правую нижнюю под неестественным углом. Чтобы решить эту проблему, необходимо

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

А Пунктирная линия на временной шкале и значок преду-

преждения на панели инспектора свойств свидетельствуют о не-

завершенном создании промежуточного отображения

Рис. 7.9. При переходе в режим Onion Skin (Калькирование) видно,

что при создании промежуточного отображения движения мяч

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

ключевых кадрах

144 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

5. Выделите слой, в котором располагается мяч, и выполните команду

Guide Направляющая движения). На рис. 7.10 что над выделен-

ным слоем добавляется слой направляющей движения.

Рис. Для создания направляющей движения выделите слой и выпол-

ните команду Guide

6. Выберите инструмент Pen (Перо), щелкните им на рабочем поле и перетащите так,

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

верхней части рабочего поля в нижнюю (рис.

4" А;

О

Рис. Для создания эффекта отскока воспользуйтесь инструментом

Реп и нарисуйте дугу, вдоль которой будет осуществляться движение мяча

7. В слое мяча выделите кадр 1 и проверьте, чтобы на панели инспектора свойств в поле

опции Snap (Привязка) был установлен флажок (рис. В этом случае точка реги-

страции промежуточного отображения объекта будет привязана к траектории направ-

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

8. В слое мяча выделите кадр 12 и с помощью инструмента Arrow перемещайте мяч по ра-

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

привязан к ее концу, как показано на рис.

ГЛАВА 7. АНИМАЦИЯ во FLASH 145

Рис. Для привязки точки регистрации про-

отображения объекта к направляю-

щей движения на панели инспектора свойств ус-

тановите флажок в поле опции Snap

, . И

Рис. Выделив кадр 12, с помощью инструмента Arrow переместите мяч вдоль траек-

тории направляющей движения к ее концу

9. Сохраните файл под именем f Воспроизведите анимацию, нажав клавишу

(Macintosh) или <Enter> (Windows). Теперь мяч должен перемещаться по дуге

направляющей движения, как показано рис.

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

конечной точке траектории направляющей движения. В опубликованном фильме эта траек-

тория видна не будет, поэтому для процесса привязки можно совершенно спо-

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

146 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

Подробно о направляющих движения рассказывается в разделе "Возможные

проблемы" в конце главы.

РЕГУЛИРОВКА

Частота смены кадров Flash-фильма является постоянной. При создании промежуточных

отображений перемещение объекта равномерно распределяется по числу кадров между ключе-

выми кадрами. Однако при таком подходе может возникнуть некоторая неестественность дви-

жения. Большинство движений начинаются и оканчиваются постепенно, если только в этот

процесс не вмешается никакая друга сила, как, например, сила тяжести в примере с падающим

Чтобы сымитировать естественные отклонения скорости, в промежуточных отображе-

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

менения между промежуточными кадрами. Отрицательные значения параметра

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

жительные значения (от 1 до соответствуют постепенному ускорению объекта.

Для изменения параметров регулировки в анимации падающего мяча выполните следую-

щие действия.

1. Откройте файл Ьа112 .

2. Щелкните на слое мяча и выделите промежуточный кадр движения.

3. На панели Timeline щелкните на кнопке Onion Skin (Калькирование), чтобы можно было про-

смотреть анимацию, после чего щелкните на кнопке Onion Marker (Маркер калькирования) и

из выпадающего меню выберите пункт Onion All (Калькировать все), как показано рис.

Рис. Если мяч привязан к концам на-

правляющей движения, он будет переме-

щаться по дуге

Рис. 7.15. Параметры калькирования позволяют

просматривать анимацию путем одновременного

отображения содержимого нескольких кадров

ГЛАВА 7. АНИМАЦИЯ во FLASH 147

4. На панели инспектора свойств щелкните на ползунке Ease (Регулировать) и перетащите

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

При включенном режиме калькирования изменения скорости представляются в виде из-

меняющихся расстояний между объектами в различных- кадрах. Для рассматриваемого

примера с мячом лучше всего подходит значение, равное приблизительно 30.

5. Сохраните файл под именем и протестируйте фильм, выполнив команду

Movie фильм).

rt CD

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

различных расстояний между объектами в кадрах

КАЛЬКИРОВАНИЕ

Как правило, в рабочем поле виден только один кадр. Однако в предыдущем примере мы

убедились, что в режиме калькирования одновременно можно просматривать несколько кад-

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

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

калькирования для проверки выравнивания и регулировки.

Калькирование очень полезно при корректировке распределения изображений во време-

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

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

не перекрываются, это означает, что анимация настолько быстрая, что объект будет казаться

прыгающим с места на место. При этом теряется эффект непрерывности движения. Мяч, изо-

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

га. Мяч, изображенный посередине, падает не очень медленно. Любая из этих скоростей может

оказаться востребованной, в зависимости от того, какой тип движения необходимо отобразить.

148 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

СОЗДАНИЕ ПРОМЕЖУТОЧНЫХ ОТОБРАЖЕНИЙ с ИЗМЕНЕНИЕМ ФОРМЫ

Во Flash можно интерполировать существенные изменения формы объектов. Построение

промежуточных форм создает иллюзию плавного перехода из одной формы в другую. В отли-

чие от промежуточных отображений движения, создание промежуточных отображений фор-

мы можно применять только к объектам простой формы. Для применения этого способа эк-

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

Для создания промежуточного отображения простой формы выполните следующие действия.

1. Откройте новый документ, воспользовавшись комбинацией клавиш <Cmd+N>

(Macintosh) или <Ctrl+N> (Windows).

2. Щелкните в рабочем поле и на панели инспектора свойств измените размеры фильма

на 400x200.

3. Выберите инструмент Rectangle (Прямоугольник) и с помощью модификатора задайте

любой цвет заливки без штриха. Щелкните в рабочем поле и нарисуйте большой пря-

моугольник.

4. Откройте панель Align (Выравнивание), воспользовавшись комбинацией клавиш

(Macintosh) или <Ctrl+K> (Windows). Выделите прямоугольник в рабочем

поле, а на панели Align щелкните на кнопке То Stage (К рабочему полю) и разместите

прямоугольник в центре рабочего поля по горизонтали и по вертикали. Для этого

щелкните на второй и пятой кнопках в строке Align (рис. 7.18).

Рис, На панели Align щелкните на кнопке То Stage и разместите

ник в центре рабочего поля по горизонтали и по вертикали

5. На панели Timeline перейдите к кадру 15 и нажмите клавишу <F7> для вставки пустого

ключевого кадра.

6. Выберите инструмент Text, а на панели инспектора свойств щелкните на кнопке полу-

жирного начертания. Щелкните инструментом Text в рабочем поле и введите свое имя,

7. Выделите текст с помощью инструмента Arrow. С помощью панели Align разместите

его в центре рабочего поля по горизонтали и по как это делалось на шаге 4.

8. Выделив текст, выполните команду Apart В ре-

зультате текстовый блок будет разбит на отдельные буквы (рис.

9. Выполните команду Apart второй раз, в результате чего буквы будут пре-

образованы в изображения (рис. 7.20).

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

раскрывающегося меню Tweens (Промежуточные отображения) выберите пункт

Shape (Форма), как показано на рис. 7.21.

ГЛАВА 7. АНИМАЦИЯ во FLASH 149

Рис. Чтобы разбить текст на буквы, выдели-

те его и выполните команду Apart

Рис. 7.20. Чтобы преобразовать буквы в изо-

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

текстового блока

Рис. 7.21. Выделите кадр между двумя ключевыми кадрами и на панели инспектора свойств

из раскрывающегося меню выберите пункт Shape

11. Сохраните фильм и протестируйте его, выполнив команду Movie. Вы

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

К промежуточным отображениям формы также можно применить регулировку. Кроме

того, на панели инспектора свойств имеется еще одна опция, Blend (Сопряжение), которая

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

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

вание применимо только к формам с четкими краями и углами.

Промежуточное отображение формы является очень мощным средством, но при этом

размер файла может существенно увеличиться. Поэтому пользуйтесь им достаточно осторож-

но и поэкспериментируйте с простыми формами.

150 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

ВШИ:

о

1 ,

fctr •

•

Рис. 7.22. Прямоугольник преобразовывается в имя Рис. 7.23. При промежуточном отображении с

изменением формы с помощью опции сопряжения

можно сохранить четкие края углы формы

УКАЗАТЕЛИ ФОРМЫ

При построении промежуточных отображений Flash создает простейшую интерполяцию

изображений. Иногда это может привести к странным и нежелательным эффектам, как, напри-

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

Во время интерполяции участки некоторых форм могут выворачиваться. К счастью, вы можете

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

таваться неизменными. При создании промежуточных отображений с изменением формы мож-

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

1. Выберите в последовательности промежуточных отображений первую форму.

2. Выполните команду Shape Hint

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

кружка с буквой "а".

3. Щелкните на указателе формы инструментом Arrow и перетащите его в точку, которую

хотите отметить (рис. 7.24).

4. Щелкните на последнем кадре промежуточных изображений. На рис. 7.25 видно, что со-

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

5. Снова протестируйте фильм, выполнив команду Movie, и вы увидите, как

указатель формы влияет на промежуточные отображения. При создании промежуточ-

ных отображений можно добавить до 26 указателей формы.

Рис, 7.24. Указатели формы имеют вид красных

кружков с буквами. Перетащите их в точки

формы, которые хотите пометить при созда-

нии промежуточных отображений

Рис. 7.25. Соответствующий указатель формы

появится в том же месте последнего кадра

промежуточных отображений

ПЕРЕМЕЩЕНИЕ по ВРЕМЕННОЙ ШКАЛЕ

Сущностью анимации является движение, поэтому предварительный просмотр анимации

в движении при работе над фильмом является очень важным моментом. Во Flash можно

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

увидеть создаваемый фильм в развитии. Для просмотра кадров на воспроизводя-

щей головке в верхней части панели Timeline (рис. 7.26) и перетащите ее по кадрам. Текущий

ГЛАВА 7. АНИМАЦИЯ во 151

кадр указывает красная линия, проходящая от воспроизводящей головки к нижней части па-

нели Timeline. Продвижение по временной шкале особенно полезно при совершенствовании

анимации, поскольку позволяет перемещаться по фильму быстрее или медленнее, в зависи-

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

Рис. 7.26. Для перемещения по временной шкале щелкните и перетащи-

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

угольник, расположенный в верхней части панели

Просмотреть фильм в процессе работы можно также с помощью меню Control

(Управление) (рис. 7.27). Чтобы просмотреть фильм с заданной частотой смены кадров, из

меню Control выберите пункт Play (Воспроизведение) либо нажмите клавишу

(Macintosh) или <Enter> (Windows). Особенно полезной является возможность перемещения

по фильму на один кадр вперед (клавишей быстрого доступа является О) или назад

(клавишей быстрого доступа является <,>).

Window Help

Step Forward

Simple Frame Actions

Enable Simple

Mute Sounds : У

Preview

Рис. 7.27. Чтобы просмот-

реть фильм в процессе рабо-

ты, выберите нужный пункт

Control

МУЛЬТИПЛИКАЦИЯ во FLASH

Векторный формат Flash превосходно подходит для созда-

ния мультипликации. Векторная графика напоминает исполь-

зующиеся в мультипликации рисунки, а кроме того, в про-

грамме Flash ее очень легко преобразовать. Во Flash можно

применять многие традиционные методики мультипликации.

СОЗДАНИЕ ЭФФЕКТА ПАНОРАМЫ

Классической методикой анимации, которую можно пере-

нести в Web, является создание эффекта панорамы. Панорама

создает иллюзию глубины. В фильме это достигается путем па-

норамирования камеры либо с помощью перемещения камеры

по сцене на фиксированной высоте с целью полного охвата

фона. В анимации этот эффект моделируется путем перемеще-

ния фона при неподвижном рабочем поле.

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

анимированных с различными скоростями. Самые дальние элементы должны двигаться с са-

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

но расположенной позади них сцены, что создает иллюзию глубины.

Для создания эффекта панорамы выполните следующие действия.

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

левый и правый края фона должны располагаться так, чтобы при движении фон казал-

ся непрерывным.

2. Создайте промежуточное отображение фонового элемента в рабочем поле так, чтобы в

первом ключевом кадре правый край фона совпал с правым краем рабочего поля. В по-

следнем ключевом кадре левый край фона должен совпасть с левым краем рабочего по-

ля. Это создает иллюзию постоянного движения и разрастающегося обширного фона.

152 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

Циклы символов

Самым простым способом анимации символов является использование вложен-

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

анимации на механические части, которые можно использовать повторно или циклически.

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

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

Анимацией, реалистичности которой добиться сложнее всего, является ходьба человека. Для

достижения максимальной эффективности и реальности такую анимацию можно создать с по-

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

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

торса и ног. Голова может представлять собой одно графическое изображение. Видеоклип торса

может содержать два экземпляра символа руки, а видеоклип ног — два аними-

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

полным шагом, который можно повторять, не перерисовывая изображения.

ОСНОВНЫЕ ПРАВИЛА ПРИ СОЗДАНИИ АНИМАЦИИ

Любая анимация, будь то классическая мультипликация или сложное движение, выпол-

няемое по определенному сценарию, будет гораздо эффективнее, если при ее создании руко-

водствоваться следующими основополагающими принципами.

• Распределение во времени и движение. Распределение во времени придает особое зна-

чение перемещению. Скорость, с которой происходит перемещение, может придавать

одному и тому же движению разные смысловые оттенки. Представьте себе удар кула-

ком по столу. В зависимости от того, как реализовать анимацию этого движения

(быстро или медленно), можно передать настроение: плохое или игривое.

Распределение во времени и пошаговое перемещение являются основой создания реа-

листичного и интересного движения. Управляя перемещением объекта во времени, вы

можете сделать его более реалистичным, отобразив его атрибуты. Тяжелые объекты

сложнее перемещать, а процедура их разгона или торможения занимает больше вре-

мени. Далеко не все объекты двигаются с одинаковым шагом, поэтому вам придется

задавать разную скорость, с которой выполняется то или действие.

Пошаговое продвижение также является важным фактором при создании анимации.

Существует очень хрупкое равновесие между процессом ожидания действия, самим

действием и реакцией на него. Если шаг продвижения слишком медленный, зритель

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

жет быть непонятным и неверно проинтерпретированным. Кроме того, поэкспери-

ментируйте, выбирая длину каждой сцены, — они не должны иметь одинаковую про-

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

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

перед началом действия. С другой стороны, длительное ожидание, сопровождаемое

быстрым действием и реакцией на него, может выглядеть комично.

• Ожидание. Движение будет наиболее динамичным и реалистичным, если ему будет

предшествовать процедура ожидания. Бегуны, прежде чем помчаться по дорожке, не-

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

много переместить объект в противоположном направлении.

• Завершение. Движение не может прекратиться мгновенно. Бегуны не останавливаются

сразу же после того, как пересекают финишную черту, а продолжают бег, замедляя его

ГЛАВА 7. АНИМАЦИЯ во FLASH 153

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

вающего мяч (например, в волейболе), после того, как была выполнена подача. По-

этому не прекращайте движение резко, а постарайтесь плавно завершить его немного

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

• Деформация. Далеко не все объекты в процессе движения остаются недеформирован-

ными. Большинство объектов при движении или при столкновении слегка меняют

свою форму. Чтобы сделать отскок мяча более реалистичным, необходимо добавить

промежуточную форму, впечатление того, что при падении мяч слегка

растягивается (это достигается за счет того, что мяч делается тоньше и длиннее), а при

столкновении с землей сплющивается (становится короче и толще).

• Накладывающиеся действия. Действие становится более интересным, если оно варьи-

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

менно. По возможности комбинируйте движение: пусть второй объект начнет дви-

гаться до того, как остановится первый.

• Вторичное действие. Анимация будет более эффективной, если она порождает волновой

эффект. Движение редко происходит автономно. Результатом первичного действия яв-

ляется вторичное действие, выражаемое в отражении или усилении основного действия.

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

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Я направляющий слой и траекторию движения, вдоль которой должна выпол-

няться анимация. Почему она не

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

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

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

заны к траектории.

могу добавить промежуточное отображение с изменением формы. Почему?

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

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

быть символами или быть сгруппированными, а вот промежуточное отображение с измене-

нием формы не может быть применено к группам или символам. Эту проблему можно обойти

путем разбивки экземпляра символа. Для этого выделите экземпляр в рабочем поле и вос-

пользуйтесь комбинацией клавиш <Cmd+B> (Macintosh) или <Ctrl+B> (Windows), в резуль-

тате чего символ будет преобразован в объект. Если символ содержит вложения, его придется

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

символ остается в библиотеке в неизменном состоянии.

Можете дать совет по управлению и пошаговому продвижению сложной анимации ?

Если фильм содержит большое количество сложной анимации, особенно анимации персона-

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

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

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

ровать взаимодействие объектов и более точно представить себе распределение во времени.

154 ЧАСТЬ II. АНИМАЦИЯ ЗВУК

FLASH ЗА РАБОТОЙ: УПРОЩЕНИЕ АНИМАЦИИ

Математическая точность векторной графики Flash способствует тому, что анимацией

может заниматься всякий, кто способен работать с графическими программами. Представьте

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

фильмов Диснея. Благодаря Flash анимация стала гораздо более доступной.

Обратной стороной медали векторного формата Flash является то, что векторы могут быть на-

столько точными, что потеряют индивидуальность и станут менее интересными. В реальном мире

объекты могут иметь дефекты формы, а движение часто бывает неравномерным. Чтобы с помо-

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

только в качестве стартовой площадки. Немного подкорректируйте формы, делая их менее

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

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

руйте покадровую и промежуточную анимацию для получения наиболее реалистичных эффектов.

И самое главное, черпайте вдохновение именно из несовершенства окружающего вас мира.

ГЛАВА 7. АНИМАЦИЯ во FLASH 155

ГЛАВА 8

ИСПОЛЬЗОВАНИЕ ЗВУКА

В ЭТОЙ ГЛАВЕ...

Знакомство со звуком 157

Подготовка звука для Flash

Импортирование звука 160

Синхронизация звуков 161

Редактирование звука 163

Управление звуком 165

Оптимизация звука 167

Возможные проблемы

Flash за работой: отключение звука

ЗНАКОМСТВО со ЗВУКОМ

Звук придает фильмам Macromedia Flash глубину и резонанс. Даже до того, как в фильмы

можно было встраивать звуковые дорожки, для акцентирования внимания на каком-то дей-

ствии в немых фильмах использовалось фоновое звуковое сопровождение. Чтобы в полной

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

фильм "Челюсти" без угрожающей музыки.

Между восприятием видеоинформации и восприятием звука существует несколько суще-

ственных отличий. Обычно человек мигает около 20 раз в минуту, а каждое мигание длится

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

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

соединению визуальных точек позволяет воспринимать которые представляют со-

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

создает иллюзию непрерывного движения.

Мозг человека не является столь же снисходительным к заполнению пауз при восприятии

аудиоинформации. Наоборот, человек очень чувствителен к вариациям звука. Хотя отобра-

жение фильма реализуется в виде статических кадров, звуковое сопровождение подается в

виде непрерывного потока или звуковой дорожки. Однако особенности передачи содержи-

мого Web затрудняют имитацию непрерывной звуковой дорожки.

Звук создается при колебаниях объектов. Эти колебания смещают частицы воздуха и пе-

реносятся в пространстве в виде звуковых волн. Когда эти волны достигают барабанной пе-

репонки, мозг воспринимает колебания как звук. Звуки отличаются друг от друга частотой,

скоростью колебания атмосферного давления. Чем больше колебаний, тем выше их час-

тота, и при этом тон звука воспринимается как более высокий. Амплитудой является уровень

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

Звуковая волна изображена на рис. Этот момент является очень важным, так как для по-

дачи звука программа Flash должна воспроизвести звуковые волны.

Частота

Рис. "Анатомия звуковой волны. Частота определяет тон, а

амплитуда — громкость

ПОДГОТОВКА ЗВУКА для FLASH

Чтобы иметь возможность воспроизвести звук, звуковые волны дискретизируют. Дискре-

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

(звуковые биты) и как можно более частое воспроизведение этих выборок (рис. 8.2). Число

выборок в секунду называется частотой дискретизации и измеряется в герцах (Гц).

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

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

кадров фильма (выражаемое в кадрах в секунду). Это понятие также аналогично точечному

разрешению. Чем выше частота дискретизации (чем большей является выборка), тем точнее

будет воспроизведена исходная звуковая волна. В табл. указаны стандартные частоты дис-

кретизации и соответствующие им значения точности воспроизведения, т.е. качества звука.

ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

Частота (Гц)

Рис. 8.2. Дискретизация звука: серые полосы представляют собой

выборку звуковой волны

ТАБЛИЦА 8.1. ЧАСТОТЫ ДИСКРЕТИЗАЦИИ ЗВУКА

ЧАСТОТА

ДИСКРЕТИЗАЦИИ

КАЧЕСТВО ЗВУКА

44,1 КГц

22,05 КГц

КГц

КГц

Качество компакт-диска

Качество радио широко используется при воспроизве-

звука в Web

Самое низкое качество, рекомендуемое для коротких музыкальных

фрагментов; высокое качество речи

Низкое качество воспроизведения речи

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

дискретных уровней амплитуд применяется при выполнении дискретизации звука. Это поня-

тие аналогично битовой глубине растровых изображений. Чем больше битовая глубина, тем

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

битовой глубины звука и соответствующее им качество звука.

ТАБЛИЦА 8.2. БИТОВАЯ ГЛУБИНА ЗВУКА

БИТОВАЯ

ГЛУБИНА

16

12

8

4

ЧАСТОТА ДИСКРЕТИЗАЦИИ

(ЧИСЛО ИМПУЛЬСОВ В СЕКУНДУ)

256

16

КАЧЕСТВО ЗВУКА

Качество компакт-диска

Среднее, близкое к компакт-диску

Качество радио FM-диапазона

Самое низкое, допустимое для вос-

произведения музыки

ГЛАВА 8. ИСПОЛЬЗОВАНИЕ ЗВУКА 159

Вполне естественно, что высокая частота дискретизации и большая битовая глубина при-

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

лировать независимо друг от друга в целях уменьшения размеров файлов. По сравнению с му-

зыкой речь имеет меньше тональных отклонений, но больше колебаний амплитуды или звука

из-за пауз между словами и предложениями. Во время этих пауз может возникать нежела-

тельное шипение и шумы. Следовательно, для уменьшения шумов и шипения во время пауз

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

И наоборот, музыка имеет гораздо больший диапазон тональности или частоты, поэтому

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

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

товая глубина может быть меньше.

Кроме того, большое влияние на размер файла оказывает выбор между стерео- и монозву-

ком. Монозвук записывается на одной звуковой дорожке или в одном канале. Если имеются

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

лах, что способствует лучшему воспроизведению эффекта слуха человека. Совершенно оче-

видно, что два в два раза увеличивают размер файла.

ИМПОРТИРОВАНИЕ ЗВУКА

Flash позволяет импортировать элементы, созданные в других приложениях (например,

звуковые файлы или растровые изображения), и затем использовать их в фильмах. Звуки, им-

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

вые файлы следующих форматов.

• WAV (только Windows). Формат Waveform Audio File Format разработан для платформы

Windows и является для нее стандартным форматом звуковых файлов.

• AIFF (только Macintosh). Формат Audio Interchange File Format разработан компанией

Apple и является стандартным форматом звуковых файлов для Macintosh.

• МРЗ (Macintosh и Windows). Формат Audio обеспечивает значитель-

ное сжатие звуковых данных без ущерба для качества звука. С помощью МРЗ-сжатия

исходные данные компакт-диска можно сжать в 12 раз.

Если на компьютере установлена надстройка QuickTime 4 или последующей версии, мож-

но также импортировать файлы следующих форматов.

• AIFF (Windows или Macintosh).

• Sound Designer II (только Macintosh).

• Звук фильмов QuickTime (Windows или Macintosh),

• Sun AU (Windows или Macintosh).

• System 7 Sounds (только Macintosh).

• WAV (Windows или Macintosh).

МРЗ является единственным импортируемым звуковым форматом, который предвари-

тельно сжат. Следовательно, файлы формата МРЗ меньше файлов WAV или AIFF. Для им-

портирования звукового файла выполните команду to Library

в библиотеку) и в открывшемся диалоговом окне Import to Library

(рис. 8.3) укажите нужный звуковой файл.

Выберите звуковой файл и щелкните на кнопке Open (Открыть). Файл будет добавлен в

библиотеку, как показано на рис. 8.4. Чтобы предварительно прослушать звуковой файл, вы-

берите его в библиотеке и щелкните на кнопке с изображением треугольника, расположен-

ной в верхней части окна просмотра.

160 ЧАСТЬ II. АНИМАЦИЯ ЗВУК

8.3. Чтобы импортировать звуковой файл в библио-

теку, выполните команду File to Library

Рис. 8.4. Импортированные звуки до-

бавляются в библиотеку

Лучше всего поместить каждый звуковой файл в отдельный слой. Для добавления слоя в

фильм выполните команду слой) или щелкните на пикто-

грамме Insert Layer (Вставить слой), расположенной под списком слоев на временной шкале.

Выделив слой, перетащите звуковой файл с панели Library (Библиотека) в рабочее поле. (Во

Flash MX имеются образцы звуков, доступ к которым осуществляется с помощью команды

При этом откро-

ется библиотека звуков.) На рис. 8.5 что звук будет помещен в выделенный слой.

Рис. 8.5. При перетаскивании зву-

ка в поле он будет поме-

щен в выделенный слой

Свойства звукового файла отображаются на панели инспектора свойств, как показано на

рис. 8.6. Обратите внимание на то, что в правом нижнем углу панели указаны значения часто-

ты дискретизации звука, число звуковых каналов и битовая глубина.

22 EH

Puc. 8.6. Атрибуты звука указаны и доступны для редактирования на панели ин-

спектора свойств

СИНХРОНИЗАЦИЯ ЗВУКОВ

Важно понимать, что в отличие от звук реализуется не посредством кадров, а

во времени. Звук передается с одинаковой скоростью, поскольку это необходимо для сохра-

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

ГЛАВА 8. ИСПОЛЬЗОВАНИЕ ЗВУКА 161

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

танавливать и переходить от кадра к кадру.

Как же синхронизировать звук с анимацией, если управляются они совершенно по-

разному? К сожалению, не существует способа абсолютно точной синхронизации звука и

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

мум, что можно сделать, — это поместить звук в то место, в котором он должен находиться, и

поработать над оптимизацией его передачи.

При работе с содержимым, размещаемым в Web, необходимо идти на определенные ком-

промиссы. Если частота дискретизации составляет тысячи выборок в секунду, как и ви-

деоматериалы, звук будет влиять на увеличение размера файла Flash-фильма. При создании

файлов озвученной анимации, которые необходимо разместить в Internet, следует отдавать

предпочтение чему-то одному: или звуку, или анимации.

ЧТО ПЕРВИЧНО? ЗВУК ИЛИ АНИМАЦИЯ

Для того чтобы поместить звук в фильм, в программе Flash существуют два способа, позво-

ляющие что именно будет первичным в фильме: звук или анимация. Событийные

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

звука инициируется событиями, например, наведением указателя мыши на кноп-

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

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

шкалы, даже если воспроизведение самого фильма будет прекращено. Если при воспроизведе-

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

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

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

изведение. Этот факт необходимо принимать во внимание при их использовании. Если собы-

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

подождать завершения загрузки звука.

Другим способом синхронизации является использование потокового звука. Потоковый

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

звуку, и Flash может при необходимости даже отбросить кадры анимации. Потоковый звук

привязан к временной шкале. Такой звук воспроизводится и останавливается при воспроиз-

ведении или остановке фильма, и если шкала содержит меньше кадров, чем зани-

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

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

используют в качестве непрерывного фонового озвучивания.

При помещении звукового файла в рабочее поле на панели инспектора свойств необхо-

димо указать один из параметров синхронизации (рис. 8.7).

Рис. Доступ к параметрам синхронизации

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

ПАРАМЕТРЫ СИНХРОНИЗАЦИИ

Параметрами синхронизации являются Event (Событие), Start (Запуск), Stop (Остановка)

и Stream (Поток). При выборе параметра Event звук будет синхронизован с ключевым ка-

дром, в который он помещен. В этой роли может выступать и кадр состояния кнопки. Пара-

метр Start назначает событийный звук и препятствует наложению звука при повторении ини-

162 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

циирующего события. При выборе параметра Start одновременно может воспроизводиться

только один звук. Параметр Stop останавливает любой событийный звук. При выборе пара-

метра Stream звук синхронизируется с анимацией.

При помещении звука в рабочее поле обратите внимание на то, что экземпляр звука зай-

мет только один кадр на временной шкале (см. рис. 8.5). Это происходит потому, что для пол-

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

И наоборот, потоковый звук воспроизводится в нескольких кадрах временной шкалы, содер-

жащих этот звук. При помещении звука в рабочее поле Flash никоим образом не сможет уз-

нать, как именно вы собираетесь синхронизировать этот звук. При использовании потоко-

вого звука для его полного воспроизведения к слою звука потребуется добавить кадры, как

показано на рис. 8.8. В слое звука выделите кадр, например 30-й, и для вставки кадров на-

жмите клавишу <F5>. Во всех кадрах, занимаемых звуком, появится изображение звуковой

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

сколько кадров или, наоборот, удалить лишние.

|

Рис. 8.8. Для корректировки длительности потокового звука придется добавить

кадры к временной шкале

РЕДАКТИРОВАНИЕ ЗВУКА

После размещения звука есть несколько возможностей отредактировать его. Несмотря на

то что во Flash нет возможности полноценного звука (т.е. когда можно изме-

нить саму звуковую волну), можно изменить способ воспроизведения звука. Для этого на па-

нели инспектора свойств имеется раскрывающееся меню Effect (Эффект), показанное на

рис. 8.9, позволяющее регулировать громкость воспроизведения (опции Fade In

(Увеличение) и Fade Out

При выборе опции None (Нет) (по умолчанию) к звуку не будут применяться никакие эф-

фекты либо будут удалены ранее заданные эффекты. Параметры Left Channel (Левый канал) и

Right Channel (Правый канал) позволяют воспроизводить только один из звуковых каналов.

При выборе параметра Fade Left to Right (Затухание слева направо) или Fade Right to Left

(Затухание справа налево) звук смещается из одного звукового канала в другой, что создает эф-

фект панорамирования. При выборе параметра Fade In (Увеличение) в процессе воспроизведе-

ния будет плавно повышаться громкость (амплитуда) звука. При выборе параметра Fade Out

(Уменьшение) громкость звука будет плавно уменьшаться.

При выборе параметра Custom (Настройка) или после щелчка на кнопке Edit

(Редактирование) откроется диалоговое окно Edit Envelope (Редактировать огибающую) с

более сложными элементами управления громкостью (рис. 8.10).

ГЛАВА 8. ИСПОЛЬЗОВАНИЕ ЗВУКА 163

Чтобы изменить начало воспроизведения звука в звуко-

вой волне, перетащите ползунок Time In (Время вступле-

ния) на середину диалогового окна Edit Envelope. В конце

полосы воспроизведения есть соответствующий ползунок

Time Out (Время окончания). С помощью этих элементов

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

Маркеры огибающей, расположенные в звуковом кана-

ле и представляющие собой квадраты, которые можно пере-

таскивать, позволяют регулировать громкость в заданном

канале. После открытия диалогового окна Edit Envelope в

• :

to

In . .

Out

Custom

Рис. 8.9. Раскрывающееся меню Effect

на панели инспектора свойств позво-

ляет применять основные эффекты к

экземплярам звука

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

щите маркер вверх или вниз. Для постепенного увеличения или уменьшения громкости щелк-

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

равно 8). Дополнительные маркеры можно перетаскивать и тем самым независимым образом

регулировать громкость отдельных участков звука.

Кнопки Zoom In (Увеличить масштаб) и Zoom Out (Уменьшить масштаб) используются

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

волны. После щелчка на кнопке Seconds (Секунды) или Frames (Кадры) звук можно соотно-

сить со временем или с количеством кадров. Кнопки Play (Воспроизвести) и Stop

(Остановить) используются для предварительного прослушивания внесенных правок. Если

вы удовлетворёны внесенными изменениями, щелкните на кнопке ОК.

Звук можно воспроизводить циклически. Выделив экземпляр звука, на панели инспекто-

ра свойств в поле Loop (Цикл) введите числовое значение, как показано на рис. Если вы

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

звук будет длительным.

Маркеры огибающей

Время вступления

Остановка

Воспроизведение Увеличение Кадры

Рис. Диалоговое окно Edit Envelope позволяет управлять звуковыми эффектами

Рис. Чтобы звук воспроизводился повторно, на панели инспектора свойств в по-

ле Loop введите какое-либо число

164 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

Внимание! При циклическом воспроизведении потокового звука в конец временной шка-

лы добавляться кадры с целью реализации цикличности. Это приведет к

увеличению размера файла

УПРАВЛЕНИЕ ЗВУКОМ

Начало и окончание воспроизведения звука регулируются с помощью ключевых кадров

на временной шкале или путем доступа к объекту Sound (Звук) с помощью Не-

смотря на то что звук реализуется во времени, его начало и окончание можно привязать к со-

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

зировать с анимацией. Объект Sound позволяет расширить возможности управления воспро-

изведением звука.

КЛЮЧЕВЫЕ КАДРЫ

Ключевые кадры используются для начала и завершения воспроизведения звука в син-

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

1. Создайте новый слой для звука и вставьте в него ключевой кадр в месте предполагае-

мого начала воспроизведения звука (рис.

-. .

to

Puc. В слое звука добавьте ключевой кадр там, где будет

начинаться воспроизведение

2. Выделив ключевой кадр в слое звука, перетащите звук из библиотеки в рабочее поле, в

результате звук будет добавлен во шкалу (рис.

•

Puc. Выделив ключевой кадр в слое звука, перетащите эк-

земпляр звука из библиотеки в рабочее поле

3. Вставьте ключевой кадр в слой звука там, где необходимо завершить воспроизведение

(рис. 8.14).

4. На панели инспектора свойств выберите параметр синхронизации звука и для предва-

рительного прослушивания звука во временной шкале нажмите клавишу

(Macintosh) или <Enter> (Windows).

Особенно важно предварительно прослушать звук, если вы хотите его уменьшить

(остановить до окончательного завершения). Это позволит убедиться, что звучание является

ГЛАВА 8. ИСПОЛЬЗОВАНИЕ ЗВУКА 165

приемлемым, и избежать ошибочного прерывания, отвлекающего внимание пользователя от

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

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

(если только вы не хотите добиться именно этого эффекта).

Рис. Чтобы остановить воспроизведение звука, вставьте

ключевой кадр в нужное место слоя звука

СВЯЗЫВАНИЕ и ОБЪЕКТ SOUND

Звук можно добавить и отрегулировать с помощью объекта Sound (Звук) и языка

Использование этого объекта позволяет пользователю самостоятельно регули-

ровать воспроизведение звука в фильмах. Объект Sound позволяет включать и отключать

звук, изменять его громкость или панорамирование, а также начинать воспроизведение од-

ного звука после завершения другого.

Чтобы узнать, как использовать ActionScript для управления обратитесь

к главе 16 "Взаимодействие, события и установление последовательности" и к

главе 20 "Использование встроенных объектов фильмов".

Чтобы получить доступ к звуку с помощью объекта Sound, на панели Library (Библиотека)

для образца звука необходимо назначить идентификатор. Откройте панель Library и выделите

необходимый звук. Щелкните на нем правой кнопкой мыши (Windows) или, удерживая кла-

вишу <Ctrl> (Macintosh), из всплывающего меню выберите пункт (Связывание), как

показано на рис. Команду Linkage можно также выбрать из меню параметров панели Li-

brary, расположенного в ее правом верхнем углу.

Установите флажок в поле опции Export for ActionScript (Экспортировать для

ActionScript). При этом имя символа звука будет указано в поле Identifier (Идентификатор), а

кроме того, будет автоматически установлен флажок в поле опции Export in First Frame

(Экспортировать в первый кадр) (рис. 8.16).

35mm

. 0 Export

Q Export runtime

Export In flrstfram*

Рис. 8.16. Чтобы указать идентификатор связи, в диалоговом

окне Linkage Properties установите флажок в поле опции

port for ActionScript

166 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

Все экспортируемые звуки загружаются в первый кадр фильма — не тогда, ко-

гда их присоединяют или воспроизводят. Это может привести к длительной за-

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

Может возникнуть необходимость внести изменение в поле Identifier, в которое автомати-

чески вносится имя символа. Поле с отредактированным идентификатором изображено на

рис. 8.17. Присвойте идентификатору простое и описательное имя и не используйте в нем

символы пробелов, даже если имя состоит из нескольких слов.

Рис. 8.15. Чтобы открыть диалоговое окно

Linkage Properties (Свойства связей), на па-

нели Library щелкните на имени символа пра-

вой кнопкой мыши (Windows)

Рис. Возможно, вам понадобится изме-

нить имя идентификатора, которое автома-

тически указывается при установке флажка в

поле опции Export for

После внесения всех необходимых правок щелкните на кнопке ОК, чтобы закрыть диа-

логовое окно Linkage Properties.

Альтернативой присоединению звука является его помещение в отдельный фильм (внешний

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

Этот подход позволяет во время загрузки звука воспроизводить основной фильм.

ОПТИМИЗАЦИЯ ЗВУКА

Поскольку звук может существенно повлиять на размер файла Flash-фильма, его необхо-

димо оптимизировать. В принципе оптимизация должна начинаться еще до импортирования

звука. Так как во Flash функции редактирования звука ограничены, лучше всего воспользо-

ваться специальными приложениями, если, конечно, у вас есть к ним доступ.

Звуки можно сжимать индивидуально, чтобы файлы имели минимально возможные раз-

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

ГЛАВА 8. ИСПОЛЬЗОВАНИЕ ЗВУКА 167

символа звука на панели Library, либо щелкните на символе правой кнопкой мыши

(Windows), либо, удерживая нажатой клавишу <Ctrl> (Macintosh), из контекстного меню вы-

берите пункт Properties (Свойства). В результате откроется диалоговое окно Sound Properties

(Свойства звука), изображенное на рис. 8.18.

Mono

Export Settings

| Cancel j

| Update |

|

|

• I Stop |

ADPCM

Raw

use on export

Каждый звуковой файл можно сжать индивидуально, выбрав

нужные параметры в диалоговом окне Sound Properties

Из раскрывающегося меню Compression (Сжатие) выберите нужный параметр. При вы-

боре первого из них, Default (По умолчанию), будут использоваться глобальные параметры

сжатия, заданные в диалоговом окне Publish Settings (Параметры публикации). По умолча-

нию параметром сжатия для Flash является МРЗ 16-bit mono, однако в диалоговом окне Pub-

lish Settings эту настройку можно изменить. Если в диалоговом окне Sound Properties вы-

брать опцию то никакие другие параметры сжатия доступны больше не будут.

ADPCM (Adaptive Differential Pulse Code адаптивная дифференциальная

импульсно-кодовая модуляция) сжимает 8- или 16-битовые звуковые данные. При выборе

этого параметра в диалоговом окне Sound Properties становится доступным ряд дополни-

тельных параметров (рис. 8.19). Сжатие ADPCM часто используется для экспортирования

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

Опция Convert Stereo to Mono (Преобразовать стерео в моно) используется для сжатия

двух звуковых каналов в один. На монозвук эта опция не влияет.

Частота дискретизации 22 КГц является стандартной для Web и равна половине частоты

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

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

Однако можно уменьшить битовую глубину, что уменьшит диапазон отклонений в преде-

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

уменьшению размера файла, но понижает качество звука. Поэтому, воспользовавшись кноп-

кой Test (Тест), обязательно прослушайте звук при задании разных параметров.

168 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

МРЗ-СЖАТИЕ

В диалоговом окне Sound Properties для звуковых файлов можно выбрать параметр МРЗ-

Этот тип сжатия позволяет получить минимальные размеры звуковых файлов при

наилучшем качестве звука, поэтому естественно, что этот параметр применяется чаще всего.

Данный тип сжатия является наилучшим для длительных и потоковых звуковых файлов.

Выберите пункт МРЗ из раскрывающегося меню Compression. При этом можно выбрать

либо исходные параметры МРЗ-сжатия импортированного звука, установив флажок в поле

опции Use Imported МРЗ Quality (Использовать качество МРЗ импортированного файла),

либо детализировать эти параметры (рис. 8.20).

Preprocessing:

Rate: 22kHz

ADPCM Bits:

Mono 7.3

Export Settings

Imported quality

Compression:

Preprocessing: 0

Rate: [ tops j

Mono

8.19. Параметры сжатия ADPCM Рис. 8.20. Параметры МРЗ-сжатия

Чтобы отредактировать параметры, убедитесь, что не установлен флажок в поле опции

Use Imported МРЗ Quality. Затем перейдите к меню Bit Rate (Скорость передачи), которое

определяет скорость передачи экспортируемого звука в битах в секунду. Для поддержания

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

При выборе МРЗ-сжатия можно также сжимать стереодорожки в моно. Наконец, из рас-

крывающегося меню Quality (Качество) можно выбрать три параметра: Fast (Быстрое), Nor-

mal (Обычное) и Best (Наилучшее). Чтобы получить наилучшее сжатие, протестируйте зву-

ковой файл с различными параметрами качества.

Особенно важным является тщательное сжатие потокового звука. Несмотря на то что па-

раметры сжатия потоковых звуковых файлов можно задать индивидуально, все потоковые

файлы фильма экспортируются вместе в один потоковый файл, к которому применяется са-

мое высокое значение параметров сжатия из тех, что задавались для отдельных файлов. Пото-

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

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему кажется, что качество событийных звуков выше качества потокового звука?

Вероятно, вы обратили внимание на то, что звуки, синхронизированные с событиями,

звучат лучше, чем потоковые. Это происходит потому, что событийные звуки полностью за-

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

Воспроизведение потоковых звуков начинается с момента их загрузки, и при этом они ис-

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

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

ковые данные при этом все же теряются.

ГЛАВА 8. ИСПОЛЬЗОВАНИЕ ЗВУКА 169

ли какой-то способ предотвратить пропуск кадров при использовании потоко-

вого звука ?

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

кадры могут быть пропущены. Однако кадры анимации можно сохранить, выбрав меньшую

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

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

элементов фильма.

Как лучше всего синхронизировать звук и анимацию ?

Лучше всего управлять звуком, запуская его из временной шкалы. По возможности разбейте

звук на короткие сегменты, которые можно поместить в кадры и скоординировать с анимиро-

частями фильма. Благодаря краткости такими звуками будет легче управлять и привя-

зывать их к определенным кадрам. Представьте себе синхронизацию песни Happy Birthday с

персонажем. Лучше всего разбить песню на отдельные слова и стро-

фы, которые затем можно индивидуально синхронизировать с анимацией.

Во Flash можно даже вручную микшировать короткие звуки, помещая их в отдельные слои

и накладывая участки этих слоев друг на друга. Это позволяет полностью управлять коротки-

ми звуками и создавать более сложное и изысканное звучание, когда звуки синхронизируют-

ся не только с анимацией, но и друг с другом.

FLASH ЗА РАБОТОЙ: ОТКЛЮЧЕНИЕ ЗВУКА

В связи с тем, что звук является столь объемным дополнением к фильму, пользователь

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

из-за того, что им не понравилась музыка.

При использовании потокового звука обязательно добавьте кнопку для его отключения.

Это очень легко сделать даже тем, кто не силен в написании кода. Чтобы отключить звук, вы-

полните следующие действия.

1. Создайте кнопку выделите ее в рабочем поле.

2. Откройте панель Actions (Действия), нажав клавишу <F9>. Если вы не очень хорошо

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

бинацией клавиш <Cmd+N> (Macintosh) или <Ctrl+N> (Windows).

3. В левой части окна Actions откройте папку Actions, дважды щелкнув на ней. Затем два-

жды щелкните на подпапке Movie Control (Управление фильмом). Дважды щелкните

на элементе stopAIISounds (Остановить все звуки).

4. При этом действие stopAIISounds будет указано в правой части окна Actions и доба-

вится к выделенной кнопке (рис. 8.21).

5. Протестируйте фильм, нажав комбинацию клавиш (Windows) или

(Macintosh). После щелчка на кнопке воспроизведение всех звуков

должно прекратиться.

170 ЧАСТЬ II. АНИМАЦИЯ ЗВУК

Добавление действия stopAllsounds к кнопке позволит пользовате-

лям самостоятельно отключать звук в фильме

ГЛАВА 8. ИСПОЛЬЗОВАНИЕ ЗВУКА 171

ГЛАВА 9

КНОПКИ, МЕНЮ И ПОЛЯ ВВОДА ДАННЫХ

В ЭТОЙ ГЛАВЕ...

Интерактивность Flash 173

Кнопки 174

Меню 180

Использование компонентов 182

Возможные проблемы

Flash за работой: команда Open as Library

ИНТЕРАКТИВНОСТЬ FLASH

Flash обеспечивает исключительное сочетание графики, анимации и интерактивности. Во

Flash можно не только создавать графику и анимированное содержимое, но и с помощью

языка сценариев ActionScript обеспечить пользователям возможность самостоятельно управ-

лять подачей этого содержимого.

Подробная информация о языке ActionScript приводится в главе 11

"Знакомство с ActionScript".

Для Flash-фильмов можно создавать разнообразные сценарии, выполняемые в ответ на те

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

текстовые поля. Реализация интерактивности может быть как относительно простой (переход

на другой кадр при воспроизведении фильма после щелчка мышью), так и сложной, напри-

мер с использованием динамически загружаемых меню.

Во Flash MX создать интерактивные элементы проще, чем где-либо еще. Например, для

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

Flash MX имеются встроенные компоненты: видеоклипы с предварительно заданными пара-

метрами стандартных элементов, таких как кнопки и элементы форм. Чтобы быстро создать

формы и получить данные, вводимые пользователем, достаточно просто элемен-

ты в а затем задать параметры соответствующих сценариев.

Кнопки

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

Они обеспечивают обратную связь с пользователями путем изменения отклика на их дейст-

вия. Тем самым пользователь предупреждается о том, что можно выполнить какое-то новое

действие. При создании символа кнопки Flash автоматически открывает шкалу

кнопки, состоящую из четырех кадров. Четыре кадра соответствуют четырем состояниям

кнопки: Up (Отжата), Over (Поверх), Down (Нажата) и Hit (Активная зона). В этих кадрах мо-

жет содержаться графика, видеоклипы или звуки. Несмотря на то что для

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

важно сохранять единообразный внешний вид всех кнопок. Если в ответ на перемещение

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

тать пользователя и он не сможет понять назначение этой кнопки.

Подробная информация об использовании инструментов рисования для созда-

ния кнопок приведена в главе 3 "Рисование во Flash".

ПРОСТЫЕ кнопки

На простых кнопках для создания различных состояний (Up, Over и Down) применяется

незначительное изменение графики, например цвета. При этом пользователь получает визу-

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

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

ните следующие действия.

1. Выполните команду Symbol символ) или воспользуйтесь

комбинацией клавиш <Cmd+F8> (Macintosh) либо (Windows). В результате

откроется диалоговое окно Create New Symbol (Создать новый символ).

2. В поле Name (Имя) введите имя кнопки и установите переключатель Behavior

(Поведение) в поле опции Button (Кнопка), как показано на рис. 9.1.

New

Clip

Button

Рис. Чтобы создать новой кнопки, выполните команду

Symbol

3. Щелкните на кнопке ОК. В результате будет создана временная шкала, в первый кадр

которой будет помещен ключевой кадр, соответствующий состоянию Up. Это состоя-

ние соответствует внешнему виду кнопки в рабочем поле.

4. Воспользуйтесь инструментами рисования и создайте визуальную форму кнопки в кад-

ре Up. Символы кнопки могут состоять из нескольких слоев, в которых можно размес-

тить различные части графического изображения (рис. 9.2).

174 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

5. Состояние позволяет создавать Щелкните в кадре, расположенном

под надписью Если для создания эффекта ролловера необходимо изменить гра-

фику в нескольких слоях, кадры в нескольких слоях. Для этого

мышью, удерживая при этом клавишу В слои добавьте ключевые кадры, вы-

полнив команду кадр) либо воспользовавшись

комбинацией клавиш <Cmd+F6> (Macintosh) или <Ctrl+F6> (Windows). В рабочем по-

ле появится графическое изображение из первого кадра.

6. Выделите графическое изображение кнопки в рабочем поле и внесите изменения, не-

обходимые для создания состояния ролловера (рис. 9.3).

О

Рис. 9.2. Чтобы создать графическую форму

кнопки в состоянии Up, воспользуйтесь любым

инструментом рисования

Рис. 9.3. В кадр вставьте ключевой кадр и

внесите необходимые изменения для создания

ролловера

7. Чтобы создать состояние нажатой кнопки, выделите кадр, расположенный под надпи-

сью Down, после чего повторите шаги 5 и 6. Постарайтесь сдвинуть графическое изо-

бражение, переместив его в кадре Down на несколько пикселей вниз и вправо. Это соз-

даст иллюзию того, что кнопка нажата.

8. Состояние Hit определяет область кнопки, на которой производится щелчок мышью. До-

бавьте ключевой кадр под надписью Hit в слое, содержащем форму кнопки (рис. 9.4). Про-

верьте, чтобы форма охватывала всю область, фиксирующую щелчок на кнопке. Чтобы ох-

ватить всю область кнопки, может понадобиться нарисовать в кадре Hit отдельную форму. •

Hit

Чтобы активную область можно было использовать, необходимо задать вполне определенное

состояние Hit. Как правило, графическое изображение кнопки определяет область, которая бу-

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

кое же графическое изображение можно использовать в кадре Hit.

Однако, если кнопка состоит исключительно из текста, очень важно, чтобы в кадре Hit был на-

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

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

9. Щелкните на кнопке Back (Назад), расположенной под пиктограммами папок, или

выполните команду Document документ). В резуль-

тате вы выйдете из режима редактирования символов и вернетесь к основной времен-

ной шкале.

ГЛАВА 9. Кнопки, МЕНЮ и поля ВВОДА ДАННЫХ 175

Рис. 9.4. Для задания активной области кнопки в

кадр Hit вставьте ключевой кадр

10. Откройте панель Library (Библиотека), выполнив команду

Библиотека) либо воспользовавшись комбинацией клавиш <Cmd+L>

(Macintosh) или <Ctrl+L> (Windows).

Поместите кнопку в библиотеку и перетащите ее экземпляр в рабочее поле.

12. Для предварительного просмотра кнопки в рабочем поле выполните команду Con-

Enable Simple Buttons Включить простые кнопки). Если вы наве-

дете курсор на кнопку, то увидите состояние Over, а если щелкнете на кнопке — со-

стояние Down. Состояние Hit при просмотре является невидимым, но оно определяет

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

инициирующего запуск состояний Over и Down.

Итак, создание графических изображений кнопки завершено, но пока что кнопка не вы-

полняет никаких функций. Чтобы кнопка не только изменяла свой внешний вид в ответ на

перемещение мыши пользователем, но и выполняла какие-либо действия, к ней необходимо

добавить сценарий

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

1. Выделите экземпляр кнопки в рабочем поле. Если просмотр простых кнопок разрешен,

то для выделения кнопки необходимо воспользоваться инструментом Arrow (Стрелка).

2. Откройте панель Actions (Действия), выполнив команду

или нажав клавишу <F9>.

3. В левой части панели Actions дважды щелкните на папке Actions.

4. Дважды щелкните на папке Movie Control (Управление фильмом) и дважды щелкните

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

рий on будет отображен в правой части панели Actions.

5. Работая в обычном режиме, выберите событие, соответствующее действию on для

данной кнопки (рис. 9.5). По умолчанию для кнопок назначено событие release

(Отпустить).

6. Выделив строку кода действия on, дважды щелкните на элементе goto (перейти), рас-

положенном в папке Movie Control в левой части панели Actions.

176 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

7. Установите переключатель в поле опции Go to and Play (Перейти и воспроизвести) или

Go to and Stop (Перейти и остановить).

8. Из раскрывающегося меню Туре (Тип) выберите пункт Number (Номер кадра),

Frame Label (Надпись кадра), Expression (Выражение), Next Frame (Следующий кадр)

или Previous Frame (Предыдущий кадр) (рис. 9.6).

9. Протестируйте кнопку, выполнив команду Movie

фильм).

Подробная информация о написании сценариев приведена в главе 11

"Знакомство с ActionScript", а о событиях, назначаемых для кнопок, — в

главе 16 "Взаимодействие, события и установление последовательности".

0

®

®

Ц

Clip

®

Out

.

c. 9.5. Присоедините действие on к экземпляру кнопки

; to of

la

{

Выберите необходимое действие из раскры-

вающегося меню Туре

ГЛАВА 9. Кнопки, МЕНЮ и поля ВВОДА ДАННЫХ 177

СЛОЖНЫЕ кнопки

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

В сложных кнопках для обозначения их состояний используется не только графика, но и

видеоклипы или звуки. Вместо или дополнительно к простому графическому

изображению в любой кадр кнопки можно добавить звук. Как звук добавляют к кад-

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

1. Вставьте в символ кнопки новый слой. Присвойте ему имя sound (звук). Лучше всего

поместить звук в отдельный слой.

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

3. Выделив слой звука, перетащите экземпляр звука с панели Library в рабочее поле. Звук

будет добавлен в кадр кнопки (рис. 9.7).

4. На панели инспектора свойств задайте синхронизацию звука с событием.

Об использовании звука рассказывается в главе 8 "Использование звука".

Рис. Чтобы добавить звук к кнопке, вставьте ключевой кадр в кадр кнопки и перета-

щите звук с панели Library в рабочее поле

Кроме можно создать анимированные кнопки, поместив в кадры кнопки видеокли-

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

178 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

этой целью короткие анимационные фрагменты. В противном случае анимация будет отвле-

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

вить анимацию к состоянию кнопки, выполните следующие действия.

1. Создайте видеоклип состояния кнопки.

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

главе 7 "Анимация во Flash".

2. Создайте кнопку и добавьте ключевой кадр в тот кадр кнопки, для которого создается

анимированное состояние.

3. Перетащите экземпляр видеоклипа с панели Library в рабочее поле. Обязательно вы-

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

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

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

зателя на кнопку она сместилась на несколько сотен пикселей.

О выравнивании и использовании направляющих рассказывается в 2

"Интерфейс

На заметку Выравнивание элементов, в особенности текста, в пределах кадров кнопки явля-

ется очень важным моментом. Если элементы не выровнены, то при переходе из

одного состояния кнопки в другое будет казаться, что они по экрану.

4. Завершив работу над остальными кадрами кнопки, вернитесь к основной временной

шкале и перетащите экземпляр кнопки в рабочее поле.

5. Протестируйте фильм, выполнив команду Movie.

Внимание! Внедренные видеоклипы нельзя предварительно просмотреть в редакторе

Flash, в котором отображается только одна временная шкала. В основной вре-

менной шкале будет виден только первый кадр внедренного видеоклипа.

Можно также создать невидимые кнопки, которые состоят только из активной области.

Зачем нужны невидимые кнопки? В версии MX таких причин существует гораздо меньше,

чем в предыдущих версиях программы. Ранее невидимые кнопки использовались для созда-

ния активных областей графических изображений или видеоклипов. Как и при работе с кар-

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

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

улучшенная объектная модель версии MX позволяет интерактивно назначать кнопку непо-

средственно для видеоклипа. Кроме того, использовать невидимые кнопки для создания карт

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

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

любой текст под такой кнопкой будет проигнорирован.

Подробная информация об объекте Movie Clip (Видеоклип) будет приведена в

главе 17 "Демонстрация мощи видеоклипов", а о доступности в при-

ложении А.

ГЛАВА 9. Кнопки, МЕНЮ и поля ВВОДА ДАННЫХ 179

МЕНЮ

С помощью меню пользователи перемещаются по фильму и решают, когда и в каком порядке

отображать содержимое. Меню является основным элементом доступа к содержимому фильма.

Навигация является неотъемлемой частью работы с любым содержимым, размещенным в

Web. Общих стандартов для навигации по Web-содержимому (например, перелистывания стра-

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

книги) не существует. Однако при работе во Flash очень важно обеспечить возможность навига-

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

сов со сложным вложением временных зависимостей, может запутать пользователей.

Если пользователи не смогут найти нужное содержимое, они никогда не услышат ваших сооб-

щений и вообще вряд ли еще раз зайдут на ваш узел. Возможность вложения временных зависимо-

стей, предлагаемая во Rash, означает, что существует несколько путей перемещения по фильму, и

использующиеся в Web соглашения (например, отладочные операторы), которые детализируют

путь пользователя к Web-странице, не являются стандартными. Содержимое Rash можно разде-

лить на отдельные SWF-файлы, которые с целью сохранения пропускной способности загружают-

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

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

ожидали загрузки только информации, например, о женской или детской одежде, а не описание

всего имеющегося товара. Необходимо составить четкую структуру фильмов и создать хорошую

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

одного SWF-файла, так и переходить от одного фильма к другому.

СТРУКТУРИРОВАНИЕ ДОКУМЕНТОВ с помощью ВРЕМЕННОЙ ШКАЛЫ

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

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

содержимого, помещаются в ключевые кадры временной шкалы. Этим кадрам присваивают-

ся соответствующие имена, а доступ к ним осуществляется посредством

Части содержимого фильма можно поместить в отдельные видеоклипы. Например, на

Flash-узле компании можно создать видеоклипы Ноте (Начальная страница), Services

(Услуги), Portfolio (Портфель), About (О компании) соответствующие элементам меню.

Затем участки узла, размещенные в отдельных слоях, можно собрать в одну шка-

лу, как показано на рис. 9.8.

Рис. 9.8. Части фильма, расположенные в разных слоях, могут

быть собраны в временной шкале

Каждая часть фильма должна быть размещена в отдельном слое, иметь ключевой кадр и мет-

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

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

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

деленном кадре. Для этого ключевые кадры необходимо разнести так, чтобы каждый из них был

180 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

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

кадры с метками, соответствующими каждому из ключевых кадров частей фильма. Можно про-

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

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

добавить новое содержимое без необходимости обновления существующих сценариев.

Ключевые кадры содержимого можно разнести чтобы части фильма были помещены

в последовательные ключевые кадры, но при этом вы не сможете прочитать на временной

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

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

метки на временной шкале.

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

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

головки к разным меткам кадров частей фильма.

СВОЙСТВА TRACK AS BUTTON и TRACK AS MENU ITEM

При создании Flash-меню определяющими являются два фактора: размещение и тип дан-

ных меню. Сколько места необходимо для макетирования элементов меню? Будут ли

меняться элементы меню? Если да, то как часто? Будут ли данные меню динамически

загружаться из внешних источников?

Классическое Web-меню, т.е. просто ряд кнопок меню, можно использовать на небольших

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

Рис. 9.9. Простое статическое меню представляет собой ряд кнопок

При создании экземпляра кнопки в качестве свойств можно выбрать пункт Track as But-

ton (Отслеживать как кнопку) или Track as Menu Item (Отслеживать как элемент меню), как

показано на рис. 9.10. Свойство Track as Button, заданное по умолчанию, определяет собы-

тия, назначаемые для кнопки, независимо от других кнопок. Если пользователь щелкнет

мышью на кнопке и перетащит курсор на другую кнопку, то инициирован будет только за-

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

ствия мыши, примененные к другим кнопкам. Что касается свойства Track as Menu Item, то

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

гих кнопках. Если пользователь щелкнет мышью на одной кнопке, а затем перетащит курсор

и отпустит его, находясь на другой кнопке, то это приведет к запуску ролловера и состояния

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

ство Track as Menu Item.

f

о

Рис. Экземпляры кнопок можно отслеживать как кнопки или как элементы меню

ГЛАВА 9. Кнопки, МЕНЮ и поля ВВОДА ДАННЫХ 181

Меню могут быть очень сложными, инициирующими выполнение сложных сценариев и

даже позволяющими выполнять загрузку внешних и XML-данных. Динамические меню

можно создавать по запросу.

Подробная информация об интеграции во Flash-фильмы XML-данных представ-

лена в главе 28 "XML-данные".

ИСПОЛЬЗОВАНИЕ КОМПОНЕНТОВ

Компоненты — потрясающая новая функция Flash MX, берущая свое начало из элемента

Smart Clip (Интеллектуальный клип) версии Flash 5. Компоненты представляют собой раз-

личные встроенные элементы интерфейса. В программе Flash MX содержится семь компо-

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

компонентов можно загрузить с Web-узла компании Macromedia, а наибольший потенциал

заложен в возможности самостоятельного создания пользовательских компонентов.

О создании пользовательских компонентов вы узнаете в главе 22 "Компоненты". |

Компоненты размещаются на панели Components (Компоненты) (рис. 9.11). Чтобы от-

крыть панель, выполните команду либо вос-

пользуйтесь комбинацией клавиш <Cmd+F7> (Macintosh) или <Ctrl+F7> (Windows).

Во Flash MX содержится семь компонентов.

• (Нажимная кнопка). Простая кноп-

ка с предварительно заданными состояниями.

• CheckBox (Флаговое поле). Традиционный эле-

мент формы, позволяющий выбрать несколько

пунктов из ряда предложенных.

• (Переключатель). Другой традицион-

ный элемент формы, позволяющий выбрать один

или несколько пунктов ряда предложенных.

• ComboBox (Комбинированный управляющий

элемент). Прокручивающийся раскрывающийся

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

• ListBox (Окно списка). Прокручивающийся рас-

крывающийся список, позволяющий выбрать

один или несколько элементов.

• ScrollBar (Полоса прокрутки). Вертикальный или горизонтальный элемент полосы про-

крутки, который можно добавить к динамическим полям и данных, что по-

зволяет получить доступ к большим массивам текста в небольших текстовых полях.

• ScrollPane (Панель прокрутки). Прокручивающаяся область окна, добавляющая вер-

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

понент ScrollPane используется только с видеоклипами.

ДОБАВЛЕНИЕ КОМПОНЕНТОВ

Компоненты добавляют путем их перетаскивания в рабочее поле. Можно также дважды

щелкнуть на компоненте на панели в результате чего экземпляр компонента

будет помещен в рабочее поле, при необходимости его местоположение можно изменить.

Чтобы добавить компонент ComboBox, выполните следующие действия.

Рис. Во Flash MX имеются

встроенные элементы интерфейса,

размещенные на панели Components

182 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

1. Щелкните на компоненте ComboBox на панели Components и перетащите его

экземпляр в рабочее На рис. 9.12 показано, что на панели инспектора свойств

будут указаны параметры данного компонента.

2. Присвойте экземпляру компонента ComboBox имя month (месяц).

3. По умолчанию параметр Editable (Доступный для редактирования) установлен в зна-

чение (ложь). Это означает, что элементы списка ComboBox являются статич-

ными. Если данный параметр имеет значение true (истина), пользователи смогут вы-

делить элементы списка и ввести термины, поиск которых будет осуществляться в пре-

делах списка. Для параметра Editable оставьте значение

4. Дважды щелкните в столбце, который следует за Labels (Метки), в результате чего от-

кроется диалоговое окно Values (Значения). Щелкните на кнопке со знаком "плюс"

12 раз, в результате чего будет создано 12 значений для 12 месяцев (рис. 9.13). Щелкни-

те в каждой строке (Значение по умолчанию) и введите имя элемента

списка, т.е. названия месяцев с января (January) по декабрь (December).

Рис. Атрибуты компонента указываются на панели инспектора свойств

2

3

4

6

Т

ч

9

И

. . :.'. . .• •

fefwttV

lu*

lu*

lu»

lu» ,

fefeultV

OK

В диалоговом окне Values введите эле-

менты списка компонента ComboBox

5. Сохраните фильм и протестируйте его, выполнив команду Movie. На

рис. 9.14 показано, что значения, добавленные для компонента ComboBox, будут ото-

бражены в виде раскрывающегося списка.

ГЛАВА 9. Кнопки, и поля ВВОДА ДАННЫХ 183

РЕДАКТИРОВАНИЕ КОМПОНЕНТОВ

При добавлении компонента к фильму на панель Library добавляется папка Flash Com-

ponents (Компоненты пользовательского интерфейса Flash), как показано на рис. 9.15. В этой

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

В папке Flash Ul Components содержится выбранный компонент, папка Component Skins

(Оболочки компонент) с графическими символами, составляющими выбранный компонент,

папка Global Skins (Общие оболочки) с графическими элементами, общими для всех компо-

нентов, и папка Core Assets (Основные средства), содержащая сложные элементы сценариев.

Внешний вид компонентов можно отредактировать, воспользовавшись папкой Component

Skins. Откройте ее, а затем дважды щелкните на папке Skins компонента, который хотите отре-

дактировать. Чтобы отредактировать видеоклип, дважды щелкните на его оболочке. Кроме того,

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

тесь к основной временной шкале и перетащите экземпляр отредактированного компонента в

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

Рис. Из компонента в экспортированном фильме

создан раскрывающийся список

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Можно ли редактировать стили текста компонента?

Да, доступ к цвету и стилю текстов компонента осуществляется посредством

Подробно об использовании метода setPropertyStyle применительно к компонентам

речь пойдет в главе 22 "Компоненты".

Если изменить размеры экземпляра компонента, он выглядит вытянутым. Как можно мас-

штабировать

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

При просмотре экземпляра в рабочем поле это может быть не заметно. Фактически компо-

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

параметры, в том числе и размеры. Протестировав фильм, вы увидите, что компонент мас-

штабирован так, как вы указали.

184 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

flU Skins

-

Clip

Clip

Clip

добавлении компонента к фильму на панель Library

добавляется папка Flash

FLASH ЗА РАБОТОЙ: КОМАНДА OPEN AS LIBRARY

Самый простой способ обеспечить коллективный доступ к элементам всем членам кол-

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

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

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

коллектива, которые могут открыть его как библиотеку, выполнив команду as Li-

brary как библиотеку). После чего содержимое файла . la откроется в виде

библиотеки. Из открытой библиотеки разработчики могут перетащить элементы в свои рабо-

чие файлы. Этот метод позволяет предоставить в распоряжение членов коллектива одни и те

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

эффективность, снижая количество времени, затрачиваемого на разработку.

ГЛАВА 9. Кнопки, МЕНЮ и поля ВВОДА ДАННЫХ 185

ГЛАВА

ИНТЕГРАЦИЯ ВИДЕО

В ЭТОЙ ГЛАВЕ...

Видео во Flash 187

Импортирование видео 188

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

Управление воспроизведением видео

Возможные проблемы

Flash за работой: интерактивность видео

ВИДЕО во FLASH

В версии Flash MX впервые обеспечивается полноценная поддержка видео — возможность

внедрять и воспроизводить видео посредством Flash Player без необходимости установки каких-

либо внешних надстроек. Теперь видео можно импортировать во Flash и преобразовывать прак-

тически так же, как и любой другой объект. Во Flash-фильмы можно включать такое содержи-

мое, как корпоративные объявления, обучающее видео, новости и спортивные репортажи.

Как и в случае с другими импортируемыми объектами, качество видео в опубликованном

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

зовать видео во Flash, и еще до импортирования отредактируйте его в предназначенной для

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

Flash. Размер файла импортированного видео в опубликованном фильме останется тем же са-

мым, независимо от того, выполнялись ли какие-то операции по удалению кадров или содер-

жимого. (Это похоже на масштабирование во Flash растровых изображений.) Как всегда, целью

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

ИМПОРТИРОВАНИЕ ВИДЕО

Если на компьютере установлен модуль QuickTime 4 (QT) либо DirectX 7 или последующей

версии (Windows), то Flash поддерживает импортируемые видеоформаты, перечисленные в

табл. Формат Macromedia Flash Video f lv), созданный с помощью приложения Sorenson

Spark, может быть импортирован во Flash без необходимости установки QT либо DirectX.

ТАБЛИЦА 10.1. ФОРМАТЫ ИМПОРТИРУЕМЫХ ВИДЕОФАЙЛОВ

Тип ФАЙЛА ТРЕБУЕМЫЕ ДРАЙВЕРЫ ПЛАТФОРМА

Audio Video Interleaved avi)

Digital Video

Motion Picture Experts Group mpg, . mpeg)

QuickTime Movie mov)

Windows Media File .

QuickTime 4,

или выше

QuickTime 4

QuickTime 4,

или выше

QuickTime 4

DirectX 7 или выше

Macintosh,

Windows

Macintosh,

Windows

Macintosh,

Windows

Macintosh,

Windows

Windows

Импортирование и экспортирование видео во Flash осуществляется с помощью кодека Sorenson

Spark. Кодек расшифровывается кодер-декодер, т.е. компрессор-декомпрессор данных, в данном

случае видео. Сжатие видео реализуется посредством уменьшения числа битов, необходимого для

представления видеоданных и последующей распаковки, т.е. развертывании исходных данных при

воспроизведении. Видеофайлы печально известны необходимостью обработки большого количе-

ства данных, поэтому процедура сжатия для них является жизненно важной.

Видеоданные можно сжимать двумя способами: в пространственном и во временном от-

ношении. При пространственном, или сжатии данные в каждом кадре сжи-

маются независимо от остальных кадров. При временном, или межкадровом, сжатии произ-

водится сравнение данных в последовательных кадрах и при этом сохраняются только разли-

чия между кадрами. В кодеке Sorenson Spark используются преимущества обоих типов

сжатия. По возможности Sorenson Spark использует временное сжатие с целью создания фай-

лов минимально возможных размеров. Однако, если видеокадр существенно изменяется, то с

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

отмечают точку изменения и являются аналогичными ключевым кадрам Ключевой ви-

деокадр становится контрольной точкой последовательного межкадрового, или временного,

сжатия. Ключевые видеокадры создаются при импортировании во Flash.

Sorenson Spark

Sorenson это мощная программа сжатия. Размеры видеофайлов огромны, и без при-

менения интенсивного сжатия они будут слишком большими для передачи через Internet. Кодеки

сжимают данные для ускорения загрузки и затем распаковывают их при воспроизведении фай-

ла. Кодек Spark интегрирован во Flash Player 6, поэтому для отображения видеосодержимого не

нужно устанавливать никаких внешних плейеров или надстроек.

Во Flash MX интегрирована стандартная версия Sorenson Spark, использующаяся для импорти-

рования и сжатия видеофайлов. Имеется также профессиональная версия кодека с более на-

дежными параметрами сжатия, в том числе сжатие с переменной битовой часто-

той. Приобрести кодек Sorenson Spark можно на узле

188 АНИМАЦИЯ И ЗВУК

ВНЕДРЕННОЕ и СВЯЗАННОЕ ВИДЕО

При работе во Flash MX видео можно либо непосредственно внедрить во Flash-фильм, ли-

бо связать его с Flash-фильмом. Внедренное видео становится частью документа Flash. При

установлении связи с видео формата QuickTime Flash-фильм придется публиковать как

фильм QuickTime. Затем видеосодержимое отображается с помощью надстройки QuickTime,

вне модуля Flash Player. При внедрении видео интегрируется непосредственно во Flash-

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

Подробная информация о параметрах публикации приведена в главе 30

"Оптимизация, публикация и экспортирование фильмов".

ПАРАМЕТРЫ СЖАТИЯ КОДЕКА SORENSON SPARK

Чтобы импортировать и внедрить во Flash, выполните следующие действия.

1. Выполните команду либо воспользуйтесь комбинацией

клавиш <Cmd+R> (Macintosh) или <Ctrl+R> (Windows). В результате откроется диа-

логовое окно Import (Импорт).

2. Укажите местонахождение файла, подлежащего импортированию.

3. Выберите нужный файл и щелкните на кнопке Open (Открыть). Если импортируемый

файл имеет формат QuickTime откроется диалоговое окно Import Video (Импорт

видео), изображенное на рис. Установите переключатель в поле опции Embed Video

in Macromedia Flash Document (Внедрить видео в документ Macromedia Flash).

4. Откроется диалоговое окно Import Video Settings (Настройки импортирования видео)

10.2).

В верхней части диалогового окна Import Video Settings указаны свойства исходного

видео, в том числе его размеры, объем файла, длительность и частота смены кадров.

Ниже следуют параметры, которые в этом диалоговом окне можно откорректировать.

• Ползунок Quality (Качество) определяет качество, с которым будет экспортировать-

ся видео. Он аналогичен параметрам экспортирования JPEG. Значение качества

можно установить в пределах от 0 до 100, но минимальным приемлемым значением

является 60. По умолчанию ползунок установлен в значение 50, но его обязательно

нужно сместить хотя бы до 60.

• Ползунок Keyframe interval (Интервал между ключевыми кадрами) определяет, на-

сколько часто кодек Sorenson Spark создает ключевые кадры. Помните, что полные

данные кадра хранятся только там, где встречаются ключевые кадры. Чем больше

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

чение 0, вставка ключевых кадров не производится. Чем в более низкое значение

установлен ползунок, тем чаще будут вставлены ключевые кадры (за исключением

import Video

Import

video in Macromedia document

0 Link to external video file

will be when movie exported

as a QuickTime movie file.)

с

Рис. 10.1. При импортировании фильма QuickTime вам пред-

ложат либо внедрить видео, либо установить с ним связь

ГЛАВА 10. ИНТЕГРАЦИЯ ВИДЕО

Video

Macintosh .

'

Movie 240x180 pixels, 7514.5

62.83 12.0

interval:

Scale:

21 Spark.

X

. -

Synchronize video to Macromedia Flash frame rate

: Number of frames to encode per number of

Macromedia Flash

240 x pixels

Length: 62.83

frames/sec 12.00

10.2. С помощью кодека Sorenson Spark при импортировании можно указать

параметры сжатия видео

значения 0). Поэкспериментируйте и найдите компромиссный вариант между ка-

чеством изображения и размером файла.

• Ползунок Scale (Масштаб) позволяет уменьшить пиксельный размер изображения импор-

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

Output properties (Выходные свойства), отображаемые в правом нижнем диалогового

окна Import Video Settings. По умолчанию ползунок установлен в значение 100%.

• Опция Synchronize Video to Macromedia Flash Document (Синхронизировать видео с до-

кументом Macromedia Rash), в поле которой автоматически установлен флажок, корректи-

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

смены кадров Flash-фильма. Если флажок с поля данной опции снят, то каждый кадр им-

портированного видео занимает один кадр во временной шкале Flash-фильма.

• Задайте нужное значение в поле опции Number of Video Frames to Encode Per

Number of Macromedia Flash Frames (Число видеокадров, подлежащих кодирова-

нию, к числу кадров Macromedia Flash). Этот параметр задает отношение числа кад-

ров видео к числу кадров временной шкалы По умолчанию выбрано значе-

ние 1:1, при котором сохраняется исходная частота смены кадров импортирован-

ного видео. Постарайтесь не опускаться ниже частоты смены кадров, равной

кадрам в секунду, иначе видео будет казаться прерывистым.

• Поле опции Import Audio (Импортирование аудио) позволяет включать или исклю-

чать звуковые дорожки в импортируемом видео. По умолчанию флажок в этом поле

установлен.

5. Щелкните на кнопке ОК. Откроется диалоговое окно Import со строкой состояния.

При работе с видео задействуется большое количество памяти, особенно на

платформе Macintosh. В операционных системах версий, предшествующих

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

ном случае вы не сможете импортировать видео.

190 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

6. Если число кадров временной шкалы не достаточно для отображения импортирован-

ного видео, на экране появится подсказка с предложением расширить шка-

лу (рис. 10.3). Чтобы расширить шкалу, щелкните на кнопке Yes (Да), а для

сохранения текущего количества кадров щелкните на кнопке No. Кадры импортиро-

ванного видео с номером, превышающим число кадров временной шкалы, при воспро-

изведении видео отображены не будут.

На заметку Число кадров, требующееся для отображения видео, длительности видео

в секундах, умноженной на частоту смены кадров Flash-фильма.

Видео импортируется в библиотеку, а его экземпляр помещается в рабочее поле. Чтобы им-

портировать видео непосредственно в библиотеку, выполните команду to Library

в библиотеку) и повторите шаги 2-5 приведенной выше

При импортировании непосредственно в библиотеку подсказка о том, что во временной шкале

содержится меньше кадров, чем в импортированном видео, на экран выводиться не будет.

Чтобы проверить размер импортированного видео, сохраните фильм и протестируйте его,

выполнив команду Movie. Для предварительного просмотра фильма выполните

команду Bandwidth Profiler профайлер полосы пропускания).

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

полните команду Streaming поток).

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

главе 30 "Оптимизация, публикация и экспортирование фильмов".

РАБОТА с ИМПОРТИРОВАННЫМ ВИДЕО

Экземпляры внедренного видео можно преобразовать так же, как и другие объекты. Его

можно вращать, наклонять, применять цветовые эффекты, маскировать и даже создать проме-

жуточные отображения. Для применения преобразований выделите экземпляр видео и восполь-

зуйтесь инструментом Free Transform (Свободное преобразование). Для маскирования видео

переместите слой, содержащий его, под слой маски. Для анимации или применения цветовых

эффектов к экземпляру видео внедрите видео в символ видеоклипа и примените цветовые эф-

фекты или создайте промежуточное отображение символа. Комбинируйте анимацию и видео

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

Подробная информация о преобразовании объектов приведена в главе 2

"Интерфейс Flash", о создании в "Рисование во Flash", а о

создании промежуточных отображений и цветовых эффектах— в

"Анимация во Flash".

This video requires 754 frames to

entire The selected Is

enough. Oo you want the

of frames automatically inserted into

timeline Span? ,

this

Рис. 10.3. Если число кадров временной шкалы не доста-

точно для отображения импортированного видео, на эк-

ране появится предложение расширить временную шкалу

ГЛАВА 10. ИНТЕГРАЦИЯ ВИДЕО 191

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

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

1. На панели Library (Библиотека) выделите внедренный видеоклип.

2. Щелкните в правом верхнем углу панели, в результате чего откроется меню Library Op-

tions (Параметры библиотеки). Выберите из него пункт Properties (Свойства). Откро-

ется диалоговое окно Embedded Video Properties (Свойства внедренного видео), изо-

браженное на рис. 10.4.

3. Щелкните на кнопке Import и в открывшемся диалоговом окне найдите видеофайл, на

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

выше, в разделе "Параметры сжатия кодека Sorenson Spark".

Чтобы обновить клип, который после импортирования во Rash был отредактирован, выделите

клип на панели Library и откройте диалоговое окно Embedded Video Properties в соответствии с

приведенной выше инструкцией. Вместо кнопки Import щелкните на кнопке Update (Обновить).

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

объектам. На рис. 10.5 показано, что на панели инспектора свойств экземпляру клипа можно

присвоить имя и изменить его координаты и размеры.

УПРАВЛЕНИЕ ВОСПРОИЗВЕДЕНИЕМ ВИДЕО

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

держимым, помещенным в рабочее поле. Кадры видео преобразовываются в кадры Flash, и для

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

головку по временной шкале. Если содержимое видеофайла слишком велико (например, видео

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

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

При этом осуществляется управление воспроизведением временной шкалы, в ко-

торую было помещено данное видео. Чтобы перемотать видео в начало, нужно просто вернуться

к кадру 1 на панели Timeline (Временная шкала). Чтобы выполнить быструю перемотку вперед

или назад, задайте положительное или отрицательное приращение количества кадров.

Для создания простых кнопок управления видеоклипом выполните следующие действия.

Embedded Video Properties

Sunday, April 2002 1:18

x 180

• • r • •

. €

Сс

С

€

Export...

Puc. 10.4. В диалоговом окне Embedded Video Properties можно заменить

или обновить видеоклип

Embedded of:

Puc. 10.5. На панели инспектора свойств указаны свойства видеоклипа и содер-

жится кнопка для замены экземпляра символа

192 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

Откройте документ Flash и присвойте существующему слою имя Video.

2. Импортируйте видеоклип, выполнив команду На прилагаемом к данной

книге компакт-диске имеется файл avi с образцом видео. Выделите видеоклип

и импортируйте его в рабочее поле. Обязательно проверьте, чтобы экземпляр фильма

был помещен в основную временную шкалу.

3. В документ добавьте новый слой и присвойте ему имя (Элементы управления).

4. Выполните команду библиоте-

Кнопки), как показано на рис. 10.6. Откроется библиотека, содержащая образцы

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

рый лучше всего подходит для вашего фильма.

Рис. 10,6, Просмотрите образцы кнопок, выполнив

команду

5. Выделив на основной временной шкале слой Controls, перетащите кнопки Play

(Воспроизведение), Stop (Остановка), Fast Forward (Быстрая перемотка вперед) и Re-

wind (Перемотка назад) из библиотеки Buttons в рабочее поле (рис. 10.7).

6. Выделите кнопку Play (с одной стрелкой, указывающей вправо) и выполните команду

либо нажмите клавишу <F9>, чтобы открыть диа-

логовое окно ActionScript Editor (Редактор

т a g

•

60 65 70

'

x pixels j

{ 6 j

Rate:

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

ГЛАВА 10. ИНТЕГРАЦИЯ ВИДЕО 193

7. Откройте меню параметров панели Actions (щелкнув на кнопке в правом верхнем углу)

и проверьте, чтобы была выбрана опция Expert (Экспертный режим).

8. В окне сценария введите код (рис. 10.8):

on (release) {

О;

9. Выделите в рабочем поле кнопку Stop (с изображением квадрата) и снова запустите ре-

дактор щелкнув на панели Actions или нажав клавишу <F9>.

10. Введите следующий код (рис. 10.9):

on (release) {

}

11. Сохраните и протестируйте свой фильм, нажав комбинации клавиш <Cmd+Retum>

(Macintosh) или <Ctrl+Enter> (Windows).

12. Flash-фильмы запускаются автоматически, т.е. воспроизведение видео должно начаться сра-

зу же после его загрузки, без щелчка на кнопке Play. (Чтобы запретить автоматическое вос-

произведения фильма, присоедините к кадру 1 действие stop Протестируйте кнопки.

Щелкните на кнопке Stop, чтобы остановить воспроизведение видео. После щелчка на

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

Чтобы завершить работу над элементами управления воспроизведением, выполните следующее.

for (No name -

0

I

i OH

Objects

Ul

4 Col

Рис. 10.8. Простое действие воспроизведения, добавляемое к кнопке, позволит

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

G ' : ' ' • •

Actions for [No name -' '

• Actions

Operators

Functions

Constants

Deprecated

Ul Components

G3 Index

J

+

i

Рис. 10.9. Добавьте действие остановки воспроизведения к кнопке Stop

194 ЧАСТЬ II. АНИМАЦИЯ и ЗВУК

13. Вернитесь к сохраненному фильму в режиме редактирования. Щелкните на кнопке

(Перемотать в начало) (с двумя треугольниками, указывающими

влево на вертикальную линию) и в окне редактора введите следующий код:

on (release) {

}

14. Вернитесь в рабочее поле и выделите кнопку Rewind (Перемотка назад) (с двумя стрел-

ками, указывающими влево) и в окне редактора ActionScript введите код

on {

}

15. Вернитесь в рабочее поле и выделите кнопку Fast Forward (Быстрая перемотка вперед)

(с двумя стрелками, указывающими вправо) и в окне редактора ActionScript введите

следующий код:

on (release) {

}

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

произведение фильма.

Подробная информация о кнопках приведена в главе 9 "Кнопки, меню и поля ввода

данных", а о написании сценариев — в главе 11 "Знакомство с ActionScript".

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Может ли видео иметь свои собственные звуковые

К сожалению, нет. Видео не поддерживает событийные звуки, и в каждом SWF-файле

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

При попытке экспортирования в QuickTime на экран выводится следующее сообщение об

ошибке: The installed version of QuickTime does not have a handler for

this type of Macromedia Flash movie (Установленная версия не имеет об-

работчика для данного типа

Это сообщение означает, что установленная версия QuickTime не поддерживает Flash Player 6.

До выхода QuickTime 6 содержимое Flash Player 6 не поддерживалось. Для устранения данной про-

блемы перейдите к настройкам публикации. Для этого выполните команду Settings

Параметры публикации). В открывшемся диалоговом окне перейдите на вкладку Flash и

из раскрывающегося меню Version (Версия) выберите Flash Player 5.

FLASH ЗА РАБОТОЙ: ИНТЕРАКТИВНОСТЬ ВИДЕО

Возможность внедрять видео во MX что пользователи могут управлять переда-

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

Например, выполняя редактирование и сжатие с целью оптимизации размера файла,

можно создать комментарии к нескольким видеоклипам, работающие под управлением пользова-

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

Flash-текст. Комбинируя возможности видео и Flash, можно добиться замечательных эффектов.

ГЛАВА 10. ИНТЕГРАЦИЯ ВИДЕО 195

РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с

ПОМОЩЬЮ ACTIONSCRIPT

В ЭТОЙ

Глава Знакомство с ActionScript

Глава Управление переменными, данными и типами данных

Глава 13. Использование операторов

Глава 14. Работа с данными: использование предложений

Глава Объединение предложений в функции

Глава 16. Взаимодействие, события и установление последовательности

Глава моши видеоклипов

Глава 18. Процедура рисования с помощью ActionScript

ГЛАВА

ЗНАКОМСТВО с ACTIONSCRIPT

В ЭТОЙ ГЛАВЕ...

Добавление интерактивности с помощью ActionScript

Использование панели Actions 200

Знакомство с объектно-ориентированными языками 204

Три кита: удобочитаемость, повторное использование и достижимость 206

Возможные проблемы 213

Flash за работой: удобочитаемый, многократно используемый, достижимый код 214

ДОБАВЛЕНИЕ ИНТЕРАКТИВНОСТИ с помощью

ACTIONSCRIPT

это язык программирования, посредством которого во Flash осуществляется от-

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

На Язык ActionScript создан на основе стандарта ЕСМА-262, который, в свою очередь,

составлен на базе языка JavaScript. По ActionScript является разновидностью

JavaScript, адаптированного и оптимизированного для работы в среде Flash.

Очень часто с помощью ActionScript можно легко достичь целей, которые в противном

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

ActionScript можно реализовать только малую часть возможностей Flash. Например,

ActionScript необходим для реализации любого рода интерактивности, например отклика по-

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

ActionScript является единственным способом реализации перехода к определенному кадру

временной шкалы либо начала или остановки воспроизведения видеоклипа. Однако эти про-

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

ActionScript открывает перед использующими среду Flash. Язык ActionScript

для Flash является "родным", и без хотя бы минимального овладения им вы будете подобны

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

ции. В этом случае придется довольствоваться меньшим по сравнению с тем, что в действи-

тельности вы хотели бы получить.

Как правило, при использовании ActionScript удается получить SWF-файлы меньших

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

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

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

Возможности языка ActionScript безграничны, а использовать его очень легко. Знакомст-

во с ActionScript лучше всего начать с панели Actions (Действия).

ДОСТУП К ПАНЕЛИ ACTIONS

Чтобы открыть или развернуть панель Actions, выполните одно из следующих действий:

• из меню Window (Окно) выберите пункт Actions (Действия);

• нажмите клавишу <F9>.

После этого на экране появится или будет развернута панель Actions (рис. Если эта

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

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

(Если вы хотите восстановить компоновку, заданную по умолчанию, выполните команду

Layout Наборы по

Панель Actions является встроенным во Flash редактором ActionScript. При соответст-

вующем использовании суффиксов экземпляров объектов (например, суффикс _тс для ви-

деоклипов) в ней будет открываться вспомогательное окно с советами по применению кода.

Воспользовавшись кнопкой Pin current script (Прикрепить текущий сценарий), вы сможете

"закрепить" текущий сценарий, т.е. сохранить его на панели Actions.

ИСПОЛЬЗОВАНИЕ ПАНЕЛИ ACTIONS

Весь код на языке ActionScript вводится на панели Actions. Щелкните в кадре, на кнопке

или видеоклипе, к которому требуется присоединить код ActionScript, а затем перейдите к

панели Actions и в ее правой части введите код соответствующего действия.

ВЫБОР ДЕЙСТВИЙ для КАДРА или ОБЪЕКТА

Заданный блок действий можно присоединить либо к объекту (кнопке или видеоклипу),

либо к кадру. Тип вводимого действия указывается в строке заголовка серого цвета, располо-

Кнопка прикрепления текущего сценария

Окно советов по применению кода Панель Actions

Рис. Панель Actions является встроенным во Flash ре-

дактором ActionScript

200 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

женной в верхней части панели Actions. Это может быть Actions — Frame (Действия, присое-

диняемые к кадру), Actions — Movie Clip (Действия, присоединяемые к видеоклипу) или Ac-

tions — Button (Действия, присоединяемые к кнопке). Соответствующий режим выбирается

щелчком на объекте или кадре.

Действия, присоединенные к кадру, выполняются при достижении воспроизводящей го-

ловкой этого кадра. Действия, присоединенные к объекту, выполняются при наступлении

события, назначенного для данного объекта.

• Действие, присоединенное к кадру. Предположим, что к кадру присоединено действие

trace, а именно

trace

• Всякий раз при достижении воспроизводящей головкой этого кадра в выходном окне

будет отображаться слово hello.

• Действие, присоединенное к объекту. Видеоклипы обладают событием "вступительного

кадра", которое наступает всякий раз по достижении кадра. Если фильм воспроизво-

дится при частоте кадров в секунду, это событие наступает 12 раз в секунду. Чтобы

сообщить Flash, какое событие должно запускать тот или иной код, этот код помещают

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

кадр" выглядит следующим образом:

{

' // сюда вводится

}

Так работает методика в целом. Ниже приведены два существенных исключения.

• Функция — это именованный блок кода, внедряющий определенную процедуру. Напри-

мер, () — это встроенная функция видеоклипа, вызывающая переход

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

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

свои собственные пользовательские функции. Когда воспроизводящая головка дос-

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

вательской функции, функция становится доступной, но фактически не выполняется.

Чтобы инициировать это действие, к функции обратиться.

Подробная информация о функциях приводится в главе 15 "Объединение

предложений в функции".

Во Flash MX имеется новый формат обработчиков событий, позволяющий вводить

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

дит следующим образом:

= function () {

// сюда вводится

Когда воспроизводящая головка достигает кадра с кодом обработчика, Flash начинает

"слушать" событие. Однако "срабатывает" обработчик (выполняет содержащийся в нем код)

только при наступлении события.

В приведенном выше примере myClip— это имя экземпляра видеоклипа.

Имена экземпляров видеоклипов были рассмотрены в главе 6 "Символы,

экземпляры и элементы библиотек".

ГЛАВА 11. ЗНАКОМСТВО с ACTIONSCRIPT 201

О действиях, присоединенных к кадрам и объектам, рассказывается в главе 16

"Взаимодействие, события и установление

ОБЫЧНЫЙ И ЭКСПЕРТНЫЙ РЕЖИМЫ

Создавать и редактировать код можно в двух режимах: обычном и экспертном.

За исключением многострочных комментариев (с которыми можно работать только в

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

режим больше подходит для коротких простых блоков кода. Экспертный режим хорош для

кода, имеющего более сложную структуру.

Flash помогает писать код

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

места. Поэтому, чтобы пояснения оставались лаконичными, в данной книге описывается экс-

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

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

Во Flash имеется новая функция, Hints (Советы по использованию кода), кото-

рая существенно облегчает работу в экспертном режиме. Функция Code Hints рабо-

тает в двух формах: всплывающие и кода в режиме меню.

В режиме всплывающих подсказок после ввода части кода будут указаны форматы.

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

возможных вариантов кода (рис. 11.1).

Во Flash имеется новая функция, Code Hints (Советы по использованию кода), которая сущест-

венно облегчает работу в экспертном режиме. Функция Code Hints работает в двух формах:

подсказки и завершение кода в режиме меню. В режиме всплывающих подска-

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

шить клавиатуры путем отображения меню возможных вариантов кода (рис. 11.1).

Для доступа к меню советов по использованию кода для экземпляров различных классов

объектов (таких как видеоклипы, кнопки или текстовые поля) к каждому имени экземпляра

необходимо добавить суффикс нужного класса. Например, на рис. 11.1 показано, что к имени

stars добавляется суффикс _тс, в результате чего образовывается имя

stars_mc. (Все возможные суффиксы перечислены в табл. 11.1.)

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

чить, выполните команду Затем в диалоговом окне Prefer-

ences (Настройка) перейдите к вкладке Editor (Редактор и снимите флажок с

поля опции Hints (Советы по использованию кода). Если функция советов по использованию ко-

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

диалоговом окне Preferences перейдите к вкладке General (Общее) и либо установите, либо снимите

флажок с поля опции Show Tooltips (Отображать всплывающие подсказки).

ТАБЛИЦА 11.1. СУФФИКСЫ CODE HINTS ПАНЕЛИ ACTIONS

КЛАСС ОБЪЕКТА СУФФИКС

Массив

Кнопка _btn

Камера

Цвет

202 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 11.1

КЛАСС

Дата

Микрофон

Видеоклип

Сетевое соединение

Сетевой поток

Объект коллективного использования

Звук

Строка

Текстовое поле

Текстовый формат

Видео

СУФФИКС

_mc

_str

_txt

_fmt

_xml

(*) Несмотря на то что данные суффиксы указаны в документации Macromedia, e время их

не приводит к открытию подсказок Code

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

щелчка на элементе в левой части панели Actions в правой верхней части панели появляется его

описание. После двойного щелчка на элементе в правой нижней части панели появится та часть

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

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

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

всегда остается неизменной. Например, при использовании действия gotoAndPlay вос-

производящая головка переходит к определенному кадру видеоклипа, и с него начинается

воспроизведение. После двойного щелчка на элементе gotoAndPlay () на панели Actions

появится следующая строка:

<not set yet>.

Фрагмент <not set является заполнителем имени которое необхо-

димо указать в текстовом поле вверху панели Actions. В другом текстовом поле необходимо

указать номер кадра. В целом код в окне действий будет выглядеть следующим образом:

Непосредственно в окно действий не вводится никакой код. Оно используется только для

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

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

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

В экспертном режиме можно выделить элемент действия (дважды щелкнув на нем в левой час-

ти панели), но вверху окна действий не будет текстовых полей. Код можно непосредственно вво-

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

возможностей нет). Как правило, при работе в экспертном режиме, в отличие от обычного, тот же

самый код можно получить путем меньшего количества нажатий клавиши или щелчков мышью.

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

ГЛАВА 11. ЗНАКОМСТВО ACTIONSCRIPT 203

• Щелкните в меню параметров, расположенном в правом верхнем углу панели Actions, и

выберите пункт Normal Mode (Обычный режим) или Expert Mode (Экспертный режим).

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

(Macintosh) или (Windows), а для выбора обычного

режима — (Macintosh) или (Windows).

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

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

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

СОКРЫТИЕ И ОТОБРАЖЕНИЕ СПИСКА ДЕЙСТВИЙ

Чтобы скрыть список действий (левую часть панели Actions) и увеличить место, занимаемое

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

Чтобы снова отобразить список действий, щелкните на треугольнике слева от окна действий.

ЗНАКОМСТВО с ОБЪЕКТНО-ОРИЕНТИРОВАННЫМИ

ЯЗЫКАМИ

является объектно-ориентированным языком программирования. За послед-

ние лет объектно-ориентированное программирование (ООП) превратилось в ведущий

принцип, используемый при написании кода. В данной главе мы укажем причины этого со-

бытия и рассмотрим простые примеры. Подробно данный вопрос будет освещаться далее в

этой книге, начиная с главы 15 "Объединение предложений в функции".

В 15 "Объединение предложений в функции" описывается основная кон-

цепция классов в объектно-ориентированном программировании. В большин-

стве следующих глав речь пойдет о том, как при создании пользовательских

объектов используются встроенные объекты и/или классы.

Объектно-ориентированный означает основанный на объектах. Объект — это структура дан-

ных, позволяющая выполнять в программах те же операции, которые вы выполняете в повсе-

дневной жизни: группировать сложные явления под простыми заголовками.

Предположим, я хочу пригласить своего друга Джо прийти на вечеринку и принести с собой

гитару. И Джо, и его гитара обладают множеством функций и характеристик, но я просто позво-

ню ему и скажу: "Эй, приятель, ты свободен в субботу вечером? Прекрасно! Приходи ко мне на

вечеринку и приноси с собой гитару". Я не буду рассказывать ему, какой улице он должен ид-

ти, чтобы попасть на вечеринку, или какая должна быть гитара, — Джо все это уже знает.

В данном случае Джо является аналогом объекта программирования, и речь идет о двух

его свойствах. Одним из свойств является функция, а именно приход на вечеринку. Другим

свойством является объект: гитара Джо. (В этой аналогии Джо тоже является объектом, т.е.

один объект выступает в качестве свойства другого объекта.)

В ActionScript объекты можно использовать для систематизации сложных поведений и ха-

рактеристик программ и обеспечения простого взаимодействия с ними. Подобно примеру с

Джо, объектом является нечто, к чему можно обратиться по имени, а это нечто может обладать

собственными функциями и поведениями. Сводя связанные и свойства данных под

именами объектов, вы облегчаете процедуру работы с программами и их понимание.

Каждый видеоклип во Flash является объектом. Таким образом, даже для тех, кто очень

мало знаком с Flash, терминология объектов может быть новой, но сами объекты таковыми

не являются.

204 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Рассмотрим три основных компоновочных блока объектов: элементарные данные, функ-

ции и структуры данных. Их рассмотрение представляет собой краткий обзор элементов, со-

ставляющих программу Оставшаяся часть этой книги посвящена детализации

этих понятий.

Простейшая форма данных (элементарные данные) представляет собой строки цифр и

символов. Например, и число 6, и строка "Hello, world!" являются элементарными дан-

ными (частью данных). Еще одним типом являются булевы данные, которые могут прини-

мать только одно из двух значений: true (истина) или (ложь).

Подробная информация об элементарных данных в главе 12

"Управление переменными, данными и типами данных".

Функцией называется именованный блок кода, заключающий в себе процедуру.

Элементарные данные и функции можно сгруппировать в структуры данных. Одним из

типов структуры данных является массив, который, как правило, представляет собой нумеро-

ванный список, начинающийся с нуля. Таким образом, является первым эле-

ментом массива с именем myArray. В массиве, содержащем имена месяцев, будет содержать-

ся

Подробно о массивах рассказывается в главе 19 "Использование встроенных

базовых объектов".

Объекты являются еще одним способом группирования данных и функций в структуры. Вме-

сто того чтобы доступ к данным осуществлялся с помощью чисел, как это происходит в массивах, в

объектах доступ к элементам (называемым свойствами) осуществляется с помощью имен.

Ниже приведены примеры некоторых свойств видеоклипов (типа

Для определения текущего состояния видеоклипа свойства можно считывать. Их также мож-

но изменять, управляя, таким образом, клипом.

• _currentFrame (Текущий кадр). Число, указывающее текущий кадр видеоклипа на

временной шкале.

• _rotation (Вращение). Число градусов, на которое повернут видеоклип относитель-

но своего исходного положения.

• _visible (Видимый). Булево значение, управляющее состоянием отображения ви-

деоклипа.

• (Имя). Строка, являющаяся именем экземпляра видеоклипа.

Доступ к элементам массива осуществляется посредством записи в квадратных скобках:

Доступ к свойствам объекта, как правило, осуществляется посредством

"точечного синтаксиса", при котором имя объекта и имя свойства отделяются друг от

точками, как в приведенных ниже примерах.

myClip._visible

Подводя итоги, можно сказать, что объекты являются наборами свойств. Каждый объект

имеет имя, и каждое свойство в пределах объекта тоже имеет свое собственное имя. Имя

ГЛАВА 11. ЗНАКОМСТВО с ACTIONSCRIPT 205

свойства ссылается либо на функцию, либо на данные. Данные могут быть элементарными

величинами или структурами данных, как, например, массив или другой объект.

Данные также могут храниться в переменных, представляющих собой контейнер, находя-

щийся за пределами любой структуры данных. В приведенном ниже примере выражения

число 10 хранится в переменной с именем х.

х =

Функции в объектах являются методами

И массивы, и объекты могут включать в себя функции. Однако свойства объекта, обращающие-

ся к функциям или содержащие их, называются методами. Функция, являющаяся элементом

массива, так и называется функцией.

I

Методы относятся к более широкому понятию действия, которое также включает в себя гло-

бальные функции (например, которые не связаны ни с каким объектом, операторы

(например, break), управляющие ходом выполнения программы, а также директивы

(например, include), передающие инструкции компилятору ActionScript. Методы — это наибо-

лее точный термин.

ТРИ КИТА: УДОБОЧИТАЕМОСТЬ, ПОВТОРНОЕ

ИСПОЛЬЗОВАНИЕ И ДОСТИЖИМОСТЬ

Каждый программист, работающий во Flash, стремится разработать свой собственный

стиль написания, систематизации кода и создания комментариев к программам. Компании, с

которыми сотрудничают программисты Flash, работают согласно разным стандартам. Одна-

ко, каким бы ни был стиль работы программиста, он всегда стремится, чтобы написанный им

код был удобочитаемым, достижимым и чтобы его можно было использовать неоднократно.

Чем длиннее и сложнее программа, тем более важно стремиться к достижению этих целей как

до начала работы, так и в процессе написания кода.

УДОБОЧИТАЕМОСТЬ

Когда приходится возвращаться к редактированию, усовершенствованию или отладке про-

граммы, всегда хочется, чтобы код можно было легко расшифровать, не слишком напрягая при

этом ни зрение, ни мозги. Удобочитаемость отчасти заключается в установке интервалов, отсту-

пов и применении прописных букв в коде. Удобочитаемость могут улучшить комментарии к ко-

ду, а также использовании имен функций, переменных, объектов и массивов, несущих опреде-

ленную смысловую нагрузку. И наконец, самым лучшим (и самым тяжелым) способом повы-

шения удобочитаемости кода является его написание в более элегантной и простой манере.

УСТАНОВКА ИНТЕРВАЛОВ, ОТСТУПОВ и ПРИМЕНЕНИЕ ПРОПИСНЫХ БУКВ

За исключением лишь некоторых ситуаций, язык ActionScript достаточно гибок к заданию

интервалов, отступов и применению прописных букв.

Некоторые необычные, но важные примеры, касающиеся строгого подхода

Flash к применению прописных букв, приведены в главе 16 "Взаимодействие,

события и установление последовательности".

Две следующие функции, например, будут одинаково трактоваться интерпретатором

ActionScript (программой, интерпретирующей SWF-файлы):

206 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

function

function addOneToBaseScore

return basescore+1;

}

Использование пробелов, отступов и прописных букв делает вторую функцию гораздо бо-

лее удобочитаемой и, следовательно, более легкой для понимания и редактирования про-

граммы.

ДОБАВЛЕНИЕ КОММЕНТАРИЕВ к СЦЕНАРИЮ

Только лишь форматирование кода редко помогает понять, что же происходит в сложной

программе. Чтобы элементы программы были более понятными, необходимо добавлять ком-

ментарии. Однострочные комментарии помечаются двумя косыми чертами:

базовый счет, возвращает: базовый счет на единицу больше

Кроме того, комментарий может следовать за кодом:

baseScore // baseScore объявляет кадр 1 основной временной шкалы

Комментарий может быть и многострочным, например, таким:

/* ДОБАВЛЕНИЕ ЕДИНИЦЫ К БАЗОВОМУ СЧЕТУ

Michael Hurwicz - January 2002 -

baseScore является целым числом */

Некоторые программисты предпочитают ставить двойную косую черту в каждой строке,

поскольку так будет понятнее, что к комментарию относится каждая выделенная строка:

// ДОБАВЛЕНИЕ ЕДИНИЦЫ К БАЗОВОМУ СЧЕТУ

// Michael Hurwicz - January 2002 -

// baseScore является целым числом

В окне действий комментарий выделяется цветом, поэтому вы всегда будете знать, где он начи-

нается и где заканчивается. Чтобы задать цвет комментария, выполните команду

В диалоговом окне Preferences перейдите к вкладке Editor и в груп-

пе опций Syntax Coloring на кнопке цветовой палитры Comments. Затем в открывшейся

цветовой палитре выберите нужный цвет. Точно таким же образом можно задать цвет кода, распо-

лагающегося на переднем и заднем плане, ключевых слов, идентификаторов и строк.

Кроме того, Flash допускает хранение кода во внешних файлах.

Подробная информация о хранении кода во внешних файлах приведена в гла-

ве 24 "Коллективное использование ActionScript".

Не все внешние редакторы "понимают" ActionScript, поэтому не всегда с их помощью

можно отличить комментарии от кода. В этом случае использование двойной косой черты в

каждой строке будет более эффективным, особенно если комментарии длинные. Символы

двойной косой черты будут гораздо понятнее и при вставке кода, например, в сообщение

электронной почты.

Возникли проблемы с комментариями? Обратитесь к разделу "Возможные

проблемы" в конце этой главы.

ГЛАВА 11. ЗНАКОМСТВО с ACTIONSCRIPT 207

СОЗДАНИЕ УДОБОЧИТАЕМЫХ ИМЕН

Вы уже знаете, что в программах используются элементы нескольких типов

(таких как функции, массивы, объекты и переменные), требующие присвоения имен. Как

сделать имена удобочитаемыми?

Мы уже рассмотрели один из факторов повышения удобочитаемости имен: применение

прописных букв. Прочитать строку addOneToBaseScore гораздо легче, чем строку

addonetobasescore. Как правило, большинство имен во Flash начинаются со строчной бу-

квы. Начальная прописная буква обозначает

Еще одним способом повышения удобочитаемости является присвоение имен, которые бу-

дут интуитивно понятны вам и, если нужно, то и другим людям. К примеру, вам вряд ли захо-

чется проверять данные функции addOneToBaseScore, чтобы запомнить, как она работает.

УПРОЩЕНИЕ, СТАНДАРТИЗАЦИЯ и ОПТИМИЗАЦИЯ КОДА

Самый лучший способ повышения удобочитаемости кода заключается в разработке про-

стых способов достижения целей написания программы. Простой код сделает жизнь про-

граммиста гораздо проще. Естественно, процесс написания изящного кода гораздо проще

выглядит в теории, чем на практике, однако это объективный фактор.

Полезной будет попытка стандартизировать код таким образом, чтобы одни и те же мето-

ды или синтаксис можно было использовать снова и снова. В этом случае блоки кода будут

понятны с первого же взгляда, если программист хорошо знаком с методикой его написания

и используемым синтаксисом.

Простой код обычно исполняется гораздо лучше сложного. Поскольку стандартизируются

лучшие примеры кода, то применительно ко всей программе это позволит добиться улучше-

ния ее выполнения в целом. Создание более лаконичного кода будет также способствовать

ускорению отладки и облегчению редактирования программы.

Однако в некоторых ситуациях возникает противоречие между быстродействующим и

легко читаемым кодом. В таких случаях лучше использовать быстрый код в программе, а лег-

ко читаемый код — в качестве комментария.

ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ: РАСЧЛЕНЕНИЕ КОДА НА МОДУЛИ

Большинство программистов стараются написать такой код, который можно было бы исполь-

зовать неоднократно. Все-таки программирование, по сути своей, является процедурой решения

той или иной задачи. Если какую-то задачу вы уже решили, зачем изобретать велосипед в дальней-

шем? Кроме того, методики, используемые для написания кода, подлежащего повторному исполь-

зованию, способствуют улучшению его удобочитаемости и повышению опыта программистов.

Возможность повторного использования кода определяется функциями и объектами. Оба

этих средства позволяют объединять код в функциональные модули, которые затем можно

будет использовать как в данной, так и в других программах. Ту же в случае, если доступ

к данным осуществляется посредством цифровых индексов, могут выполнять и массивы.

Кроме того, объединение функциональных возможностей в объекты и функции делает

код более удобочитаемым. Пусть, например, приведенный ниже код содержится внутри об-

работчика события вступительного кадра, присоединенного к левой ноге фигуры человека.

if < 30) {

}

Вам известно, что всякий раз при достижении видеоклипом вступительного кадра интерпре-

тирующая программа ActionScript должна выполнить то, о чем говорится в коде. Но что именно?

208 ЧАСТЬ III. РАСШИРЕНИЕ с помощью ACTIONSCRIPT

Сравним этот пример с ниже строкой, которая активизирует функцию

t передавая ей аргумент 30.

Lift (30);

На это данные, передаваемые функции. Аргумент заключается в круг-

лые скобки после имени функции.

Не нужно быть гением, чтобы догадаться, что данная функция задает поднятие левой ноги

и что аргумент 30 имеет какое-то отношение к тому, насколько высоко будет поднята нога. В

данном случае удобочитаемость кода реализуется за счет применения менее интуитивно по-

нятного кода в функции с интуитивно понятным именем.

Теперь скажем, что левая нога представляет собой часть объекта с именем guy (человек) и

свойством Кроме того, свойство tLeg является объектом с методом

Практически данный код представляет собой полное предложение, имеющее подлежа-

щее, сказуемое, дополнение и определение: "Человек поднимает левую ногу".

Как для объекта с именем guy создать часть, являющуюся ногой? Воспользуемся тем фак-

том, что видеоклипы являются объектами. В данном случае guy — это видеоклип, а

его фрагмент. Функция lift становится методом фрагмента при ее

определении в обработчике события, связанного с данным фрагментом.

И метод lif t и строка guy. lef lif t () предполагают, что где-то в другом мес-

те программы задана функция выполняющая какую-то операцию, похожую на ту, что

задана в виде менее понятного кода, представленного в самом начале данного подраздела.

Если взглянуть на определение функции, вы получите более точное представление о том, что

означает данная процедура, а именно, что она означает вращение видеоклипа:

function lift (degrees) {

if (_rotation > degrees) {

}

Добавив комментарий к определению функции ("используется для поднятия ле-

вой ноги"), мы получим вполне удобочитаемый код.

В приведенной ниже простой программе показано небольшое уточнение опи-

санной схемы. К функции t добавлена вторая часть, так что при ее выполнении нога опус-

кается, если величина _rotation меньше величины degrees, и поднимается, если величина

_rotation больше величины degrees. Если величина _rotation равна величине degrees,

функция не выполняет никакой задачи; это является точкой для остановки движения ноги.

// используется для подъема, опускания и остановки движения ноги

function {

if (_rotation < {

ногу

if (_rotation > degrees) {

ногу

}

В приведенном ниже примере даны определения трех функций, изменяющих значение

переменной degrees, задавая тем самым подъем, опускание или остановку движения ноги.

ГЛАВА 11. ЗНАКОМСТВО с ACTIONSCRIPT 209

function raise () { degrees = 20; }

function degrees }

function { degrees = } // ничего не делает

Запуск этих трех функций инициируют три кнопки в рабочем поле. Обработчик события

вступительного кадра фрагмента ноги постоянно выполняет функцию t поэтому со-

ответствующее действие запускается сразу же при изменении переменной degrees.

Использование функций и объектов является признаком работы программиста высокого

профессионального уровня. Основой этого утверждения является уже упоминавшийся факт,

что программирование является решением тех или иных задач, а первым шагом на пути к ре-

шению является определение предметной области и самой задачи.

В процессе задания объектов точно определяется предметная область. Скажем, в примере

с левой ногой предметной областью является объект Аналогично, в процессе

задания функции определяется задача. Например, предыдущая функция определяет задачу,

как поднятие ноги на определенное число градусов.

Кроме того, функции и объекты помогают разбить большие задачи на более мелкие. Пред-

положим, вы хотите, чтобы нарисованная фигурка прошла по комнате. Функция

может быть достаточно сложной. Вместо этого можно написать функ-

цию (сделать один шаг) и повторять ее до тех пор, пока фигурка не пересечет

всю комнату. Что же будет включено в функцию выполнения одного шага? Фигурка человека

должна взмахнуть рукой, передвинуть ногу и переместиться на какое-то расстояние вперед.

Если продолжать действовать таким образом, то в конце концов большая задача будет по-

делена на несколько небольших частей, достаточно точных и достижимых для решения. На-

чать работу можно с реализации решений в виде функций. Затем эти функции можно объе-

динить в более сложные функции, объекты или участки кода. Объекты и функции являются

великолепным средством решения задач, поскольку помогают создавать простые шаги реше-

ния сложных многоэтапных задач.

Вы готовы писать программу, но не знаете, с чего начать? Обратитесь к разделу

"Возможные проблемы" в конце этой главы.

Попытка решить проблему сложных функций и объектов сродни упорядочиванию и

структурированию папок при работе с электронной почтой или файлами на жестком диске.

По мере увеличения количества почтовых сообщений и файлов их недостаточная системати-

зация снижает эффективность работы. Аналогичным образом, объекты и функции являются

основой организации Они не усложняют жизнь программиста, а облегчают ее.

Достижимость: СИСТЕМАТИЗАЦИЯ и ЦЕНТРАЛИЗАЦИЯ КОДА

Существуют два аспекта достижимости: способность интерпретирующей программы на-

ходить нужные функции и переменные в течение рабочего цикла (при выполнении програм-

мы) и способность программиста находить физические строки кода при необходимости их

редактирования.

В объектно-ориентированном программировании инфраструктура, позволяющая

татору ActionScript находить при выполнении программы нужные функции, реализуется путем

встраивания функций и переменных в объекты и разделения объектов на различные классы.

Например, есть метод (функция) concat для массивов и метод concat — для текстовых

строк. В каждом случае определение метода хранится в определении класса, и поэтому интер-

претирующая программа знает, где искать тот или иной метод и не путает их друг с другом.

Обратитесь к разделу "Функции как классы: конструктор функций" в главе 15

"Объединение предложений в функции".

210 ЧАСТЬ III. РАСШИРЕНИЕ с помощью ACTIONSCRIPT

Существуют также правила обзора данных, которые определяют, является ли переменная,

функция или объект одной части программы непосредственно "видимыми" из другой части

программы. Проблем обзора данных можно избежать путем централизации сосредо-

точения как можно большей его части в одном месте.

Например, если весь код находится в пределах одного то о проблемах

обзора данных волноваться не стоит. Во Flash 5 помещение всего кода в

один кадр иногда было затруднительным или вообще нежелательным. Что

касается Flash MX, то благодаря встроенным обработчикам событий эта

процедура значительно облегчена и в целом имеет гораздо меньше отрицательных сторон.

или динамические, обработчики событий задаются в кадрах, а не путем присое-

динения к видеоклипам.)

Встроенные обработчики событий были описаны выше, в разделе "Выбор дей-

ствий для кадра или объекта". Более подробно они будут рассмотрены в

главе 16 "Взаимодействие, события и установление последовательности".

Возникли проблемы при преобразовании старого Flash-файла для использова-

ния обработчиков событий нового типа? Обратитесь к разделу "Возможные

проблемы" в конце этой главы.

Еще одним важным фактором является способность программиста находить и без труда

редактировать код. В любой сколько-нибудь сложной программе найдется множество укром-

ных мест и потайных уголков, в которых можно "спрятать" код. Если код разбросан слишком

во многих местах, то работать с программой будет достаточно тяжело.

Предположим, что к функции необходимо добавить второй аргумент. Сама функция оп-

ределена в одном месте, так что изменить ее довольно легко. Однако необходимо по всей

программе найти все ссылки на данную функцию и добавить второй аргумент. Если весь код

сосредоточен в одном месте, то найти и функцию, и все ссылки на нее будет делом нескольких

минут. Если же код разбросан в 20 разных местах, то перед вами стоит уже гораздо более слож-

ная и утомительная задача. Конечно, если внести изменения нужно только один или два раза,

то и эта задача не представляет собой большой сложности. Но если на выполнение подобных

задач вам придется тратить много времени, то программу нужно будет усовершенствовать.

Централизация кода, вероятно, является наиболее важным фактором реализации легко под-

держиваемой программы. За счет встроенных обработчиков событий во Flash MX можно легче

избежать эффекта "рассеяния кода", делающего программы тяжелыми для поддержания.

Вы уже централизовали весь код ActionScript и хотите держать его на панели

Actions при работе над графикой других кадров? Обратитесь к разделу

"Возможные проблемы" в конце этой главы.

СИСТЕМАТИЗАЦИЯ ДАННЫХ и ФУНКЦИЙ с помощью ВИДЕОКЛИПОВ

До появления Flash MX практически в каждой Flash-программе, в которой применялись

сценарии, для систематизации кода использовались видеоклипы. Часто клипы, содержащие

код, были "фиктивными", т.е. без графического содержимого. Хотя время от времени бывает

удобно присоединить код к видеоклипам, этот подход во Flash MX нужен гораздо меньше,

чем во Flash 5. Все, что раньше помещалось в обработчик события (во вступи-

тельный кадр), присоединяемый к видеоклипу, теперь можно поместить во встроенный об-

работчик события (в кадре). Существуют также аналогичные встроенные

форматы других обработчиков событий.

ГЛАВА 11. ЗНАКОМСТВО с ACTIONSCRIPT 211

Принимая решение о необходимости присоединения кода к видеоклипам, подумайте о

следующем. Если в кадре 1 данного фильма в рабочем поле есть 20 видеоклипов, то можно

поместить действие в обработчик события вступительного кадра каждого видеоклипа и, пре-

жде чем перейти к кадру 2, интерпретирующая Flash-программа будет выполнять каждое из

этих действий. Либо можно поместить одно встроенное событие onEnterFrame в первый

кадр основной временной шкалы, а все действия поместить в один клип. Прежде чем перейти

к кадру 2, Flash будет выполнять все действия во встроенном обработчике события. Иными

словами, выполняется одна и та же задача, но программу будет поддерживать в 20 раз легче.

ИСПОЛЬЗОВАНИЕ ВРЕМЕННОЙ ШКАЛЫ для СИСТЕМАТИЗАЦИИ КОДА

Для систематизации кода можно использовать шкалу. Каждый кадр может вы-

ступать в роли функции и содержать блок кода, предназначенный для выполнения опреде-

ленной задачи. Функция запускается посредством действия О, или

gotoAndStop которое направляет воспроизводящую головку к определенному кадру.

В то же время в этом кадре можно анимировать, добавлять или удалять видеоклипы.

Еще лучше будет поместить каждый блок кода в функцию и просто обратиться к этой функ-

ции кадра. Это сделает каждый кадр более удобочитаемым, а также позволит централизовать

большое количество кода. Например, все функции можно поместить в первый кадр одного слоя.

Систематизация кода на временной шкале является более наглядным подходом, чем реа-

лизация в функциях одних и тех же поведений. Однако, в связи с тем, что код в каждом кадре

приходится отдельно, систематизация кода на временной шкале не приводит к

его реальной централизации. "Заглянуть" в несколько кадров на временной шкале практиче-

ски так же тяжело, как и в несколько видеоклипов.

Несмотря на то что данная методика все еще используется, она является "пережитком"

более ранних версий Flash, в которых не поддерживались функции. Эта методика достаточно

жизнеспособна, особенно если речь идет о простых фильмах, однако в сложных фильмах она

становится реальной помехой.

ПОИСК КОДА С ПОМОЩЬЮ ПАНЕЛИ MOVIE EXPLORER

Панель Movie Explorer (Проводник фильма) может помочь в поиске кода в ис-

ходных la) файлах Flash. Начните с того, что на панели Movie Explorer (рис. в разделе

Show (Показать), оставьте активной только кнопку ActionScript. На панели Movie Explorer оста-

нутся отображенными только видеоклипы и кнопки, содержащие код ActionScript.

Подробная информация о панели Movie Explorer представлена в главе 2

"Интерфейс Flash".

Кнопки раздела Show панели Movie Explorer определяют типы программных элементов,

отображаемых на данной панели. Перечисляя слева направо, они управляют отображением

элементов текста, кнопок, видеоклипов и графики, кода ActionScript, видео, звуков и растро-

вых изображений, а также кадров и слоев. После щелчка на самой правой кнопке откроется

отдельное окно для настройки всех параметров отображения панели Movie Explorer.

Чтобы отобразить код ActionScript определенной кнопки или видеоклипа, выделите этот

элемент, а затем откройте меню параметров панели (щелкните на кнопке в правом верхнем

углу) и выберите из него пункт Expand Branch (Развернуть ветвь). Либо щелкните на знаке

"плюс", расположенном слева от видеоклипа или кнопки. Однако, чтобы добраться до нуж-

ного кода, вам, возможно, придется выполнить эти действия несколько раз.

212 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Кнопка выбора отображаемых элементов

Видео, звуки, изображения

Кнопки, графика

Рис. 11.2. Кнопки раздела Show панели Explorer определяют

типы программных элементов, отображаемых на панели

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Я знаю, какие операции должна выполнять программа, но не с чего начать.

Если вы полностью запутались в схеме решения задачи с помощью ActionScript (или лю-

бого другого языка программирования), то вероятнее всего, вы не разбили одну большую

задачу на несколько маленьких. Определите подзадачи и разбейте их на еще более мелкие.

Если вы сможете разбить задачу на такие, решение которых реализуется посредством не-

скольких строк кода, вы на правильном пути.

Можно также попытаться определить упрощенную версию задачи, подлежащей решению.

Затем путем последовательных приближений перейдите к решению более сложной задачи.

Мне удалось централизовать весь код ActionScript. Как сохранить его на панели Ac-

tions при работе над графикой других кадров ?

Обычно после щелчка на кадре на панели Actions отображается код именно этого кадра,

даже если он не содержит ActionScript. Поэтому нужно вернуться назад и щелкнуть на кадре,

содержащем код ActionScript. Ужасно утомительное занятие.

Решение заключается в том, что следует воспользоваться кнопкой "прикрепления" текущего

сценария, которая расположена в правой части панели Actions, прямо под меню параметров (см.

рис. Отобразив код ActionScript на панели Actions, щелкните на данной кнопке. Выбранный

код будет "прикреплен" к панели Actions и будет оставаться на ней, независимо от с каким ка-

дром вы работаете, до тех пор, пока вы его не "открепите", снова щелкнув на этой кнопке.

Я преобразовываю старый проект Flash с тем, чтобы использовать новые обработ-

чики событий. Но они просто не работают! Что сделано неправильно?

Вероятнее всего, Flash MX распознала файл версии Flash 5 и автоматически устано-

вила параметры публикации, соответствующие выходному файлу версии Flash 5 (SWF). Об-

работчики событий нового типа в версии Flash 5 не поддерживаются, и, естественно, возни-

кает проблема. Для ее решения выполните команду Settings

публикации). В открывшемся диалоговом окне перейдите к вкладке Flash и из раскрываю-

щегося меню Version (Версия) выберите пункт Flash Player 6.

Могут ли комментарии вызывать появление ошибок?

Да! Есть одно место, где наличие комментариев с завидным постоянством вызывает появле-

ние ошибки: это место перед частью else оператора Рассмотрим следующий код:

ГЛАВА 11. ЗНАКОМСТВО с ACTIONSCRIPT 213

if (myVar)

комментарий в этой строке приведет к появлению

else

}

Если вы считаете, что возникшая проблема может быть связана с наличием

попробуйте переместить комментарий в новое место или временно его удалить.

Кроме того, рассмотрите возможность, что комментарий мог быть случайно вставлен в

каком-то фрагмента кода или что вы забыли убрать комментарий из того места, где он был

внедрен при отладке программы.

FLASH ЗА РАБОТОЙ: МНОГОКРАТНО

ИСПОЛЬЗУЕМЫЙ, достижимый код

Ниже приведен пример того, как сделать код удобочитаемым, возможным для повторного

использования и достижимым.

Фильмы, созданные с помощью файлов f la и . f la, со-

держащихся на прилагаемом к этой книге компакт-диске, выглядят совершенно одинаково

(рис. Однако код файла . f la разработан так, что является удобочитае-

мым, достижимым и доступным для неоднократного использования.

Что касается файла la, то его код, разработанный во времена всеоб-

щего хаоса, выглядит совершенно загадочно:

{

var

var

var radian

{

)

if {

if

}

В файле unimportant2 la сделано следующее: создана функция

выполняющая все действия, которые должны быть включены в обработчик события вступи-

тельного кадра; выполнено преобразование в формат нового обработчика события; присвое-

но имя экземпляру видеоклипа (так, что им можно управлять с помощью до-

бавлены комментарии.

=

value for rotation

= 5;

in radians

function

214 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

and forth pendulum_like motion

rotation should be in -65 to +65

// (otherwise swing is inverted)

= function () {

with {

// 10 and 5 are "magic numbers", found by experimentation

) )

+=

// convert to radians for use with

// true at each extreme of the swing

// wag the tail and reverse diraction

if {

frame

if (frame>20) =

rotation direction

}

function () {

Рис. 11.3. Мультипликация, созданная для узла

Теперь, глядя на код, совершенно понятно, какие операции выполняет программа. Кроме

того, у нас есть функция, которую можно повторно использовать в качестве "черного ящика".

Для этого не обязательно понимать ее сущность и запоминать, как она получена.

Эта программа очень маленькая, и ее удобочитаемость или возможность повторного ис-

пользования может не иметь большого значения. А вот в сложных программах,

десятки или сотни страниц кода, удобочитаемость и возможность повторного использования

могут иметь очень важное значение.

ГЛАВА 11. ЗНАКОМСТВО ACTIONSCRIPT 215

ГЛАВА 12

УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ

И ТИПАМИ ДАННЫХ

ЭТОЙ

Работа с переменными

Группирование данных по типам 225

Возможные проблемы 241

Flash за работой: детектирование версии 242

РАБОТА с ПЕРЕМЕННЫМИ

Переменная — это имя, которое назначается для элемента данных. Переменная называется

так, поскольку назначаемые имена могут меняться. Например, в данный момент переменная

с именем может равняться 10, а через мгновение, когда вы набрали еще одно очко в

игре, значение myScore уже будет равно 11. Однако этим изменчивость переменных в

ActionScript не ограничивается. Одной и той же переменной сначала можно поставить в соот-

ветствие число затем — строку "иллюстрации", а после этого — массив строк и чисел.

Объявить переменную можно с помощью ключевого слова var следующим образом:

var // объявляет переменную х без первоначального значения

var у; // объявляет переменную у без первоначального значения

В большинстве случаев переменная объявляется только один раз. Затем в программе ее

можно использовать много раз по мере необходимости. Например:

var х = 10; // объявляет переменную х и задает ее равной 10

trace // отображает "10" в окне вывода данных

У = X +

trace // отображает "20" в окне вывода данных

Во многих языках программирования переменную следует объявить чем ее можно бу-

дет использовать. При работе в в случае использования переменной, которая не была

объявлена, интерпретирующая программа ActionScript создаст переменную (неявно).

Однако признаком хорошего тона считается объявление переменных явным образом и

включение в код комментариев о том, как и где используется каждая переменная. Такой при-

ем сделает код более удобочитаемым и, что наиболее важно, позволит однозначно контроли-

ровать область действия переменных, т.е. где в программе задается переменная и где к ней

можно получить доступ.

В данной главе затрагиваются некоторые вопросы, связанные с областью дей-

ствия данных. Более подробно они рассматриваются в главе 15 "Объединение

предложений в функции".

Кроме того, явные объявления можно централизовать и, таким образом, их будет легче

найти. Объявление переменных неявным образом сродни тому, что при работе в мастерской

нужные инструменты будут разбросаны по разным углам. Вы никогда не сможете найти то,

что вам нужно в данный момент, но обязательно наткнетесь на эту вещь в тот момент, когда

она нужна меньше всего.

Подробная информация об объявлении переменных приведена ниже, в разде-

ле "Где объявлять переменные".

НАЗНАЧЕНИЕ ЗНАЧЕНИЙ ПЕРЕМЕННЫХ

Назначить значения переменных можно с помощью оператора присваивания (=) или опе-

ратора set. Например, в обоих приведенных ниже выражениях значение переменной

irstName устанавливается равной

=

set (firstName ,

Значение в правой части может быть сложным выражением:

X = у +

set (х, у +

Из предыдущих примеров видно, что оператор set не дает никакого преимущества, а

только усложняет выражение. Однако, если вы хотите использовать для образования имени

переменной выражение, оператор set позволит сделать это, в отличие от оператора присваи-

вания. Например, в следующем выражении использование оператора set будет уместным:

1 = 4;

"a French

trace "a French movie"

А вот такое выражение приведет к ошибке:

= "a //

Оператор присваивания можно применять для образования имени переменной с помо-

щью выражения при использовании функции Но использование функции не ме-

нее сложно, чем использование оператора set:

= "a movie";

trace // "a movie"

218 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Подробно об операторе присваивания рассказывается в главе 13

"Использование операторов".

ГДЕ ОБЪЯВЛЯТЬ ПЕРЕМЕННЫЕ

Не существует оптимального для всех программ и программистов набора правил о том,

где нужно объявлять переменные. Однако при принятии решения по этому поводу, как пра-

вило, преобладающими являются два фактора.

• Возможность найти, понять и отредактировать переменные в процессе работы над

программой. Этот вопрос касается разработки программы.

• Что нужно сделать для чтобы быть уверенным в том, что интерпретирующая

программа сможет в нужный момент найти переменные? Этот вопрос ка-

сается области действия переменных.

Первый фактор — возможность найти код — приведет вас к тому, чтобы сосредоточить весь код

или большую его часть в одном кадре, например в первом кадре верхнего слоя основной времен-

ной шкалы. Именно такой тип кода рекомендован компанией Macromedia.

Доступ к переменным основной временной шкалы из подчиненных фрагментов можно

получить, используя в качестве пути _root. Предположим, например, что в основ-

ной временной шкале имеется строка

myVar =

Доступ к переменной myVar из подчиненного фрагмента можно получить следующим об-

разом:

// displays "20"

В некоторых ситуациях принцип всеобщей централизации кода не работает. Помимо оп-

ределения рамок, в пределах которых этот принцип применим, на повестке дня еще остается

вопрос о том, как систематизировать код в пределах одного контейнера так, чтобы макси-

мально повысить его удобочитаемость и минимизировать возможность ошибок.

КОГДА НЕ НУЖНО ЦЕНТРАЛИЗОВАТЬ код

Структура программы препятствует централизации кода, по крайней мере, в двух ситуациях.

• При использовании предварительного загрузчика. В этом случае идея заключается в том,

чтобы как можно быстрее получить предварительный загрузчик, а затем на его фоне

выполнить остальные задачи, необходимые для инициализации программы. Предва-

рительный загрузчик обычно занимает один или два кадра в начале фильма. Любые

переменные, связанные с предварительным загрузчиком, будут определены в этих на-

чальных кадрах. При запуске основного фильма связанные с ним переменные будут

определены в кадре 2 или последующих кадрах.

• При использовании компонентов. Компоненты объединяют в себе графику и код. При

использовании компонентов невозможно централизовать содержащийся в них код.

Кроме в основе набора компонентов, вероятнее всего, лежит иерархическая

структура классов, согласно которой все компоненты набора принадлежат одному ба-

зовому классу, а различные подмножества компонентов принадлежат соответствую-

щим подклассам. В этом случае каждый класс и подкласс имеют свой собственный

код, размещенный в определенном месте. Идея заключается в том, что обычному

программисту никогда не нужно влезать в этот код.

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 219

КАК СИСТЕМАТИЗИРОВАТЬ ПЕРЕМЕННЫЕ В ОСНОВНОЙ

ВРЕМЕННОЙ ШКАЛЕ

При централизации переменных на основной временной шкале возникает ряд других во-

просов. Размещение огромного числа отдельных переменных во временной шкале сродни

хранению в одном ящике кухонной посуды, инструментов для настройки фортепиано и ре-

монта автомобиля.

Чтобы немного уменьшить путаницу, переменные с помощью комментариев можно раз-

делить на категории. Код каждой категории можно также хранить и редактировать во внеш-

нем файле, а затем загружать его с помощью директивы tfinclude.

Подробная информация о хранении кода ActionScript во внешних файлах

ведена в главе 24 "Коллективное использование ActionScript".

Однако само по себе использование комментариев и внешних файлов не является реше-

нием проблемы. К примеру, каждый видеоклип, имеющий собственную временную шкалу и

обработчики событий, определяет одну область действия. То же самое касается и основной

временной шкалы.

Временная шкала в чем-то подобна папке с файлами, содержащейся на компьютере, за

исключением того, что временная шкала содержит элементы программы, такие как перемен-

ные, объекты и функции. Как и в случае с папкой файлов, два элемента программы, содер-

жащиеся в одной временной шкале, не могут иметь одинаковые имена. Если это происходит,

то элемент, заданный позже, обычно записывается поверх существовавшего ранее. (В неко-

торых случаях существующее имя делает новое непригодным к употреблению.)

Если в основной временной шкале просто объявить переменные, без явного назначения

области действия каждой из них, то областью действия всех переменных будет основная вре-

менная шкала. В этом случае каждая переменная должна иметь уникальное имя. Поэтому,

чтобы отличить кухонные принадлежности от аксессуаров фортепиано

(musicWax) и инструментов для ремонта автомобиля (carWax), имена переменных должны

быть достаточно сложными. Кроме того, можно случайно повторно использовать имя пере-

менной, переписав предыдущее значение.

Помимо этого, если для загрузки SWF-файла во шкалу, содержащую переменные,

использовать функцию то переменные будут потеряны, поскольку временная шка-

ла нового видеоклипа заменит существующую. С другой стороны, если для загрузки клипа из биб-

лиотеки использовать функцию а имя экземпляра, присвоенное новому клипу,

совпадет с именем существующей переменной, объекта, массива или функции той же временной

шкалы, то уже существующее имя будет работать, но вы не сможете управлять присоединенным

видеоклипом, поскольку имя его экземпляра будет "захвачено" уже существующим.

Код любой временной шкалы очень чувствителен к таким конфликтам пространства имен.

Если при поиске элементов фильма вы руководствуетесь принципом вывода всего кода основ-

ной временной шкалы, будьте очень внимательны и постарайтесь избежать конфликтов.

ИСПОЛЬЗОВАНИЕ ВИДЕОКЛИПОВ для СИСТЕМАТИЗАЦИИ

ПЕРЕМЕННЫХ

Одна из стратегий избежания конфликта пространства имен заключается в использова-

нии временной шкалы видеоклипа и обработчиков событий в качестве контейнеров кода.

Например, можно создать клип kitchen с таким обработчиком событий:

onClipEvent (load) {

var wax = true; // у нас есть кухонные принадлежности

220 ЧАСТЬ РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Областью действия переменных, объявленных в обработчике событий обычного типа, та-

ком как вышеприведенный, является видеоклип. К переменным можно обращаться непо-

средственно из временной шкалы клипа и его обычных обработчиков событий:

onClipEvent (enterFrame) {

wax = false; // не относится к кухонным принадлежностям

Объявление переменных в обычном событии load позволяет использовать одно и то же

имя переменной (wax) в нескольких видеоклипах. Однако, если в другом клипе есть код об-

ращения к переменной клипа необходимо указывать полный путь к ней:

= false; // обращение к клипу kitchen из другого клипа

Неудобство хранения кода в видеоклипах заключается в том, что при наличии большого

числа клипов, в которых разбросаны переменные, редактирование кода будет затруднительным.

Одним из возможных решений является использование (называемого

также клипом кода) в качестве центрального контейнера кода для нескольких других видео-

клипов или даже для всех видеоклипов программы. Размещение всех переменных в одном

обработчике события load не слишком отличается от их сосредоточения в одном кадре ос-

новной временной шкалы. Однако, помня о том, что к клипу кода никогда не нужно присое-

динять или загружать фильмы, вы устраните одну из основных причин возникновения кон-

фликта пространства имен. Кроме того, эффективным может быть распределение перемен-

ных в небольшом количестве клипов-контейнеров.

Еще одним хорошим способом является создание одного или нескольких видеоклипов

исключительно для загрузки и присоединения фильмов. Эти клипы являются пустыми, по-

этому присоединенный или загруженный фильм не приведет к замещению элементов.

Для облегчения редактирования можно поместить весь код, создающий переменные, в

одно место и указать пути к видеоклипам, у которых переменные являются свойствами.

С точки зрения интерпретирующей программы переменные являются частью ви-

деоклипов, для которых они были назначены. Например, предположим, что на основной

временной шкале имеются видеоклипы kitchen, shop и

= true;

= false;

= true;

Интерпретирующая программа ActionScript будет искать указанные переменные wax со-

ответственно в клипах kitchen, shop и musicRoom. Такой подход позволяет избежать кон-

фликта пространства имен и при этом централизовать код.

Однако, если загрузить внешний SWF-файл в основную шкалу, то все содер-

жащиеся в нем видеоклипы и связанные с ними переменные будут уничтожены.

ИСПОЛЬЗОВАНИЕ ОБЪЕКТОВ для СИСТЕМАТИЗАЦИИ ПЕРЕМЕННЫХ

Где бы ни был размещен код, переменные можно хранить в объектах в качестве свойств.

В этом случае чувствительными к конфликту пространства имен будут только имена объектов

верхнего уровня. Например, пусть на основной временной шкале имеются три объекта верхнего

уровня: kitchen, shop и musicRoom. В этом случае нужно быть внимательным и не загружать

и не присоединять к основной временной шкале видеоклипы, имеющие те же самые имена.

Другие имена свойств, такие как wax, "защищены" внутри соответствующих объектов,

как если бы они находились внутри видеоклипов. И обращение к ним может выглядеть иден-

тичным образом:

=

= false;

= true;

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 221

Однако пустой видеоклип занимает 800 байт памяти, а новый объект — только 340 байт.

Даже объекты верхнего уровня можно защитить от возникновения конфликтов простран-

ства имен с участием экземпляров видеоклипов. Во Flash 5 программисты иногда прибегали к

этому способу, задавая свойства объектов верхнего уровня глобального объекта сле-

дующим образом:

new

Объект Object защищен от случайного совпадения с именами видеоклипов,

поскольку к нему нельзя присоединять или загружать видеоклипы. То же самое касается и

любого другого объекта, не являющегося видеоклипом. Единственный недостаток этого под-

хода заключается в том, что ни к одной из переменных нельзя будет обратиться просто по ее

имени. Всегда нужно будет использовать имена типа Ob j wax.

Bo Flash MX для достижения той же самой цели есть лучшее средство: идентифи-

катор _global, который является обращением к глобальному объекту, содержа-

щему встроенные объекты и классы, в том числе и сам объект

Object, а также Array, Math и String.

Переменные можно хранить как глобальные свойства, аналогично приведенному ниже примеру,

= 10;

Можно также создать несколько глобальных объектов высокого уровня, таких как

_global shop, _global и поместить в них все осталь-

ные переменные, функции, массивы и объекты. Например:

_global = new

= true;

Таким образом реализуется безопасная комплексная система хранения всех элементов

программы.

Глобальные переменные и объекты доступны из любого места программы. Код, создаю-

щий эти элементы, можно сосредоточить на основной временной шкале или в любом другом

месте. Глобальные переменные и объекты нельзя повредить при загрузке внешнего SWF-

файла, независимо от того, в какую временную шкалу он загружается.

Кроме глобальные переменные и объекты можно считывать только по их именам,

без необходимости включения _global. Например:

// отображается "10"

Если вы хотите изменить переменную или свойство, необходимо использовать идентифи-

катор _global. Например:

= 11;

= true;

Использование объектов несколько сказывается на производительности программы.

Один из способов, позволяющих обойти эту заключается в том, что в случае неод-

нократного обращения к определенному свойству в определенной точке программы необхо-

димо создать временную переменную, указывающую на данное свойство. Например:

kWax

Использование переменной kWax, вместо того, чтобы заставлять интерпретирующую

программу снова и снова искать свойство объекта, может существенно повысить производи-

тельность. Кроме того, короткие имена переменных быстрее вводить с клавиатуры.

222 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Видеоклипы, объекты и объект одновременно решают вопросы разработки и

области действия, что не под силу только комментариям и внешним файлам. Например, при

распределении переменных с комментариями по категориям интерпретирующая программа

не понимает этих категорий. Аналогичным образом, при загрузке в одну временную шкалу

нескольких файлов с помощью директивы ttinclude интерпретирующая программа видит

переменные в виде одного большого списка. Видеоклипы, объекты и _global обес-

печивают структуру, которую понимает и программист, и интерпретирующая программа.

Многие программисты для систематизации переменных в программах с большим количеством

кода стремятся использовать видеоклипы либо объекты (или и те и другие). Однако для обеспече-

ния централизации кода компания Macromedia рекомендует минимизировать количество кода,

присоединяемое к видеоклипам и кнопкам. Использование пользовательских объектов открывает

совершенно новые перспективы возможностей, со своими проблемами и сложностями.

Подробная информация о пользовательских объектах представлена в главе 21

"Упаковка данных и функций с помощью пользовательских объектов".

Еще одним типом объектов, которые можно использовать для хранения переменных, яв-

ляются массивы. Хранение переменных в массивах в виде элементов также открывает новые

возможности манипулирования переменными.

Об объекте и о массивах рассказывается в главе 19 "Использование

встроенных базовых объектов".

ПРАВИЛА ПРИСВОЕНИЯ ИМЕН ПЕРЕМЕННЫМ (и ДРУГИМ ЭЛЕМЕНТАМ)

Имя переменной является ее идентификатором и представляет собой ряд буквенно-

цифровых символов, использующихся для представления элемента данных или функции.

Все имена переменных являются идентификаторами. Однако не все идентификаторы являются

именами переменных. Например, имена функций являются идентификаторами, но они не явля-

ются переменными, поскольку содержат определенный, неизменный элемент данных (функцию).

При образовании идентификаторов необходимо соблюдать три правила. Пренебрежение

ими может привести к возникновению ошибок или вызвать серьезные проблемы.

• Используйте только буквы, цифры, символы подчеркивания и знак доллара. Не ис-

пользуйте пробелы, знаки препинания (точки, запятые, дефисы, круглые и квадрат-

ные скобки, восклицательные и вопросительные знаки), а также следующие символы:

• В качестве начального символа используйте букву, символ подчеркивания или знак

доллара. Не используйте цифры.

• Не используйте зарезервированные слова.

В зарезервированными являются следующие слова:

break

case

continue

default

delete

else

for

function

instanc eof super

switch

this

with

do

if

in

new

return

typeof

var

void

while

Зарезервированные слова Flash 4, которые начиная с версии Flash S используются мало.

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 223

В приведенном ниже списке перечислены слова, которые в будущем могут стать зарезер-

вированными. Сейчас их использовать можно, но в дальнейшем программа может и не рабо-

тать, если в следующей версии данное слово станет "собственностью"

abstract

boolean

byte

catch

char

class

const

debugger

double

enum

export

extends

final

finally

float

goto

implements

import

int

interface

long

native

package

private

protected

public

short

static

synchronized

throw

throws

transient

volatile

Тем же самым правилам необходимо следовать при присвоении имен другим элементам, в

том числе и при именовании экземпляров видеоклипов. Несмотря на то что официально

имена экземпляров видеоклипов не являются идентификаторами, они часто выступают в этой

роли при использовании в ActionScript, и, таким образом, несоблюдение правил также может

привести к возникновению ошибок.

Возникли проблемы с кодом, который содержит имя видеоклипа? Обратитесь к

разделу "Возможные проблемы" в конце этой главы.

Многие программисты следуют указанным выше правилам и при именовании других

элементов, таких как надписи кадров и имена слоев.

В общем идентификаторы ActionScript не чувствительны к регистру символов. Это озна-

чает, что приведенные ниже выражения не определяют разные переменные.

= 6

=

=

Недостаточная чувствительность к регистру символов, требующаяся для совместимости с более

ранними версиями Flash и позаимствованная из стандарта ЕСМА-262, является камнем преткно-

вения для программистов JavaScript, привыкших к абсолютной чувствительности к регистру. При

работе с JavaScript приведенные выше выражения объявляют три различные переменные.

В ActionScript чувствительными к регистру символов являются только перечисленные

выше зарезервированные слова.

Говоря о чувствительности к регистру, упомянем об одном правиле, связанном с этим во-

просом, которому следуют большинство программистов: обычно идентификаторы начинаются

со строчного символа. Единственным исключением являются имена функций конструктора.

Подробная информация о функциях конструктора приведена в главе 15

"Объединение предложений в функции", в главе 19 "Использование

встроенных базовых объектов" и в главе 21 "Упаковка данных и функций с

помощью пользовательских объектов".

Чтобы программы были более удобочитаемыми, желательно следовать одним и тем же

правилам применения прописных символов.

224 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ГРУППИРОВАНИЕ ДАННЫХ по ТИПАМ

Главное, что нужно знать о переменной, — к какому типу данных она относится. Напри-

мер, многие проблемы возникают из-за использования текстовых строк, там где

требует наличия цифр, и наоборот.

Зачастую из-за использования неправильного типа данных возникают совер-

шенно загадочные ошибки. Обратитесь к разделу "Возможные проблемы" в

конце этой главы.

Отследить типы данных может быть достаточно сложно, потому что иногда ActionScript,

чтобы программа работала надлежащим образом, автоматически преобразовывает их. Чтобы

указать, какие типы данных следует применять в том или ином случае, необходимо понимать

логику выполняемых преобразований.

ДЕВЯТЬ типов ДАННЫХ ACTIONSCRIPT

В ActionScript имеется девять основных типов данных. Пять элементарных типов данных,

наиболее среди которых являются number (число) и string (строка),

содержат только один примитивный элемент данных. Например, свойство видеоклипа

Frame содержит только одно число, которое указывает текущее положение вос-

производящей головки на временной шкале. Аналогичным образом, свойство видеоклипа

_name содержит одну текстовую строку.

Четыре составных типа данных (object, array, movieclip и function) содержат не-

сколько элементов данных. Например, видеоклип содержит свойства _currentFrame,

_name, _property и др.

Определить тип данных любой переменной можно с помощью оператора typeof сле-

дующим образом:

typeof выражение

Рассмотрим следующий пример:

var х =

trace (typeof x) // отображает в окне вывода данных "number"

Манипулирование данными с помощью операторов

Наиболее распространенный и основной способ манипулирования данными заключается в ис-

пользовании операторов. Операторы — это символы и ключевые слова, которые принимают

одно или несколько существующих значений в качестве операндов и возвращают новое значе-

ние. Многие операторы, такие как "плюс" (+), "минус" (-) или "разделить" (/), знакомы еще из

школьного курса математики. Подробно операторы рассматриваются в главе 13

"Использование операторов".

В табл. приведены типы данных ActionScript с соответствующими возвращаемыми зна-

чениями примеры назначения переменных и разрешенные значения типов данных.

В примерах назначения переменных, приведенных в табл. подразумевается, что объ-

ект, массив, видеоклип и функция уже существуют.

В главе 15 "Объединение предложений в функции" рассматривается процеду-

ра создания объектов (включая массивы, видеоклипы и функции).

Видеоклипы создают путем перетаскивания символов с панели Library (Библиотека) в ра-

бочее поле либо с помощью функции attachMovie duplicateMovieClip О или

ГЛАВА 12. УПРАВЛЕНИЕ ДАННЫМИ и ТИПАМИ ДАННЫХ 225

ТАБЛИЦА 12.1. Типы ДАННЫХ ACTIONSCRIPT

ТИП ДАННЫХ

number (число)

string (строка)

Boolean (булевы)

object (объект)

array (массив)

null (пустой)

(видеоклип)

f unct ion (функция)

(неопределенный)

"number"

"string"

"boolean"

"movieClip"

"function"

"undefined"

ПРИМЕР

НАЗНАЧЕНИЯ

var x

var x

var x

var x

var x

var x

var x

var x

var x;

= 6;

= true

=

null

« myPunc

РАЗРЕШЕННЫЕ ЗНАЧЕНИЯ

Любое число

Любая строка символов

true,

Любой объект

Любой массив

null

Любой экземпляр

видеоклипа

Любая функция

Мощь ЧИСЕЛ

Большинство фрагментов фильма, в котором применяются управляются по-

средством чисел. Анимация с использованием в первую очередь зависит от эф-

фективности манипулирования числами. Например, из объекта MovieClip

13 являются числовыми. Посредством чисел регулируется прозрачность, местоположение,

вращение, масштабирование, размеры и положение видеоклипа во временной шкале.

Первым шагом на пути к эффективному использованию чисел является понимание того,

какие типы значений представляет тип данных number. Двумя наиболее важными типами

чисел являются целые числа, не имеющие дробной составляющей (например, -10, 0, 2, и

числа с плавающей точкой, имеющие дробную составляющую (например, -10.2, .01, 635.8916).

На заметку Во Flash используется представление дробных чисел с двойной точностью. Это

означает, что числа могут иметь до 15 значащих Таким образом, при экс-

поненциальном представлении чисел во Flash в их основании никогда не будет

больше 15 цифр.

К типу данных number также относятся приведенные ниже специальные значения.

• NaN ("He число") обозначает нечисловые данные в элементе типа number,

• Number — наибольшее число, которое можно представить в ActionScript

(1.79769313486231е+308).

• — наименьшее положительное число, которое можно предста-

вить в ActionScript (5e-324).

• (Положительная бесконечность) — неопределенное большее, чем

• -Infinity (Отрицательная неопределенное число, меньшее, чем

• Константы, такие как pi и квадратный корень из 2; могут храниться как свойства объ-

екта Math.

226 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Подробная информация об объекте Math и об управлении числами с помощью

встроенных функций приведена в главе 19 "Использование встроенных

базовых объектов".

Экспоненциальное представление чисел

Для представления очень больших или очень малых дробных чисел (как положительных, так и

в ActionScript используется экспоненциальное представление. Число в нем

представлено в виде основания (мантиссы) и порядка, разделяемых буквой е (экспонентой).

Чтобы получить основание, поставьте десятичную точку после первого разряда числа и отбрось-

те все старшие и младшие нулевые разряды. Например, числа 123 оо о ооо оо о ооо и

имеют одинаковое основание: Порядок числа указывает, на

сколько позиций была смещена десятичная точка. Таким образом, указанные выше числа мож-

но представить в следующем виде: и Экспоненциальным представлени-

ем чисел можно воспользоваться и в программах. Например, вместо числа 126 ооо можно за-

писать 126е+3.

Числами можно управлять с помощью операторов или встроенных функций.

Подробная информация об управлении числами с помощью операторов пред-

ставлена в главе 13 "Использование операторов".

СТРОКИ

Если пользователь вводит данные в программе, вы получаете строковую переменную. Ес-

ли вы извлекаете имя видеоклипа, то тоже имеете дело со строкой. Фактически из шести не-

числовых свойств видеоклипа четыре являются строками. Ключом к эффективному про-

граммированию на языке ActionScript является умение манипулировать строками.

Определить тип данных (строка) очень легко: строкой является любая последова-

тельность буквенно-цифровых символов, заключенных в кавычки.

На Термин "буквенно-цифровой" означает, что тот или иной элемент состоит из

буквенных и цифровых символов, а также знаков препинания, математических

и других условных символов, используемых в компьютерных системах.

Для представления текста или вводимых пользователем строк Flash MX использу-

ет двухбайтовый набор символов DBCS или набор символов Unicode. Последний

необходим для отображения множества языков, в том числе китайского и хинди.

В качестве подмножества в Unicode входят наборы символов, которые можно ко-

дировать одним байтом, например (относящийся к стандарту ISO-8859). Набор

1 удовлетворит потребности пользователей, работающих на обычных компьютерах и на од-

ном из распространенных западноевропейских языков (английском, французском, немец-

ком, итальянском, португальском, испанском и др.). Flash MX (как и Flash 5) поддерживает

кодировку использующуюся для отображения японских символов. Данная коди-

ровка является эквивалентом двухбайтового набора символов, предназначен-

ного для японского языка.

На С подробной информацией о наборах символов Unicode, и

можно ознакомиться на org.

И еще несколько замечаний, касающихся символов Unicode.

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 227

• Чтобы отобразить шрифт, например набор символов для китайского, японского, ко-

рейского языков, хинди или иврита, необходимо, чтобы этот шрифт был установлен

на компьютере или был внедрен во Flash-фильм.

• Чтобы загрузить символы Unicode из файла, в том числе из XML-файла, он должен

быть сохранен в формате Unicode. В наиболее полнофункциональных текстовых ре-

дакторах есть опция сохранения в виде текста Unicode. К примеру, если вы хотите за-

грузить символы Unicode из файла обязательно сохраните его как текст

Unicode:

var = new

• Чтобы получить возможность отображения символов Unicode, не загруженных из файла,

можно воспользоваться недокументированным свойством В

приведенном ниже примере показано отображение строки двухбайтовых символов.

= true;

Для создания Flash-фильмов с динамической загрузкой любых из миллиона возможных

символов Unicode можно воспользоваться Flash-генератором многосимвольного набора,

При этом подразумевается, что у вас есть шрифт с нужными символами, который

можно внедрить в SWF-файл.

Чтобы в ActionScript создать код символов Unicode, используются длинные или короткие

управляющие последовательности Unicode. В длинной форме используются символ обратной

косой черты (\) и и, за которыми следуют четыре цифры. В ко-

роткой форме используется символ обратной косой черты (\) и символ х, за которыми сле-

дуют две шестнадцатеричных цифры. Приведем несколько примеров:

trace // знак английского фунта .

trace // знак английского фунта стерлингов: .

trace // символ авторского

trace // символ авторского права: ®

Строки можно объединять, или связывать, с помощью оператора "плюс" (+), как показа-

но ниже.

trace ("This // отображается "This

В строках также применяются оператор присваивания (=), оператор равенства (==), опе-

ратор неравенства (!=), оператор строгого равенства (===) и оператор строгого неравенст-

ва Например:

х =

у =

trace (х // "true" -

trace (х // "true"

trace (х // "false"

trace (х // "false"

Строками манипулируют с помощью операторов и встроенных функций.

Подробная информация о манипулировании строками с помощью операторов

представлена в главе 13 "Использование операторов".

228 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

О манипулировании строками с помощью встроенных функций рассказывается

в главе 19 "Использование встроенных базовых объектов".

УПРАВЛЕНИЕ и ПРИНЯТИЕ РЕШЕНИЙ с помощью БУЛЕВЫХ ДАННЫХ

Тип данных Boolean (булевы) исключительно прост, поскольку использует только два

значения: true (истина) и (ложь). Этот тип данных широко используется при приня-

тии решений, т.е. при проверке того, является ли определенное условие истинным или лож-

ным, и решения о том, что следует делать дальше. Например, приведенное ниже выражение

проверяет, является ли видеоклип myClip видимым.

if true)

Если клип является видимым, интерпретирующая программа ActionScript назначает для

выражения (myClip._visible == true) булево значение true. В противном случае для

выражения назначается значение

Аналогичным образом, следующее выражение устанавливается в значение true, если

объект не является видимым:

if == false)

Обратите внимание на то, что булевы данные в двух приведенных выражениях использу-

ются по-разному: в качестве значения свойства _visible (видимый) видеоклипа и в качест-

ве ответа интерпретирующей программы на ваши вопросы.

В приведенном ниже выражении булевы данные используются в качестве значения свой-

ства, а не в качестве ответа на вопрос.

== true; // делает клип видимым

В приведенной ниже двухстрочной программе булевых данных нет, но интерпретирующая

программа ActionScript откликнется на вторую строку, отобразив булево значение true.

х =

trace ( х == "Barbara" // "true"

Как правило, булевыми данными управляют с помощью хотя к ним можно

применить и встроенные функции.

Подробная информация об управлении булевыми данными с помощью логиче-

ских операторов приведена в главе 13 "Использование операторов".

Подробная информация об управлении булевыми данными с помощью встро-

енных функций приведена в главе 19 "Использование встроенных базовых

объектов".

ОБЛАСТИ ДЕЙСТВИЯ ЗАДАЧИ с помощью

ОБЪЕКТОВ

Тип данных j ect в ActionScript является наиболее гибким и основополагающим. Про-

стота и гибкость этого типа данных делают его пригодным для моделирования практически

всего, что можно включить в программу, какой бы ни была область действия задачи.

Структура типа данных очень проста — это неупорядоченный набор свойств, ка-

ждое из которых представляет собой пару Свойство объекта может содер-

жать любой тип данных, поддерживаемый ActionScript.

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 229

Многие операторы, широко использующиеся с элементарными типами данных, непри-

менимы к объектам и другим составным типам данных. Например, объекты нельзя склады-

вать, вычитать или умножать.

Однако есть один оператор, который применяется только к объектам, в том числе и к ви-

деоклипам. Это оператор "точка" официально именуемый "оператором доступа к свойст-

ву объекта". Для доступа к свойствам объекта можно также использовать квадратные скобки,

которые официально называются оператором В целом

формат выражения выглядит следующим образом:

object [строка имени свойства]

Обратите внимание на то, что имя свойства обязательно должно быть строкой. Это озна-

чает, что оно должно быть заключено в квадратные скобки. Таким образом,

— то же самое, что и Помните, что объекты яв-

ляются свойствами временной шкалы, в которой они находятся, поэтому существует и третий

способ написания данного

Элемент данных типа obj ect создается с помощью оператора new. Другими операторами, ко-

торые можно использовать применительно к объектам, являются delete, равенство (==),

строгое равенство (===), неравенство =), строгое неравенство ==) и присваивание (=).

Подробная информация об операторах, которые можно использовать с объек-

тами, приведена в главе 13 "Использование операторов".

Сравнение объектов

Два объекта не будут считаться равными только того, что они имеют одинаковые свойства

с одинаковыми значениями. Два объекта с разными именами будут равными только в том слу-

чае, если будут ссылаться на один и же объект.

Подробная информация о сравнении объектов приведена в главе 13

операторов".

Некоторые преимущества использования объектов в программах рассмотрены

в главе 11 "Знакомство с ActionScript".

В главе 19 "Использование встроенных базовых объектов" подробно описан

встроенный объект Object, являющийся основой всех других объектов

ActionScript.

Чтобы узнать, как создаются пользовательские объекты, обратитесь к главе 15

"Объединение предложений в функции".

МАССИВ

Массив — это упорядоченный список. Например, массив можно использовать для хране-

ния названий дней недели или месяцев. Доступ к элементам списка осуществляется посред-

ством цифровых индексов. Начальным индексом всегда является 0. В приведенном ниже

примере первому элементу массива myArray присваивается значение "Monday"

(понедельник), а затем он отображается в окне вывода данных.

= "Monday";

trace (myArray [0] // "Monday"

230 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Фактически массив является особым случаем типа данных Как и объекты, мас-

сивы создаются с помощью оператора new. Применительно к массивам используются те же

операторы, что и для объектов, за исключением оператора "точка" который зарезервиро-

ван для объектов (в том числе и для видеоклипов).

Как и в случае с типом данных для интерпретирующей программы

одинаковое содержимое не делает два массива равными. Если имена arrl и относятся

к массивам, то приведенное ниже выражение будет справедливо только в том случае, если

arrl и являются двумя именами одного и того же массива.

(arrl == arr2)

Подробная информация о сравнении массивов приведена в главе 13

"Использование операторов".

Как и объекты, массивы могут содержать любые данные ActionScript.

Цифровые индексы, использующиеся для доступа к массивам, открывают неко-

торые возможности, недоступные для объектов. Эти возможности рассматри-

ваются в главе 19 "Использование встроенных объектов".

ТИП ДАННЫХ NULL

Тип данных null разрешает только одно значение: элементарное значение null. Это

значение ставится в соответствие контейнеру данных (например, переменной, свойству объ-

екта или элементу массива) для указания того, что контейнер является пустым. Значение

null можно также присвоить использующемуся в качестве имени функ-

ции, что приведет к отключению данной функции.

Тип данных null тесно связан с типом данных Это подтверждается тем фак-

том, что интерпретирующая программа ActionScript считает их равными:

trace (null == // "true"

He существует ничего больше (кроме самого null), что интерпретирующая программа

рассматривала бы равным Например:

trace (null == // "false" - пустая строка не считается равной

null

Отличия между типами данных null и будут рассмотрены ниже, в

разделе "Использование типов данных null и

ТИП MOVIECLIP

Тип данных movieClip знаком каждому программисту, работающему с Flash. Его отли-

чительной чертой является графическое содержимое, которым можно управлять посредством

свойств видеоклипа. Таким образом, movieClip является единственным встроенным объек-

том Flash, имеющим атрибуты цвета, местоположения, вращения, масштабирования, разме-

ров и прозрачности. Добавление этого типа данных было одним из способов адаптирования

стандарта ЕСМА-262 к Flash. В стандарте ЕСМА-262 и в языке JavaScript тип данных

отсутствует.

Применительно к видеоклипам можно использовать шесть операторов: (.) и

"квадратные скобки" — для доступа к свойствам, а также операторы равенства неравен-

ства строгого равенства и строгого неравенства для сравнения. Как и в

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 231

случае с объектами и массивами, если == то myClipl яв-

ляются двумя именами одного и того же видеоклипа.

Подробно о сравнении видеоклипов

"Использование операторов".

рассказывается в главе 13

Видеоклипы не создаются с помощью оператора new и не удаляются с помощью операто-

ра delete.

Видеоклипы создаются с помощью средств графического пользовательского

интерфейса Flash с помощью методик, описанных в главе 6 "Символы,

экземпляры и элементы библиотек", или с помощью методик, описанных в гла-

ве 17 "Демонстрация мощи видеоклипов".

С помощью методик, описанных в главе 17 "Демонстрация мощи видеокли-

пов", можно создавать новые экземпляры существующих видеоклипов и уда-

лять их, а также загружать и выгружать внешние SWF-файлы.

ФУНКЦИЯ

Функция — это именованный блок кода выполняющий определенную задачу.

Ряд глобальных функций, таких как trace не являются свойствами любого из объектов.

Функции, являющиеся свойствами объектов, называются методами. Например, функция

является методом объекта вызывающим переход видеоклипа к

определенному кадру во временной шкале и его последующую остановку.

Часто функция в качестве входных значений принимает один или несколько аргументов и

возвращает элемент данных. Например, является глобальной функцией, которая в

качестве аргумента принимает любое выражение и возвращает либо булево значение true

(если выражение, трактующееся как число, принимает специальное значение NaN (не чис-

либо (в противном случае).

Хотя это не так очевидно, как в случае с массивами, тип данных фактически

также является особым случаем типа данных object. Несмотря на то что программисты

практически не используют эту возможность, функции могут иметь свойства, доступ к кото-

рым реализуется посредством тех же операторов "точка" и "квадратные скобки", которые ис-

пользуются для типа данных obj ect.

Тот факт, что функция является специальным типом объекта, выступает на первый план в

объектно-ориентированном программировании. Является ли проблемой, что функции явля-

ются объектами и одновременно могут быть свойствами объектов? Совсем нет. Объекты в ка-

честве свойств могут содержать другие объекты, в том числе и функции.

Несмотря на сходство с объектами, функции нельзя создавать или удалять программным

образом: операторы new и delete с функциями не работают. Однако отключить функцию

можно, присвоив ее имени значение null:

function foo() { вы ее видите

}

foo = null; // сейчас нет

Подробная информация о функциях, в том числе о функциях конструктора, ис-

пользующихся для создания объектов, содержится в главе 15 "Объединение

предложений в функции".

232 ЧАСТЬ РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ТИП ДАННЫХ UNDEFINED

Как и тип данных null, тип данных указывает на отсутствие данных. Однако,

если значение вы задаете самостоятельно, то значение по умолчанию при-

сваивается интерпретирующей программой в случае, когда переменной или

другому контейнеру данных не присвоено никакого значения. Например:

var middleName;

trace // "undefined"

Интерпретирующая программа ActionScript возвратит значение и в случае об-

ращения к несуществующей переменной или другому контейнеру данных. (JavaScript в таких

условиях генерирует ошибку.)

ActionScript берет свое начало в стандарте ЕСМА-22 и отличается от JavaScript своей трак-

товкой значения undefined в контексте строки. Когда интерпретирующая программа

ActionScript сталкивается со значением там, где она ожидает обнаружить строку,

обычно выполняется преобразование undefined в пустую строку Элемент данных,

равный пустой строке, отображаться не будет.

Во Flash MX есть одно исключение из этого правила — при наличии одиночного

элемента В приведенном ниже примере, который является продолже-

нием предыдущего, Flash MX отобразит значение "undefined", тогда как Flash 5

не покажет ничего (отобразит пустую строку).

trace // Flash MX отображает "undefined"

Интерпретирующая программа JavaScript в этом случае, в соответствии со стандартом

также отобразит значение

Однако в следующем примере и Flash MX, и 5 для переменной middlename будут

отображать пустую строку, а не

trace ("my // Flash отображает только "my

В этом случае ActionScript для реализации обратной совместимости с кодом программы

Flash 4 отходит от стандарта. Flash 4 не поддерживает тип данных поэтому для

выполнения проверки на отсутствие данных программисты часто используют пустую строку:

if (middleName eq

Условие не выполняется, если будет равно чему-либо, кроме пустой строки.

Из-за этой особенности для определения принадлежности данных типу пред-

почтительнее использовать оператор

if (typeof middleName == // true

Отличия между типами данных null и undefined будут рассмотрены ниже, в

разделе "Использование типов данных null и

НЕЯВНОЕ и ЯВНОЕ ПРЕОБРАЗОВАНИЕ ДАННЫХ

В языках со строгими типами данных, таких как Java, при создании или объявлении пере-

менной необходимо объявить и ее тип данных, например integer (целое число) или

(строка). Если явным образом не изменить тип данных (приведение типа), Java использует ис-

ходное объявление, генерируя ошибку, например, при попытке назначения строкового зна-

чения для целочисленной переменной.

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 233

В противоположность этому, (как и JavaScript) является языком с нестрогими

типами данных. В любом месте программы интерпретатор ActionScript по своему усмотрению

может назначить для величины любой тип данных, не требуя от программиста выполнения

явного приведения типа. Это называется неявным преобразованием типа данных.

Не все преобразования типов данных в ActionScript являются неявными. Аналогом приве-

дения типа является назначение типа данных для величины явным образом. Например, мож-

но преобразовать число в строку с помощью функции String или ToString

Подробная информация о преобразовании чисел в строку приведена ниже, в

разделе "Преобразование в строку".

Явное преобразование типа данных не будет вызывать слишком больших проблем, по-

скольку программисты осознают, что они делают. С другой стороны, программист может да-

же не знать о том, что было выполнено неявное преобразование типа, и это может привести к

неожиданным результатам.

Однако, зная правила неявного преобразования типа данных, можно избежать неприят-

ных сюрпризов и извлекать из такого преобразования максимум пользы. Мы уже сталкива-

лись с одним из этих правил, а именно с преобразованием типа в пустую строку,

когда этот тип данных используется в качестве строки.

В целом, если интерпретирующая программа ActionScript ожидает один тип данных, а вы

используете другой, то она создаст новую величину ожидаемого типа. Предположим, что в

программе содержатся следующие выражения:

х = 63 - "my dentist";

// ??

Что отобразит интерпретирующая программа? Чем для нее является переменная х?

Если попросить интерпретирующую программу ActionScript вычесть строку из числа, она

попытается выполнить эту задачу путем преобразования строки в число и последующего вы-

читания. В данном случае строку "my dentist" успешно преобразовать в число нельзя.

В таких случаях создается значение NaN. Интерпретирующая программа ActionScript преоб-

разует строку "my в значение NaN, официальным типом данных которого являет-

ся number (число). Результатом любых математических операций с участием значения NaN

также является значение NaN. Следовательно, переменная х станет равной NaN.

В данном случае неявное преобразование типа данных работает не слишком хорошо, од-

нако оно позволяет программе продолжать работать (в отличие от Java, где альтернативой не-

явному преобразованию является генерация ошибки). Опять же, интерпретирующая про-

грамма ActionScript вынуждена выполнять невозможную задачу. С другой стороны, если име-

ется такая строка, которую можно преобразовать в число, то интерпретирующая

программа ActionScript выполнит вполне полезную операцию:

X = 63 - "3";

// 60

Результатом неявного преобразования всегда является элементарный тип данных:

string (строка), number (число) или Boolean (булево значение). В табл. 12.2 представлены

правила преобразования в число.

ТАБЛИЦА 12.2. НЕЯВНОЕ ПРЕОБРАЗОВАНИЕ в число

ВХОДНОЕ ЗНАЧЕНИЕ ЗНАЧЕНИЕ ПОСЛЕ ПРЕОБРАЗОВАНИЯ

undefined О

null О

234 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 12.2

ВХОДНОЕ ЗНАЧЕНИЕ ЗНАЧЕНИЕ ПОСЛЕ ПРЕОБРАЗОВАНИЯ

Булево значение

Булево значение true

Строка чисел, которую можно преобразовать в

число. (Может содержать цифры, десятичную

точку, знаки "плюс" и "минус" и пробел.)

Не числовая строка (это может быть пустая

строка или любая строка, содержащая буквен-

ные символы, в том числе начинающаяся с

X, FF)

"Infinity"

Любой массив

Любой объект

Любой видеоклип

О

1

Эквивалентное числовое значение.

(Исключение: оператор "плюс" связывает все

строки, в том числе и числовые. См. главу 13

Использование операторов"

NaN

"Infinity"

"NaN"

"NaN"

В табл. 12.3 представлены правила преобразования в строку.

ТАБЛИЦА 12.3. НЕЯВНОЕ ПРЕОБРАЗОВАНИЕ в СТРОКУ

ВХОДНОЕ ЗНАЧЕНИЕ ЗНАЧЕНИЕ ПОСЛЕ ПРЕОБРАЗОВАНИЯ

null

Булево значение

Булево значение true

NaN

О

Любое другое числовое значение

Любой массив

Любой объект

Любой видеоклип

(пустая строка)

"false"

"Infinity"

Строка, эквивалентная числовому значению

Список значений элементов, разделяемых запятыми

Значение, возвращаемое при использовании для данного

объекта метода По умолчанию это значение

[object Встроенный объект Date возвра-

щает дату

Абсолютный путь к экземпляру видеоклипа. Например,

В табл. 12.4 представлены правила преобразования в булевы значения.

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 235

ТАБЛИЦА 12.4. НЕЯВНОЕ ПРЕОБРАЗОВАНИЕ в БУЛЕВЫ ЗНАЧЕНИЯ

ВХОДНОЕ ЗНАЧЕНИЕ ЗНАЧЕНИЕ ПОСЛЕ ПРЕОБРАЗОВАНИЯ

undefined false

null false .

NaN false

0 false

Infinity true

-Infinity true

Любое другое числовое значение true

Пустая строка false

Любая строка, которую можно преобразовать в число, true

не равное нулю

Любая строка, которую нельзя преобразовать в число,

не равное нулю. (Отход от стандарта для

поддержания совместимости с Flash 4.)

Любой массив true

Любой объект true

Любой видеоклип true

ЯВНОЕ ПРЕОБРАЗОВАНИЕ ТИПОВ ДАННЫХ

В большинстве случаев неявных преобразований типов данных вполне достаточно. Flash

автоматически преобразует данные в тип, подходящий для той или иной ситуации. Однако в

некоторых случаях легче всего получить нужный тип путем явного указания Flash, с каким

типом данных нужно иметь дело.

Например, любая информация, вводимая пользователем в предназначенное для этого по-

ле, первоначально является строкой. Если вы хотите сложить числа, представленные в двух

таких строках, то сначала их нужно преобразовать. В противном случае при использовании

оператора Flash будет предполагать, что требуется объединить две строки.

Любой элемент данных можно явным образом преобразовать в число, строку или булево зна-

чение. Преобразование будет проводиться согласно правилам, приведенным в табл.

ПРЕОБРАЗОВАНИЕ в число

Преобразование в число осуществляется с помощью глобальной Number На-

пример, если в текстовое поле пользователь вводит свой возраст, то первоначально эти дан-

ные являются строкой. Преобразование в число выполняется следующим образом:

userlAge =

Если пользователь вводит то интерпретирующая программа трактует предыдущую

строку следующим образом:

userlAge =

Интерпретирующая программа устанавливает значение переменной равным 23.

Функция Number может воспринимать десятичные числа с показателем степени:

// 0.0002637

236 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Если, как в следующем примере, строка начинается с символов Ох, числа трактуются как

greenColor = // шестнадцатеричное представление зеленого

строка

= // 65280, десятичная форма OxOOFFOO

Функции и также преобразуют строки в числа, но при этом

строки должны иметь формат: первый символ, не являющийся пробелом, должен

быть первым символом искомого числа, а первый символ после искомого числа должен быть

нечисловым. В приведенных ниже примерах используется функция parselnt

1: // извлекает 12

2: // извлекает 12

3: years") // извлекает 12

1 year olds") // извлекает 12

1 year olds") // NaN

Посмотрим на строку 1. Первым после числа стоит который является нечисло-

вым. В строке 2 показано, что первый пробел не имеет значения. В строках 3 и 4 продемонст-

рировано, что символ пробела, следующий за числом, трактуется как нечисловой. В строке 5

первый символ, не являющийся пробелом, не является первым символом числа, и поэтому из

данной строки извлекается значение NaN.

Функция parselnt может также принимать второй аргумент, указывающий основание

(порядок) результата. Например:

// извлекает 16 - шестнадцатеричное 10 (основание 16)

// извлекает 8 - восьмеричное 10 (основание 8)

// извлекает 10 - десятичное 10 (основание 10)

Функция и шестнадцатеричные числа

Функция parselnt () всегда что начинающиеся с Ох, являются шестна-

// 16

Попытка уйти от неявного представления не всегда приводит к полезным

результатам:

// О

//

Числа, начинающиеся с о (но не с Ох), по умолчанию являются восьмеричными:

8

В отличие от шестнадцатеричного представления, в данном случае можно заменить неяв-

ное восьмеричное основание и получить полезные результаты:

// извлекается десятичное число, равное 10

Не забывайте заключать строку в кавычки. Без них можно обойтись только иногда (но да-

леко не всегда):

- это не то, что нужно

В приведенных ниже примерах показано, как используется функция parseFloat

// извлекает 12,5

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 237

// извлекает 12,5

// извлекает 12,5

1 year // извлекает 12,5

and a half 1 year // NaN

В последнем примере извлекается значение NaN, так как первый символ, не являющийся

не является числовым.

ПРЕОБРАЗОВАНИЕ в СТРОКУ

Преобразование в строку можно выполнять либо с помощью метода tostring либо с

помощью глобальной функции string По умолчанию выполняется одна и та же опера-

хотя синтаксис используется разный:

var х =

// "6"

(х) // "6"

Несмотря на то что методы принадлежат только объектам, неявное преобразование типов

данных позволяет использовать метод tostring применительно к любым типам данных в

соответствии с правилами, приведенными в табл.

var х =

// "6"

у = true;

// "true"

z =

// "undefined"

// - Math является встроен-

ным объектом

Метод toString имеет дополнительный аргумент, устанавливающий основание резуль-

тата в если элемент данных является числом. Например, если число и основание одина-

ковы (например, число 6 по основанию 6, число 7 по основанию 7), то результатом будет

// "10" - истина, если х является любым числом

Ниже приведен другой пример. Обратите внимание на круглые скобки, в которые заклю-

чено число 65280.

//

НЕЯВНОЕ ПРЕОБРАЗОВАНИЕ типов ДАННЫХ

Чтобы извлечь максимум пользы от неявного преобразования типов данных, можно пуститься

на несколько уловок. Преимущество неявного преобразования заключается в очень кратком син-

таксисе. С другой стороны, при чтении кода он не всегда будет интуитивно понятным.

Например, оператор "добавить и переназначить" (+=) может выполнять ту же самую зада-

чу, что и метод или глобальная функция При использовании по-

следних более очевидно, что производится преобразование в строку, но оператор "добавить и

переназначить" является более кратким.

Любое элемент данных можно преобразовать в строку в соответствии С правилами, изло-

женными в табл. 12.3, если к нему добавить пустую строку. Так, в приведенном ниже примере

вторая строка выполняет ту же самую операцию, что и функция или метод

х = 77; является числом

х += // сейчас х является строкой: "77"

238 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Операторы "добавить и и "вычесть и переназначить"

Оператор "добавить и переназначить" (+=) добавляет второй операнд к первому и ставит полу-

ченный результат в соответствие первому операнду. Например, х += эквивалентно

х х +

Оператор "вычесть и (-=) вычитает второй операнд из первого и ставит полу-

ченный результат в соответствие первому операнду. Например, х -= о эквивалентно х = х -

о.

Таким образом, в соответствии с правилами, приведенными в табл. 12.2, вычитание 0 из

любого элемента данных преобразует этот элемент в число. Например:

х = new // х является объектом

х -= 0; является числом: NaN

ЧИСЛА и СТРОКИ ПРОТИВ числовых и СТРОКОВЫХ ЛИТЕРАЛОВ

Переменная — это абстрактное представление элемента данных. Она никоим образом не

похожа на сам элемент данных. Это означает, что переменная х может представлять любой

элемент данных, который только можно вообразить. В противоположность переменной, ли-

терал представляет элемент данных буквально, а не абстрактно. Литерал описывает элемент

данных совершенно точно, а интерпретирующая программа фактически создает

элемент данных, используя литерал в качестве проекта.

В приведенном ниже примере переменная х сначала задает числовой, а затем — строко-

вый литерал. Переменная х — одна и та же, но содержащееся в ней значение изменяется и,

следовательно, изменяется тип данных.

var х;

trace // "undefined"

// 6 является числовым литералом

х = 6; // х теперь относится к числовому литералу

trace (typeof // "number"

// "Howdy является строковым литералом

х = "Howdy // х теперь относится к строковому литералу

trace (typeof // "string"

Переменная является числом, если назначенное ей значение является числовым литера-

лом. Она также является числом, если назначенное ей значение является сложным выраже-

нием, которое можно упростить до числового литерала. Например:

х = 3 + // может быть упрощено до числового литерала: 6

Как вы видите, строки также можно образовывать с помощью сложных выражений:

х = "Howdy" + // превращается в строковый литерал: "Howdy

Литералы не могут занимать несколько строк кода. Например, приведенное ниже выра-

жение не будет корректным.

test = "Howdy

Чтобы обойти это ограничение, можно воспользоваться оператором (+):

test = "Howdy"

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 239

Строковый или числовой литерал можно использовать временно, без сохранения. Если

вы хотите повторно использовать элемент данных, представленный строковым или числовым

литералом, его нужно сохранить в виде переменной, элемента массива или свойства объекта.

Если не сохранить литерал, он будет непригоден для дальнейшего использования.

ЛИТЕРАЛЫ ОБЪЕКТОВ и МАССИВОВ

Массив — это именованный упорядоченный список, доступ к элементам которого осуще-

ствляется посредством числовых индексов. Литерал массива — это разделенный запятыми

список элементов, заключенных в квадратные скобки, без имени массива или индексов. На-

пример, ниже приведены первые три значения массива строк, представляющих собой кален-

дарные месяцы.

=

= "February";

= "March";

Соответствующий литерал массива выглядит следующим образом:

, "February" ,

Создать массив можно путем назначения для переменной анонимного, безымянного ли-

терала массива. В результате переменная становится именем массива:

months = , "February" ,

По аналогии, объектом является именованный неупорядоченный список, доступ к свой-

ствам которого осуществляется по имени. Например, ниже представлены свойства объекта

computer.

=

= "Pentium

= 1700;

На Формат литерала объекта дает хорошее визуальное представление объекта, а

синтаксис представляет собой краткий способ обраще-

ния к объектам и свойствам.

Соответствующий литерал объекта представляет собой разделенный запятыми список

свойств, заключенный в фигурные скобки, без имени объекта. Каждое свойство состоит из

имени и значения, разделенных символом двоеточия. Например:

{ monitor : "SVGA" , processor : "Pentium 4" , price : 1700 }

Для переменной можно назначить литерал объекта, в результате чего она становится име-

нем объекта:

computer = { monitor : "SVGA" , processor : "Pentium 4" , price : 1700

Как и в случае со строковыми и числовыми литералами, литералы массива и объекта будут

утеряны, если они не поставлены в соответствие переменной или не сохранены в виде эле-

мента массива или свойства объекта.

ИСПОЛЬЗОВАНИЕ типов ДАННЫХ NULL и UNDEFINED

Типы данных null и исключительно полезны для программиста, но исполь-

зуются они по-разному, несмотря на то, что оба обозначают отсутствие данных. Значение

240 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

null используется в сообщениях программиста интерпретирующей программе, а значение

зарезервировано для сообщений интерпретирующей программы программисту.

Интерпретирующая программа по умолчанию назначает тип данных

когда объявленной переменной не поставлено в соответствие никакого содер-

жимого. Такое объявление представлено в строке 1 приведенного ниже примера. Интерпре-

тирующая программа также возвращает значение при запросе типа несущест-

вующей переменной. Это продемонстрировано в строке 7.

Присваивать переменной значение разрешено, но делать это не рекомендует-

ся. (Такая нежелательная практика продемонстрирована в строке 5.) Если не назначать тип

данных самостоятельно, то когда вы увидите это значение, всегда будете знать,

что интерпретирующая программа присвоила его автоматически. Если вы хотите присвоить

переменной значение, указывающее на отсутствие данных, воспользуйтесь значением null.

Тогда всегда будет означать нечто, что не было определено.

1: var X; // правильно

2: trace (typeof // "undefined"

3: х = null; // правильно

4: trace (typeof // "null"

5: x = undefined; // разрешено, но нежелательно

6: trace (typeof // "undefined" : значение не присвоено

7: trace (typeof // "undefined" : не существует

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему я не могу из субклипа обратиться к переменной на основной временной шкале?

Если переменные хранятся в основной временной шкале, а доступ к ним производится из

субклипа, то при обращении к переменным не забудьте о префиксе _root. Это наиболее рас-

пространенная ошибка. Глядя на переменную, объявленную в основной временной шкале, вы

не видите префикса _root и поэтому забываете указать его при обращении к переменной.

Вам надоело каждый раз добавлять _root ко всем именам переменных? Задайте глобаль-

ные переменные с помощью _global. Доступ к глобальной переменной для

операций считывания можно получить с помощью только имени переменной.

Может ли использование определенной переменной или имени экземпляра видеоклипа

привести к возникновению проблем ?

Да! Чаще всего причиной ошибки является использование зарезервированного слова в

качестве имени переменной, имени функции или имени объекта. Несмотря на то что вам,

скорее всего, никогда не понадобятся все ключевые слова ActionScript, все же знать их

и избегать их использования.

Использование зарезервированного слова в качестве имени экземпляра видеоклипа мо-

жет вызвать ошибки, отследить которые будет очень тяжело. Например, 1е является зарезер-

вированным словом. И хотя во Flash разрешается использовать его в качестве имени экземп-

ляра видеоклипа, при попытке использовать это имя в ActionScript возникают проблемы.

В приведенном ниже примере видеоклип имеет имя 1е, являющееся зарезервированным

словом. Данный код обычно меняет цвет контура видеоклипа на зеленый. Однако в связи с

использованием зарезервированного имени он работать не будет.

var green = 65280 // числовой код зеленого цвета

myColor = new // является именем экземпляра видеоклипа

// ЭТОТ КОД НЕ РАБОТАЕТ!

ГЛАВА 12. УПРАВЛЕНИЕ ДАННЫМИ и ТИПАМИ ДАННЫХ 241

Методика задания цветов рассматривается в главе 20 "Использование

встроенных объектов фильмов".

Код, приведенный в предыдущем примере, просто не будет работать. А вот следующий

код тоже не будет работать, но при этом сгенерирует сообщение об ошибке (Expected a

field name after

//

Всегда выводится сообщение об ошибке, когда что-то сделано неправильно?

К сожалению, нет. Например, при использовании несоответствующих типов данных могут

генерироваться так называемые "тихие" ошибки, при которых не выводит никакого

сообщения об ошибке. Код просто не работает надлежащим образом. Например, приведенный

ниже код дублирует видеоклип создавая его копию под именем

("myClip", "myClipl",

А вот следующий код работать не будет, причем без сообщения об ошибке:

duplicateMovieClip myClipl,

В чем причина ошибки? Без заключения в кавычки myClipl не является ни текстовой

строкой, ни переменной, относящейся к строке. А для корректной работы кода требуется вы-

полнение либо одного, либо другого условия.

FLASH ЗА РАБОТОЙ: ДЕТЕКТИРОВАНИЕ ВЕРСИИ

Доступ к переменной введенной в версии Flash можно получить про-

граммным образом, помимо использования комбинаций клавиш

(Macintosh) или (Windows) (в среде проектирования при прогоне программы).

Переменную нельзя использовать для того, чтобы выяснить, установлен ли в сис-

теме Flash-плейер, поскольку она используется только внутри уже выполняющейся Flash-

программы. Стандартным способом проверки наличия в системе Flash-плейера является ис-

пользование сценария JavaScript на HTML-странице. Однако переменная $version имеет

свои преимущества. К примеру, она работает в броузерах, не поддерживающих сценариев,

или в броузерах с отключенной поддержкой сценариев.

Во Flash 5 была включена новая функция которая проверяла переменную

и возвращала результат. Но если вы хотите иметь возможность выявить наличие

плейера Flash 4, необходима функция, работающая во Flash 4.

Приведенный ниже сценарий используется для получения версии Flash-плейера с помо-

щью переменной $version и помещает три ее основных компонента (платформу, основную

версию и дополнительную версию) в переменные.

Этот сценарий можно скопировать из фильма la и вставить в кадр нового филь-

ма. Чтобы сценарий был максимально эффективным, можно сделать "ответвление" к альтерна-

тивному содержимому или, например, обновить страницу на основе искомой версии.

// Примеры строк $version:

// "WIN

// "MAC

// "UNIX 5,0,30,0"

// делит $version на 2 части, в месте (символ пробела)

// и помещает эти части в массив с именем

= ,•

242 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

// Вы

// == WIN or MAC

// ==

// назначает первый элемент переменной "platform"

platform = // WIN или MAC

// разделяет второй элемент на 4 части, в месте (символ запятой)

// и помещает эти части в массив с именем

=

// присваивает значения второго и третьего элементов соответствующим

переменным

= // 6

minorVersion =

// Это место ответвления

// на основе номера основной/дополнительной версии:

if (majorVersion 4) {

if (majorVersion >= 6) {

// Последняя и лучшая

if 5) {

// Версии плейера и 42 обрабатывают файлы лучше.

}

// Версия плейера или

if >= 4) >= {

// Версия плейера поддерживает

} else {

// Версия до

ГЛАВА 12. УПРАВЛЕНИЕ ПЕРЕМЕННЫМИ, ДАННЫМИ и ТИПАМИ ДАННЫХ 243

ГЛАВА 13

ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ

В ЭТОЙ ГЛАВЕ...

Операнды, выражения и предложения 245

Арифметические операторы 250

Побитовые операторы 254

Присваивание и сложное присваивание 260

Операторы сравнения 262

Логические (булевы) операторы 266

Условный оператор 268

Оператор "запятая" 270

Именованные операторы 271

Другие операторы 273

Возможные проблемы 274

Flash за работой: применение побитовых операторов к в крестики-нолики 275

ОПЕРАНДЫ, ВЫРАЖЕНИЯ и ПРЕДЛОЖЕНИЯ

Операторы — это символы и ключевые слова, использующиеся для изменения, доступа, соз-

дания, удаления, анализа и систематизации данных. Большинство операторов берет свое начало

в областях математики и логики. Ряд из них знакомы всем еще из школьного курса математики.

Например, оператор умножения (*) выполняет умножение двух значений, оператор суммиро-

вания (+) складывает два значения, оператор деления делит одно значение на другое.

В некоторых случаях форма оператора отличается от той, что рассматривалась

в школьном курсе математики. Например, в ActionScript оператором умножения является

звездочка (*), а не символ х. Оператором деления является косая черта (/), а символ

Несмотря на кажущуюся простоту, операторы являются чрезвычайно мощными инстру-

ментами, и их использование может потребовать определенных умений. Всего существует

52 оператора, из которых указан в табл.

Оператор super, новый для Flash MX, рассматривается в главе "Упаковка

данных и функций с помощью пользовательских объектов".

Сорок операторов разделяются на пять основных категорий.

• Арифметические операторы работают с числовыми операндами с целью получения чи-

слового результата.

• Операторы присваивания назначают результат для переменной, свойства объекта или

элемента массива. Операторы переназначения наряду с присваиванием выполняют

арифметические или побитовые операции.

Побитовые операторы работают с отдельными битами в пределах байта.

• Операторы сравнения сравнивают два значения.

• Логические (булевы) операторы сокращают выражения до булевых значений (true —

истина или — ложь) и исходя из этих значений возвращают результаты.

Есть еще 12 "единичных" операторов, не относящихся ни к одной из категорий. Это опе-

раторы запятая, условный, delete, точка, обращение к

функции, группировка, new, void и super.

ТАБЛИЦА 13.1. ОПЕРАТОРЫ ACTIONSCRIPT

ОПЕРАТОР КАТЕГОРИЯ

Арифметический

- Арифметический

Нет

[] Нет

0 Нет

Нет

Арифметический

- Арифметический

Арифметический

Побитовый

• Логический

new Нет

ИСПОЛЬЗОВАНИЕ

Постфиксное

приращение

Постфиксное отрица-

тельное приращение

Доступ к свойству

объекта

элемент/объект-свойство

Круглые скобки,

группирование

Круглые скобки, вызов

функции

Префиксное приращение

Префиксное отрица-

тельное приращение

Унарное отрицание

Побитовое НЕ

Логическое НЕ

Создание объек-

та/массива

СТАРШИНСТВО

16

16

15

15

15

15

14

14

14

14

14

14

АССОЦИАТИВ-

НОСТЬ

L-R

L-R

L-R

L-R

L-R

R-L

R-L

R-L

R-L

R-L

R-L

246 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ПРОДОЛЖЕНИЕ ТАБЛ. 13.1

ОПЕРАТОР КАТЕГОРИЯ

delete Нет

typeof Нет

void нет

Арифметический

/ Арифметический

Арифметический

Арифметический

Строковый

Арифметический

Побитовый

Побитовый

Побитовый

< Сравнение

<= Сравнение

> Сравнение

>= Сравнение

instance Нет

of

== Сравнение

Сравнение

=== Сравнение

Сравнение

& Побитовый

Побитовый

Побитовый

Логический

I | Логический

Нет

= Присваивание

+= Присваивание

Присваивание

ИСПОЛЬЗОВАНИЕ

Удаление объек-

та/свойства/элемента

массива

Определение типа данных

Возвращение неопре-

деленного значения

Умножение

Деление

Деление по модулю

Сложение (чисел)

Объединение (строк)

Вычитание

Побитовый сдвиг влево

Побитовый сдвиг

вправо со знаком

Побитовый сдвиг

вправо без знака

Меньше

Меньше или равно

Больше

Больше или равно

Определение класса

Равенство

Неравенство

Строгое равенство

Строгое неравенство

Побитовое И

Побитовое и

Побитовое ИЛИ

Логическое И

Логическое ИЛИ

Условный

Назначение

Сложение и переназна-

чение

Вычитание и перена-

значение

СТАРШИН-

СТВО

14

14

14

13

13

13

12

12

11

11

11

10

10

10

10

10

9

9

9

9

8

7

6

5

4

3

2

2

2

АССОЦИАТИВ-

НОСТЬ

R-L

R-L

R-L

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

L-R

R-L

R-L

R-L

R-L

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 247

ОКОНЧАНИЕ ТАБЛ. 13.1

ОПЕРАТОР КАТЕГОРИЯ

*= Присваивание

/= Присваивание

Присваивание

Побитовый

Побитовый

Побитовый

Побитовый

Побитовый

= Побитовый

Нет

ИСПОЛЬЗОВАНИЕ

Умножение и перена-

значение

Деление и переназна-

Деление по модулю и

переназначение

Сдвиг разряда влево и

переназначение

Сдвиг разряда вправо и

переназначение

Сдвиг разряда вправо

(без знака) и перена-

значение

Побитовое И и перена-

значение

Побитовое исключаю-

щее ИЛИ и переназна-

чение

Побитовое ИЛИ и пере-

назначение

Запятая

СТАРШИН-

СТВО

2

2

2

2

-

2

2

2

2

2

1

АССОЦИАТИВН-

ОСТЬ

R-L

R-L

R-L

R-L

R-L

R-L

R-L

R-L

R-L

L-R

ОПРЕДЕЛЕНИЕ ВЗАИМОСВЯЗЕЙ ПРОСТЫХ ДАННЫХ с помощью

ВЫРАЖЕНИЙ

Операнды — это то, с чем работают операторы. Операторы вместе с операндами образуют

выражения. Выражение является частью кода, выдающего одно значение. Ниже приведены

примеры выражений.

3 + 7 // операндами являются 3 и 7, оператором является + , результатом

является 10

"Bed операндами являются "Bed и 6, оператором является + ,

результатом является "Bed #6"

а-Ь // операндами являются а и Ь, оператором является -, результатом

является разность а и b

х++ // операндом является х, оператором является ++, результатом явля-

ется сумма х + 1

Предложение — это наименьшая единица кода которая может вызвать опре-

деленные действия программы. Часто для превращения выражения в предложение достаточ-

но символа точки с запятой, как в следующих примерах:

предложение, увеличение на 1

// полное предложение, уменьшение на 1

248 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

При использовании символа точки с запятой многие выражения становятся правильными

предложениями, но не обязательно полезными. Например, следующие предложения дают ре-

зультат, но этот результат никак не используется:

3 + 7;

а -

А вот примеры полезных выражений:

х = 3 +7; // результат хранится в переменной х

отображается в окне вывода данных

Если в предложении пропустить символ точки с запятой, интерпретирующая

программа ActionScript постарается установить, где должен стоять этот символ.

Однако пропускать данный знак пунктуации не рекомендуется, поскольку это

может привести к ошибкам.

СТАРШИНСТВО, И ГРУППИРОВАНИЕ ОПЕРАТОРОВ

Когда одно утверждение включает в себя несколько операторов, то интерпретирующая

программа ActionScript определяет, какой оператор следует рассматривать первым, согласно

следующим двум правилам.

• Каждый оператор имеет значение старшинства, указанное в табл. 13.1. Интерпрети-

рующая программа рассматривает операторы в порядке старшинства; более старшие

операторы рассматриваются первыми.

• Операторы, имеющие одинаковое старшинство, рассматриваются в соответствии с ас-

социативностью, либо слева направо (L-R), либо справа налево (R-L). В табл. 13.1 ука-

зана ассоциативность каждого оператора.

Ниже приведены примеры старшинства:

21 — умножение выполняется перед сложением

* 100 500 — отрицательное приращение выполняется перед умножением

Круглые скобки можно использовать в качестве операторов группирования для изменения

заданного по умолчанию порядка выполнения операции. Например:

(1+2) * 10 // 30 — сложение выполняется перед умножением

* 100) // 599 — умножение выполняется перед отрицательным приращением

Круглые скобки можно использовать и для того, чтобы сделать предложение более оче-

видным, даже если порядок выполнения операций при этом не меняется. Например:

1 + (2 * 10) // 21 — ничего не меняется

Ниже приведен пример ассоциативности. Операторы "сложение и переназначение" (+=) и

"вычитание и переназначение" имеют одинаковое старшинство и ассоциативность "справа

налево". Следовательно, в выражении а += Ь -= с интерпретирующая программа начнет с рас-

смотрения оператора, стоящего справа, т.е. а += -= с — то же самое, что и а += (Ь -=

В приведенном ниже примере интерпретирующая программа сначала рассматривает выражение

с, делая его равным Затем она рассматривает выражение а += Ь, делая его равным 0.

а = 1;

=

С 3;

а += Ь -= // результат: а == О, -1, с

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 249

Операторы "сложение и "вычитание и переназначение" рас-

сматриваются далее в этой главе, в разделе "Назначение и сложное назначение".

АРИФМЕТИЧЕСКИЕ ОПЕРАТОРЫ

Арифметические операторы выполняют математические операции с числовыми операн-

дами с целью получения числовых результатов. Интерпретирующая программа

автоматически преобразовывает нечисловые операнды в числа для использования с арифме-

тическими операторами.

Правила, согласно которым выполняются такие преобразования, представле-

ны в главе 12 "Управление переменными, данными и типами данных".

СПЕЦИАЛЬНОЕ ЗНАЧЕНИЕ NAN ("HE число")

Если операнд, использующийся с арифметическим оператором, нельзя преобразовать в

то интерпретирующая программа ActionScript изменит его на специальное значение

NaN ("He число").

Возможно, хотя это и бывает редко, получить значение NaN в результате манипулирова-

ния числами. Например, при делении нуля на нуль, получим значение NaN:

// NaN

Чаще всего значение NaN получается при неудачной попытке преобразования строки в

число.

Пример получения значения NaN при неудачной попытке преобразования

строки в число приведен в главе 12 переменными, данными и

типами данных". Подробнее это явление будет рассматриваться ниже, в разде-

ле "Автоматическое преобразование типов данных для сравнения".

При любой математической операции с участием операнда, значение которого равно NaN,

будет получен результат NaN.

ПОЛОЖИТЕЛЬНОЕ и ОТРИЦАТЕЛЬНОЕ ПРИРАЩЕНИЕ

Оператор приращения, представляющий собой два знака "плюс" добавляет к операн-

ду 1. Оператор отрицательного приращения, представляющий собой два знака (--),

вычитает из операнда 1. Например:

X = 1;

// теперь х равен 2

У =

// теперь у равен 1

Оба оператора приращения можно использовать в качестве префикса или постфикса, т.е.

перед операндом или после него. Если выполняется только положительное или отрицатель-

ное приращение выражения, то использование префиксной или постфиксной формы не име-

ет значения, хотя по традиции чаще используют постфиксную форму.

Однако, если в этом же выражении с полученным результатом производятся какие-либо

действия (например, сохранение его в переменной или отображение в окне вывода), то пре-

250 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

фиксная и постфиксная формы функционируют по-разному. Префиксная форма сначала из-

меняет операнд, а затем выполняет с ним какое-то действие. Постфиксная форма сначала

манипулирует операндом, а затем изменяет его.

В приведенных ниже двух выражениях операнд х всегда изменяется одним и тем же образом:

начиная со значения 2 и заканчивая значением 3. При использовании постфиксного прираще-

ния переменная у принимает первоначальное значение х, поскольку назначение выполняется

до изменения переменной х. При использовании префиксного приращения переменная у при-

нимает конечное значение х, поскольку назначение выполняется после изменения перемен-

ной х. (Это можно осмыслить следующим образом: когда оператор находится около перемен-

ной у, он влияет на нее. Когда оператор не находится около переменной у, он не влияет на нее.)

X = 2;

у = // постфикс, результатом является х: 3, у: 2

у // префикс, результатом является х: 3, у: 3

То же правило применимо и к оператору отрицательного приращения. В приведенных ниже

выражениях конечное и первоначальное значения х равны соответственно 2 и 1. При исполь-

зовании постфиксного отрицательного приращения конечным значением у является первона-

чальное значение х, а при использовании префиксного отрицательного — конечное значение х.

х = 2;

У т X: у: 2

у = // X: 1, у: 1

И снова, оператор отрицательного приращения влияет на переменную у, когда стоит ря-

дом с ней, а когда рядом с у стоит х, получаем просто значение х.

Аналогичным образом, в следующем примере показано, что оператор приращения влияет

на отображение переменной, когда он стоит рядом с ключевым словом trace:

X

// 2 , х изменяется, но не влияет на trace

X = 2;

// отображается 3 , х изменяется и влияет на trace

Операторы положительного и отрицательного приращения широко используются в цик-

лических последовательностях.

Подробная информация о циклах представлена в главе 14 "Работа с данными:

использование предложений".

СЛОЖЕНИЕ и ВЫЧИТАНИЕ

Сложение и вычитание отличаются от положительного и отрицательного приращения

следующим.

• Требуют наличия двух операндов.

• Не изменяют операнды, а просто выдают результат.

Рассмотрим следующий пример:

а = 6;

Ь = 2;

с = 1

d = а -+ с; // Теперь d равно 5. Никаких изменений а, Ь или они также

// равны соответственно 6, 2 и 1.

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 251

Предложения, содержащие несколько операторов, описывались выше, в раз-

деле "Старшинство, ассоциативность и группирование операторов".

Операндами могут быть любые выражения, преобразующиеся в вещественные числа.

Операнды, не удовлетворяющие этому условию, преобразуются в значение NaN.

Если необходимо получить абсолютную (положительную) разность двух чисел, выполните

вычитание и примените к результату функцию

с // если Ь больше а, то с все равно

// будет положительным

Подробно об объекте Math рассказывается в главе 19 "Использование

встроенных базовых объектов".

ПОЛИМОРФНЫЙ ОПЕРАТОР +

С числовыми операндами оператор + выполняет простое сложение. Например:

2 + 2 // получается 4

Однако оператор + является Это означает, что он выполняет разные опера-

ции с различными типами данных или классами. В частности, он связывает строки и склады-

вает числа. Если хотя бы один из операндов является строкой, то результатом операции также

будет строка. Например:

X = "1" + 6; II "16"

х) // string

X = 6 + // "61"

// string

Такое поведение можно изменить, явным образом преобразовав строки в числа, например:

х = 6 + // 7

trace (typeof // number

Другие арифметические операторы не являются и в результате операций

с их участием всегда получаются числа, даже если все операнды являются строками, как в

приведенных ниже примерах.

* // 21, число; умножение не полиморфно

х = "7" - // вычитание не полиморфно

х = "6" / // деление не полиморфно

ПЕРЕГРУЖЕННЫЙ ОПЕРАТОР -

Несмотря на то что оператор - ("минус" и унарное отрицание) не является полиморф-

ным, т.е. не выполняет разные операции с различными типами данных или классами, он яв-

ляется перегруженным. Это означает, что он выполняет разные операции в пределах одного

типа данных или класса в зависимости от количества операндов.

При наличии одного операнда он является оператором унарного отрицания, меняющим

знак числового значения на противоположный. Положительное значение становится отрица-

тельным и наоборот, как показано в следующем примере:

.— о

// отображается -8 (отрицательное 8)

252 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью

При наличии двух операторов мы имеем дело с хорошо знакомым вычитанием, как пока-

зано в следующем примере:

2 -2 // получаем 0 (нуль)

УМНОЖЕНИЕ и ДЕЛЕНИЕ

Операции умножения и деления могут вызвать некоторые проблемы. Они выполняются так

же, как и в обычной арифметике. Как обычно, при наличии неразрешенных операций интер-

претирующая программа автоматически преобразовывает типы данных (а не выдает

ошибки или исключения, как некоторые другие языки программирования, например Java).

В обычной арифметике при делении на нуль результат получается неопределенным, а во Flash

результатом выполнения этой операции будет значение (бесконечность):

х = 0;

У = 8;

z = у / // z равно бесконечности

Результатом деления целых чисел может быть дробное число. Об этом можно было даже

не упоминать, если бы не тот факт, что в Macromedia Lingo (язык программирования для

приложения Director) при делении целых чисел результатом всегда будет целое число. В при-

веденном ниже примере показано, что в ActionScript при делении целых чисел можно полу-

чить дробь.

X = 17;

У = 8;

z = х / // z равно

ДЕЛЕНИЕ по МОДУЛЮ

При выполнении операции деления по модулю мы получаем остаток, или модуль от опера-

ции деления. Например, результатом операции 11 % 3 будет 2, так как в результате будет

получено частное 3 и остаток 2. Ниже приведено еще примеров.

4 % 3 // 1

16 % в О

200 % 100 // О

18 % 10 // 8

10 % 9.5 // .5

Обратите внимание на последний пример, в котором показано, что в отличие от других

языков программирования (в частности, С и C++) в ActionScript при делении по модулю в

качестве операнда можно использовать числа с плавающей точкой.

Операцию деления по модулю можно также использовать для выполнения задачи через

равные промежутки времени. Например:

onClipEvent (load) {

var interval =

var frameCounter = 0;

onClipEvent

% interval ==

// Выполните какое-то действие. Оно будет происходить через каждые

пять кадров.

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 253

Приведенный ниже код фильма является модифицированной версией

кода f la, который рассматривался в главе "Знакомство с Здесь с

помощью операции деления по модулю ногу можно заставить двигаться в два раза медленнее.

{

var slowdown = 2; // добавлено

var frameCounter = 0; // добавлено

var degrees =

function 0 j degrees = 20;

function degrees = 68;

function { degrees = }

function {

if (_rotation < degrees)

if (_rotation > degrees)

{

% slowdown == // добавлено

ПОБИТОВЫЕ ОПЕРАТОРЫ

Побитовые операторы являются эффективной лаконичной альтернативой отслеживания

большого количества двоичных переменных — переменных, которые могут принимать толь-

ко два значения. При использовании побитовых операторов можно получить SWF-файл

меньшего размера. Кроме того, если часто требуется одновременно задавать или получать не-

сколько значений, то использование побитовых операторов, скорее всего, существенно по-

высит производительность программы.

К сожалению, код, в котором задействованы побитовые операторы, часто бывает труден

для чтения. Кроме того, для использования побитовых операторов необходимо хорошо знать

двоичную (по основанию 2) арифметику. Побитовые операторы никогда не являются абсо-

лютной необходимостью: того же самого результата всегда можно достичь с помощью логиче-

ских (булевых) операторов. Поэтому многие программисты избегают использования побито-

вых операторов. Однако для выполнения некоторых задач использование побитовых опера-

торов будет гораздо более эффективным методом. Вы практически наверняка выиграете, если

будете иметь их в своем арсенале средств ActionScript.

Основой двоичной арифметики является бит. Бит представляет собой единицу информа-

ции, которая может иметь только два состояния. Эти состояния можно назвать 0 и 1, вкл. и

истина и ложь, установлено и сброшено или любым другим образом, наиболее подхо-

дящим для той или иной задачи.

Двоичная арифметика ActionScript основана на 32-битовых двоичных числах, представ-

ленных на рис. Существуют два способа использования этих чисел.

• Их можно получать и задавать как целые числа, изменяя все 32 бита в одной операции.

• Каждое число можно использовать для представления двоичной переменной, кото-

рые можно получать или задавать в любой нужной комбинации.

87654321 0

Рис. 32-битовое число. Данное число равно 1, поскольку только

один младший разряд

254 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Зачем ограничиваться 31 двоичной переменной, если можно работать с 32 битами?

Об этом читайте в разделе "Возможные проблемы" в конце данной главы.

Вы можете по собственному усмотрению переходить от одной моды к другой, используя

обычные арифметические операторы для операций одного типа и побитовые операторы для

операций другого типа. Именно второй способ использования двоичных чисел (при котором

разряд представляет отдельную переменную) делает их столь мощным инструментом

краткий курс двоичной арифметики

В десятичной системе счисления (по основанию 10) значение разрядов справа налево возраста-

ет в соответствии с показателем степени числа и т.д. Каждый разряд

в 10 раз больше того, что находится справа. В двоичной системе счисления значение разрядов

возрастает в соответствии с показателем степени числа 2: 1, 2, 4, 8, 16, 32, 64 и т.д. Каждый

разряд в 2 раза больше того, что стоит справа.

Число 1 в 32-битовом представлении будет выглядеть так:

00000000000000000000000000000001

Число 2 будет представляться так:

00000000000000000000000000000010

Число 4 будет выглядеть так:

00000000000000000000000000000100

В десятичной системе счисления в каждом разряде может стоять число от 0 до 9. В двоичной сис-

теме каждый бит может содержать либо 0, либо 1. Каждая позиция является либо включенной,

либо Если она включена, к итоговому числу добавляется вес позиции. Если пози-

ция отключена, не добавляется ничего.

Рассмотрим следующие примеры:

11 в двоичном представлении равно + 1x1;

100 в двоичном представлении равно + 0x2 + 0x1;

1001 в двоичном представлении равно + 0x4 + 0x2 + 1x1.

На рис. 13.2 показан двоичный счет 0 до 8 с использованием четырех битов. Черный

овал обозначает белый овал — 0. В то же время эти биты можно рассматривать как четыре

переключателя

Исходя из этого, перейдем к рассмотрению побитовых операторов. Их можно разделить

на две основные категории. Первую мы будем называть "побитовой логической". (Обычно

операторы этой категории называют просто "побитовыми", чтобы не путать их с булевыми

логическими операторами.) Другой категорией является "битовый сдвиг".

Кроме каждый побитовый оператор, как логический, так и со сдвигом, можно комби-

нировать с операцией присваивания так же, как это делалось с арифметическими операторами.

ПОБИТОВЫЕ ЛОГИЧЕСКИЕ ОПЕРАТОРЫ

Существуют четыре побитовых логических оператора: AND NOT (-), OR и XOR

(И, НЕ, ИЛИ, исключающее ИЛИ соответственно). Оператор "побитовое НЕ" (NOT) выпол-

няет обращение каждого разряда 32-битового двоичного числа. Таким образом, если все раз-

ряды числа были установлены в то они будут обращены в 0, и наоборот.

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 255

Остальные три побитовых логических оператора сравнивают два 32-битовых двоичных

числа, и в результате получается третье 32-битовое двоичное число. Выполняется побитовое

сравнение двух исходных чисел, а результат каждого побито-

вого сравнения используется для определения значения соот-

ветствующего бита в третьем числе. Чтобы наглядно предста-

вить такое сравнение, расположите два исходных числа по вер-

тикали, а результат сравнения — внизу.

ОПЕРАТОР "ПОБИТОВОЕ И"

При использовании оператора "побитовое И" результи-

рующий бит будет равным 1 только в том случае, если оба вход-

ных бита являются 1. На рис. 13.3 это продемонстрировано на

примере числа, состоящего из четырех бит. На рисунке видно,

что в обоих входных числах 1 равняется только наименьший

значащий бит, бит 0. Следовательно, в результате только наи-

меньший значащий бит будет установлен в значение

Оператор "побитовое И" можно использовать для того, что-

бы проверить, является ли включенным определенный бит или

группа битов. Например, в приведенном ниже коде отображено

сравнение, показанное рис. 13.3.

X = 13;

У =

result = х & у; // является 1

Полученный результат позволяет ответить на вопрос о том,

является ли в переменной х включенным наименьший значащий

бит Если результатом является 1, то наименьший знача-

щий бит включен. Если результатом является 0, то наименьший

значащий бит отключен. В данном случае он включен.

Полученный результат можно рассматривать и под другим углом:

в качестве ответа на вопрос о том, являются ли включенными биты О,

2 или 3 в переменной у. Те биты, которые являются включенными в

полученном результате, будут включены и в переменной у. В данном случае это только 0.

Если установить переменную у = 3, то результат result = х & у отвечает на вопрос о

том, какой бит является включенным в переменной х: 0 или бит 1? В табл. 13.2 представ-

лены возможные результаты и их значения

0000

ООН

OfOO

•000

Рис. 13.2. Двоичный счет

от 0 до 8. Четыре разряда

можно рассматривать как

четыре переключателя

На заметку В качестве оператора "побитовое И" используется один символ тогда как

для представления оператора "логическое И" используются два символа

Например, в базе данных домов, выставленных на продажу, биты 0 и 1 могут представлять

соответственно гараж и навес для автомобиля. С помощью всего одного запроса вы сможете

выяснить, имеет ли искомый дом либо то, либо другое (и если да, то что именно), или же он

имеет и то и другое, либо вообще ничего.

С помощью двух битов можно проверить четыре возможные комбинации. С помощью трех

битов можно проверить восемь комбинаций. Каждый дополнительный бит удваивает число

комбинаций, возможных для проверки. Сколько комбинаций можно проверить с помощью

бита? Ответом будет: 2 в степени т.е. 2 147 483 648! (Проверьте этот результат во Flash с по-

мощью операции trace pow Совсем неплохо для четырех байт информации.

256 ЧАСТЬ РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ТАБЛИЦА 13.2. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРА "ПОБИТОВОЕ И" для ОПРЕДЕЛЕНИЯ состояний

РЕЗУЛЬТАТ

3

2

1

О

Вкл.

Вкл.

Выкл.

Выкл.

Вкл.

Вкл.

Выкл.

ОПЕРАТОР "ПОБИТОВОЕ ИЛИ"

При использовании оператора "побитовое ИЛИ" результирующий бит будет равен если

хотя бы один из входных битов установлен в значение как показано на рис. 13.4.

Оператор "побитовое ИЛИ" используется для включения определенного бита или группы

битов. Например, рассмотрим код, описывающий рис. 13.4 :

X

У = 1;

| у; // результатом будет result 13

Нулевой бит в итоговом значении будет включен, независимо от того, какое значение

имеет переменная х. В приведенном примере данный бит в переменной х уже включен, по-

этому результат будет таким же, как и исходное значение х.

Если биты в операндах х и у представляют собой газетные статьи в базах данных, то пре-

дыдущий пример будет давать ответ на вопрос о том, содержится ли хотя бы в одной из баз

данных статья, представленная битом 0. Если нулевой бит в результате является включенным,

то одна из баз данных содержит необходимую статью. Если нулевой бит отключен, то статьи

нет ни в одной из баз данных.

На В качестве оператора "побитовое И" используется один (|), тогда как

для представления оператора "логическое И" используются два символа

Оператор "побитовое ИЛИ" можно рассматривать с точки зрения того, что он объединяет

два набора данных. Например, в примере с двумя базами данных в результате будут скомби-

нированы х и у.

Рис. 13.3. Результирующий бит при

оператора "побитовое И" будет

равняться 1 только в том случае, если оба

исходных бита установлены в 1

Рис. 13.4. При использовании оператора

"побитовое ИЛИ" результирующий бит

будет равен 1, если хотя бы один из вход-

битов установлен в значение 1

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 257

ОПЕРАТОР "ПОБИТОВОЕ ИСКЛЮЧАЮЩЕЕ ИЛИ"

Результатом оператора "побитовое исключающее ИЛИ" будет 1 только в том случае, если

входные биты различны (рис. 13.5). Для обозначения данного оператора используется сим-

вол вставляемый на большинстве клавиатур с помощью комбинации клавиш

Оператор "побитовое исключающее ИЛИ" использует-

ся для обращения определенного бита или группы битов.

Например, рассмотрим код, описывающий рис. 13.5:

X 1 3

result = х // result = 12, поскольку

значащий бит

// переключается из 1 в О

В результате бит 0 будет обращен, независимо от того,

какой была переменная х. В данном случае бит 0 в х был Рис. 13.5. Результатом

а в результате является выключенным. "побитовое исключающее

Если в программе имеются кнопки ИЛИ" будет 1 только в том

то посредством одного 32-битового дво- если входные биты различны

ичного числа можно отслеживать состояние до кнопки и

с помощью оператора "побитовое исключающее ИЛИ" одновременно задавать их состояния.

ОПЕРАТОР "ПОБИТОВОЕ НЕ"

Оператор "побитовое НЕ" обращает каждый разряд 32-битового двоичного числа. Если в

программе имеются кнопки включения/выключения и их состояния представлены 32-

битовым двоичным числом, то с помощью оператора "побитовое исключающее ИЛИ" можно

посредством одной операции переключить все кнопки.

ИСПОЛЬЗОВАНИЕ НЕСКОЛЬКИХ ПОБИТОВЫХ ЛОГИЧЕСКИХ ОПЕРАТОРОВ

В одном выражении можно использовать несколько побитовых логических операторов:

X =

У =

Z = 2;

result = х (у | z) = 1

Последняя строка дает ответ на вопрос о том, какой бит в х является включенным: бит О

или бит 1? Включенным в х будет тот бит, который является включенным в результате.

С теми же значениями х, у и z, что и в предыдущем примере, следующий код дает ответ

на вопрос о том, являются ли 0 и бит 1 включенными в х.

result = (х & (у | (у | ложный

В данном случае бит 0 является в х включенным, а бит 1 — нет, поэтому результатом явля-

ется значение false.

Чтобы понять логику данного выражения, считайте, что (у | представляет собой неко-

торую группу битов; назовем д. Тогда (х & (у | является наложением х

— биты, которые включены в обеих переменных. Это означает, что в результате будет по-

лучен ответ на вопрос, является ли перекрытие между х и g равным д. Если это так, то это

аналогично тому, что все биты, включенные в д, являются включенными в х. В рассмотрен-

ном случае у установлен в значение 1, т.е. 0 у является включенным. Переменная z

равна 2, т.е. бит 1 в z является включенным. Таким образом, в рассматриваемом примере д

включает в себя и 0, и бит 1. Но х установлен в значение 13, где биты 3, 2 и 0 являются

включенными, а бит 1 — нет. Таким образом, перекрывающимся между х и g является толь-

ко бит 0, который не равен д.

258 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ОПЕРАТОРЫ со сдвигом БИТА

Три оператора со бита перемещают значение каждого бита на определенное ко-

личество позиций вправо или влево. Биты в конце строки отбрасываются и теряются.

Сдвиг бита на одну позицию вправо эквивалентен делению на 2. Сдвиг на один влево

эквивалентен умножению на 2.

Сдвиг битов аналогичен десятичной системе счисления, в которой сдвиг разряда влево

или вправо соответствует делению или умножению на 10. Например, если начать с числа 100

и сдвинуть разряд на одну позицию вправо, получим значение 10. Иными словами, выполня-

ется деление на 10. Последний 0 в числе 100 отбрасывается и теряется.

Аналогичным образом, если начать с двоичного числа 100 (которое равно 4 в десятичной

системе счисления) и сдвинуть разряд на одну позицию вправо, то получим двоичное 10 (2 в

десятичной системе). В данном случае было выполнено деление на 2. Последний 0 в двоич-

ном числе 100 отбрасывается и теряется.

При использовании операторов со сдвигом бита для деления или умножения целых чисел

программа выполняется значительно быстрее, чем с помощью операторов деления (/) или

умножения (*). В некоторых случаях разница в скорости составляет 30%. Конечно, операто-

ры со сдвигом бита для умножения или деления можно применять только в том случае, если

делитель или множитель являются числом 2 в какой-то степени. Если выполнять сдвиг бита с

нечетным операндом, то результат будет округлен в меньшую сторону, поскольку наимень-

ший значащий бит отбрасывается.

СДВИГ ВПРАВО СО ЗНАКОМ

Оператор "сдвиг вправо со знаком" выполняет деление на 2 и отбрасывает остаток. Он со-

храняет знак отрицательного числа.

Сохранение знака при сдвиге бита

При задании дополнительного кода отрицательного числа в двоичной системе счисления ком-

пьютеры устанавливают старший значащий бит в значение 1. Для положительных чисел стар-

ший значащий бит установлен в значение 0.

При сдвиге разряда двоичного числа вправо, биты отбрасываются справа, а слева добавляются

новые. Для отрицательных чисел оператор побитового сдвига вправо со знаком устанавливает

новые биты в значение 1. Для положительных чисел он устанавливает новые биты в значение 0.

Таким образом, знаки чисел сохраняются даже при обращении процесса и выполнении сдвига

влево на то же количество разрядов, что и вправо.

Операция по выполнению сдвига вправо со знаком имеет следующий формат:

result = количество разрядов

Рассмотрим приведенные ниже примеры сдвига вправо со знаком.

X = 10;

у = 1;

result = х у // result = 5, 10 / 2, без остатка

X =

У = 2;

result х у // result = 3, 13 / 4, округление в

// меньшую сторону

X =

У =

result х у // result = -4, т.е., -13 / 4, округление в меньшую

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 259

На заметку В качестве оператора сдвига битов вправо со знаком используется символ

СДВИГ ВПРАВО БЕЗ ЗНАКА

Оператор сдвига вправо без знака смещает разряды вправо. Однако в отличие от операто-

ра сдвига вправо со знаком, он всегда добавляет слева нули. Следовательно, результат всегда

будет положительным числом.

На В качестве оператора сдвига битов вправо без знака используется сим-

вол

по выполнению сдвига вправо без знака имеет следующий формат:

result = значение разрядов

Данный оператор удобен при выполнении так называемой "настройки битов". Однако он

не имеет очевидных арифметических применений. Для положительных чисел он дает тот же

самый результат, что и оператор сдвига вправо со знаком. Для отрицательных чисел значе-

ние 1, установленное для старшего бита и сдвинутого вправо, дает результаты, которые не

связаны с исходным числом очевидным образом. Например:

X =

У = 1;

result = х у // result =

СДВИГ ВЛЕВО СО ЗНАКОМ

Оператор сдвига влево со знаком выполняет умножение на 2 с сохранением знака отрица-

тельного числа.

Операция по выполнению сдвига влево со знаком имеет следующий формат:

result = значение количество разрядов

На заметку В качестве оператора сдвига битов влево со знаком используется символ

Рассмотрим следующие примеры сдвига влево со знаком:

X = 13;

У = 2;

result = х у // result = 52, т.е. 13 * 4

х =

у = 1;

result = х у // result = 20, т.е. 10 * 2

х =

У =

result = х у // result = -52, т.е. -13 * 4

ПРИСВАИВАНИЕ и СЛОЖНОЕ ПРИСВАИВАНИЕ

Оператор присваивания (=) сохраняет результат выражения в переменной, в элементе

массива или свойстве объекта. Ниже приведены соответствующие примеры.

х = 2; // сохраняет число 2 в переменной х

= 12-м элементом массива месяцев является

260 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

// "December" (декабрь)

= // свойством color (цвет) объекта car

// OxFFOOOO (красный)

Десять операторов присваивания являются кратким представлением комбинации

оператора присваивания с различными арифметическими или побитовыми операторами. На-

пример, оператор "сложения и переназначения" (+=) объединяет присваивание (назначение) и

сложение. Каждый оператор сложного присваивания выполняет операцию с двумя операндами

и сохраняет результат в левом операнде. Например, выражение х += 2 означает, что произво-

дится сложение 2 их, а результат сохраняется х. Это выражение х х + 2.

В табл. 13.3 перечислены операторы сложного присваивания с примерами и эквивалент-

ными выражениями.

ТАБЛИЦА 13.3. ОПЕРАТОРЫ сложного ПРИСВАИВАНИЯ

Имя

Сложение и пе

Вычитание и

переназначение

Умножение и

переназначение

Деление и

переназначение

Деление по модулю и

переназначение

ОПЕРАТОР ПРИМЕР

+= i += 2

-= balance -= debit

*= rate *= increase

/= price /= discount

frameCounter %

slowdown

ЭКВИВАЛЕНТНОЕ

ВЫРАЖЕНИЕ

i -I 2

balance =

balance - debit

rate rate *

increase

price = price /

discount

frameCounter =

frameCounter %

Сдвиг бита влево и

переназначение

Сдвиг бита вправо и

переназначение

Побитовое И и

переназначение

Побитовое

исключающее ИЛИ и

переназначение

Побитовое ИЛИ и

переназначение

answer num

result 1

test 4

on

answer = answer

num

result = result 1

test = & 4

finalMask =

finalMask

initialMask

= onOff I on

Операторы сложного присваивания не являются более эффективными с точки зрения вы-

числений по сравнению со своими более длинными эквивалентами. Они также не приводят к

уменьшению размеров SWF-файла и используются исключительно для краткости написания.

Отметьте, что выражение

X *= У + 2

эквивалентно

х = х * (у +

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 261

а не выражению

х = х * у + z,

эквивалентному следующему:

х = (х * у) + z.

ОПЕРАТОРЫ СРАВНЕНИЯ

Операторы сравнения используются для определения того, являются ли два операнда рав-

ными или является ли один операнд больше или меньше другого. Существует восемь опера-

торов сравнения.

• Равенство (==)

• Неравенство =)

• (===)

• Строгое неравенство

• Меньше (<)

• Меньше или равно (<=)

• Больше (>)

• Больше или (>=)

Первые четыре оператора называют операторами равенства, а последние четыре опера-

торами Все восемь операторов сравнивают две строки или числа и возвращают

значение true (истина) или (ложь), в зависимости от того, является ли отношение,

указанное между операндами, точным или нет.

Кроме того, операторы отношения возвращают значение если хотя бы один

из операндов имеет значение NaN ("He число"). Операторы равенства и строго равенства в

этом случае возвращают значение а операторы неравенства и строгого неравенства —

значение true.

ОПЕРАТОРЫ РАВЕНСТВА

Операторы равенства (==) и строгого (===) выполняют проверку на "тождество",

но оператор равенства при необходимости перед выполнением сравнения выполняет преобра-

зование типов данных. Для оператора строгого равенства важно, чтобы операнды уже относи-

лись к одному типу данных, в противном случае он возвращает значение

Например, выражение null == a null ===

но. В связи с тем, что null и относятся к разным типам данных, они не являются

строго равными. Однако оператор равенства преобразует оба их в 0, так что они будут равными.

Операторы неравенства и строгого неравенства (!==) выполняют операции, проти-

воположные операторам равенства и строгого равенства. Если первые возвращают значение

true, то последние — (и наоборот).

Оператор равенства, вероятно, является наиболее распространенным оператором и одно-

временно источником наиболее распространенных ошибок. Дело в том, что очень часто вме-

сто него указывают один знак равенства (оператор присваивания), тогда как нужны два

(оператор равенства).

Подробно об ошибке, связанной с тем, что пользователи путают оператор ра-

венства с оператором присваивания, рассказывается в разделе "Возможные

проблемы" в конце этой главы.

262 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Числа сравниваются математически. Например, результатом приведенных ниже выраже-

ний будет значение true.

1 + 2 == 3

-20 < -1

80.5 != 80

А результатом этих выражений будет значение

6 <= 5

5 >= 6

-200 > О

Сравнение строк производится с помощью "кодовых точек" набора символов ISO-8859

или Unicode. Кодовая это число или "код символа", соответствующие каж-

дому символу. Например, результатом приведенных ниже выражений будет значение true.

"А" < "а" // прописные буквы стоят перед строчными

"А" > "1" // числа стоят перед прописными буквами

<= // знак "меньше" стоит перед

"больше"

Если вы хотите использовать код символа буквы и сравнить ее с числом, воспользуйтесь

функцией charCodeAt Например, кодом символа пробела является 32. Следовательно,

приведенное ниже выражение истинно.

== 32 // true, первый (0)

// символ является пустым

Приведенное ниже выражение является ложным.

== 32

АВТОМАТИЧЕСКОЕ ПРЕОБРАЗОВАНИЕ типов ДАННЫХ для СРАВНЕНИЯ

Выражение == 32 является ложным из-за способа, которым интерпретирующая

программа ActionScript выполняет автоматическое преобразование типов данных. При работе

с элементарными типами данных интерпретирующая программа преобразовывает операнды

так, чтобы в результате выполнялось сравнение либо двух строк, либо двух чисел. Помните,

что интерпретирующая программа создает временные копии операндов и преобразовывает

именно копии. Она не изменяет исходные данные, подлежащие сравнению.

Строка символов преобразовывается в число только в том случае, если буквально рас-

шифровывается как число. Например, приведенное ниже выражение истинно.

"32" == 32

Правила преобразования других типов данных в числа представлены в

главе 12 "Управление переменными, данными и типами данных".

Во всех остальных случаях строки преобразовываются в значение NaN. Если один или оба

операнда преобразовываются в значение NaN, то результатом сравнения будет для всех

операторов сравнения, кроме = . Трудное для понимания выражение NaN == NaN яв-

ляется ложным, по крайней мере, что касается ActionScript. Кроме того, выражение

NaN ! = NaN является истинным. Все это делает операторы сравнения интуитивно непонят-

ными в части, касающейся определения того, является ли элемент данных не числом (NaN).

Не помогает и оператор — он просто выдает значение number. Чтобы проверить, от-

носится ли значение NaN, воспользуйтесь функцией :

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 263

X = NaN;

//

== // false

// number

) // true

Все вышесказанное справедливо для двух элементарных типов данных. Если при операции

сравнения хотя бы один из операндов относится к сложному типу данных (объект, массив или

функция), то интерпретирующая программа обратится к методу valueOf опе-

ранда. Если метод valueOf вернет элементарное значение, то оно и будет использоваться в

операции сравнения. В противном случае результатом сравнения будет значение

Во Flash 5 метод valueOf использовался при сравнении двух сложных типов данных.

Во Flash MX для операторов равенства и неравенства он больше не используется.

Во Flash MX, если оба операнда относятся к сложному типу данных, то операции

равенства и неравенства выполняются по ссылке. Это означает, что операнды бу-

дут равными, если они относятся к одному объекту.

Например, если и f 2 являются литералами функции, то выражение == 2) будет

истинным только в том случае, если оба литерала относятся к одной и той же функции, как в

приведенном ниже примере.

= function

fl =

= myFunc;

trace // true

В приведенном ниже примере f и f unc2 идентичны по форме, но не являются

литералами одной и той же функции.

function

function

trace(funcl == // false

Видеоклипы всегда сравнивают по именам их экземпляров, в том числе и во Flash MX.

Однако результаты, имеющие какое-то значение, дают только операторы равенства и нера-

венства. Операторы >=, <=, > и < дают значение

При выполнении автоматического преобразования типов данных предпочтение отдается

числам. Если один из операндов является числом, а другой — строкой, булевым значением,

или то нечисловой операнд преобразовывается в число. Это относится и к

нечисловым операндам, возвращаемым функциями valueOf

БОЛЕЕ НЕ ИСПОЛЬЗУЮЩИЕСЯ ОПЕРАТОРЫ СРАВНЕНИЯ ВЕРСИИ FLASH 4

Операторы сравнения Flash 4 eq, ne, gt, и ge являются эквивалентами операторов

! =, <, >, <= и >=, за исключением того, что операторы gt, le и ge используются только

со строками. Начиная с версии Flash 5 операторы Flash 4 исключены, т.е. они поддерживают-

ся, но не рекомендованы к использованию, за исключением случаев, когда файл экспортиру-

ется в формат Flash 4.

Бывают ситуации, когда исключенные объекты работают лучше новых. Вместо того чтобы

пользоваться устаревшими объектами, можно поступить мудрее и создать собственные новые

функции на основе новых операторов, но с учетом компенсации элементов, создававших

проблему.

Macromedia перестает поддерживать исключенные операторы и функции, как только это

становится возможным. Программы, в которых используется устаревший синтаксис, будут

иметь недолгую жизнь.

264 РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Использование операторов сравнения в объектах и массивах

По умолчанию операторы >=, <=, < и > не дают значащих результатов, если в качестве операн-

дов используются объекты и массивы. Вновь созданные объекты можно протестировать сле-

дующим образом:

== // false

!= о2) // true

Однако вместе взятые результаты нижеприведенных выражений приводят к заключению о том,

что объекты являются равными.

// [object Object]

// [object Object]

<= // true

>= // true

> // false

< // false

Например, пусть выражение о о2 является истинным (о больше или о2), а

о > о2 — ложным (о не просто о2) . Тогда о должно быть о2, не так

(Ничего подобного. Через мгновение вы в этом убедитесь.)

Результаты для двух вновь созданных массивов являются похожими, за исключением того, что

там, для объектов отображается [object для массивов не отображается ничего.

Однако эти результаты являются всего лишь свидетельством того, каким образом Flash проверяет

выражения, в которых используются операторы >= и <=. В обоих случаях "за кулисами" Flash для

окончательного сравнения фактически используется оператор <, а затем полученный ответ обра-

щается. Например, при проверке выражения о <= о2 Flash спрашивает: "Является ли о2 < о?"

Если нет, то программа приходит к выводу о том, что выражение о <= о2 должно быть истинным!

При проверке выражения о >= о2 Flash спрашивает "Является ли о < Если нет, то про-

грамма приходит к выводу том, что выражение о >= о2 должно быть истинным!

Эти заключения являются действительными в отношении числовых операндов или строк, кото-

рые можно упростить до числовых символов кода. Однако при использовании объектов интер-

претирующая программа преобразует оба объекта в NaN. Результат выражения (NaN < NaN)

является неопределенным:

(NaN < // undefined

В результатах сравнения интерпретирующая программа ActionScript преобразует значение

undefined в Таким в обоих случаях сравнения интерпретирующая программа

обращает результат и выводит значение true!

Ясно, что по умолчанию операторы >=, <=, > и < не дают полезных результатов, если операндами

являются объекты и массивы. Но для объектов или массивов можно создать методы valueOf

которые возвращают числовые или строковые элементарные значения, которые уже можно ис-

пользовать с операторами сравнения >=, <=, > и < и получать полезные результаты.

Обратите внимание, что в этом смысле объекты и массивы отличаются от функций. Для сравне-

ния двух функций метод valueOf не действует. Он имеет смысл только при сравнении функ-

ций с элементарными типами данных.

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 265

ЛОГИЧЕСКИЕ (БУЛЕВЫ) ОПЕРАТОРЫ

Логические операторы позволяют принять решение на основе оценки двух или более выражений.

Как правило, используются выражения, которые естественно или интуитивно дают булевы значения.

Тремя логическими операторами являются AND |) NOT (!).

Логический оператор NOT (HE) возвращает булево значение, противоположное одиноч-

ному операнду, которому он предшествует. Пусть, например, в рабочем поле имеется видео-

клип который является видимым:

// true

// false

Аналогично, если перед выражением, возвращающим значение поставить логиче-

ский оператор NOT, получим значение true. Пусть, например, есть функция

которая возвращает значение

// false

// true

Оператор AND (И) отвечает на вопрос о том, являются ли оба выражения истинными.

Оператор OR (ИЛИ) отвечает на вопрос о том, является ли одно из двух выражений истинным.

приведены примеры псевдокода, состоящие из двух выражений, которые либо ис-

тинны, либо ложны.

Пример 1

ЕСЛИ

начальным пунктом является San Francisco

И

местом назначения является Berkeley

ТО

сядьте на поезд Bay Area Rapid Transit

Пример 2

ЕСЛИ

пользователь щелкает на Cancel

ИЛИ

возникает ошибка

ТО

отменить операцию

Пример 3

ЕСЛИ

пользователь правильный пароль

И

пользователь НЕ в списке "kill"

ТО

разрешить пользователю доступ

Пример 4

ЕСЛИ

видеоклип НЕ существует

ИЛИ

видеоклип НЕ видим

ТО

сказать пользователю "Извините, этот видеоклип

266 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

На языке ActionScript приведенные примеры могут выглядеть следующим образом.

Пример 1

if == "San Francisco") (end == "Berkeley") )

=

Пример 2

if ( (input == cancel) (input == error) ) {

}

Пример 3

if ( ) ) {

grantAccess

}

Пример 4

if ( || ) {

На В качестве оператора OR (ИЛИ) используются два символа вертикальной черты.

На большинстве клавиатур для ввода такого символа нужно нажать клавишу

и клавишу с символом обратной косой черты (\).

Логику логических операторов всегда можно продублировать путем использования не-

скольких операторов if (если). Например, оператор AND (И) эквивалентен двум вложенным

выражениям Будучи преобразованными в выражения примеры 1 и 3 будут выглядеть

следующим образом:

if (start == "San Francisco") {

if (end == "Berkeley") {

wayToGo = "BART";

if {

if {

grantAccess

}

В большинстве случаев использование оператора AND или вложенных выражений if яв-

ляется исключительно делом вкуса программиста. Некоторые программисты предпочитают

использовать вложенные выражения поскольку в этом случае код является более удобо-

читаемым. При использовании оператора AND код является более кратким.

Оператор OR можно заменить выражением типа Будучи преобразованным в

такое выражение, пример 2 будет выглядеть следующим образом:

if (input == cancel) {

else if (input == error) {

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 267

В данном случае использование выражения типа не дает никаких преиму-

ществ. Оператор OR является и более лаконичным, и более удобочитаемым.

Подробная информация о выражениях приведена в главе 14

"Работа использование предложений".

Фактически выражения не совсем точно воспроизводят функциональность операторов

AND и OR. Выражения if возвращают булевы значения, true и тогда как операторы

AND и OR фактически возвращают один из операндов. Оператор AND возвращает второй опе-

ранд в случае, если оба операнда истинны, а если один из операндов ложен, то оператор AND

возвращает именно его. Оператор OR возвращает первый операнд, если он является истин-

ным; в противном случае возвращается второй операнд. Операторы AND и OR обычно ис-

пользуются в выражениях и выражение if преобразовывает возвращенный операнд в бу-

лево значение.

В табл. 12.4 приведены которым следует интерпретирующая про-

грамма ActionScript при извлечении булевых значений из операндов в выра-

жениях и OR.

В табл. 13.4 приведены примеры выражений OR, их возвращаемые значения, отображае-

мые с помощью функции trace и булевы значения, в которые преобразовываются воз-

вращаемые значения.

Обратите внимание на то, что величина, фактически возвращаемая выражением OR в ка-

ждом примере, идентична тому, что указано с одной из сторон от оператора OR. Например, в

выражении массив будучи преобразован-

ным в булево значение, принимает значение true, т.е. выражение OR возвратит массив, ко-

торый функция trace отобразит как two.

На практике значения, возвращаемые выражениями AND и OR, редко используются сами

по себе. Обычно они преобразовываются в булевы значения посредством оператора

ТАБЛИЦА 13.4. ВЫРАЖЕНИЯ OR, ВОЗВРАЩАЕМЫЕ ими ЗНАЧЕНИЯ и БУЛЕВЫ ЭКВИВАЛЕНТЫ

ВЫРАЖЕНИЕ OR

"ho" "hi"

"32" "hi"

32 "hi"

Infinity "hi"

myClip

: "green", age : 32}

|| "hi"

TRACE (ВОЗВРАЩАЕМОЕ

ЗНАЧЕНИЕ)

hi

32

32

two

[object Object]

БУЛЕВ ЭКВИВАЛЕНТ

ВОЗВРАЩАЕМОГО ЗНАЧЕНИЯ

false

true

true

true

true

true

true

УСЛОВНЫЙ ОПЕРАТОР

Условный оператор является слегка оптимизированным способом внедрения логики ус-

ловного перехода Он отличается тем, что выражение if требует наличия заявле-

ния else, в противоположность обычному оператору для которого заявление else обя-

зательным не является.

268 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Условный оператор всегда ссылается и на условие true, и на что делает его трех-

местным оператором, т.е. оператором, имеющим три аргумента. Поскольку это единствен-

ный оператор, всегда имеющий три аргумента, иногда его называют троичным оператором.

Он имеет следующий формат:

:

Первая часть условного выражения (условие) является проверкой, которая возвращает

значение true или false. Следующие две части являются возможными возвращаемыми

значениями. Если условие истинно, то оператор возвращает вторую часть. Если условие лож-

но, оператор возвращает третью часть. Рассмотрим псевдокод со следующим условием: "Если

расстояние больше 1000 миль, то следует лететь; если расстояние не больше 1000 миль, то

следует ехать".

Расстояние больше 1000 миль ? лететь : ехать

На языке этот пример может выглядеть так:

distance = 2000;

= distance > 1000 ? "fly" : "drive";

// fly

Вторая строка примера эквивалентна следующему коду:

if (distance > 1000) {

howtoGo "fly"

} else {

howtoGo = "drive"

}

В данном примере можно также использовать функции. Таким образом, условный опера-

тор будет использоваться для управления ходом выполнения программы. Например:

function {

function {

}

miles 2000;

miles 1000 ? fly( ) : drive О; // отображается "fly "

Проверить несколько условий можно с помощью вложенных условных операторов. На-

пример, предположим, вы хотите лететь, если расстояние больше 1000 миль; идти пешком,

если расстояние составляет 3 мили или меньше; или ехать на машине во всех остальных слу-

чаях. В этом случае в предыдущую программу можно добавить функцию walk (идти пеш-

ком):

function {

}

Все это можно реализовать следующими строками кода:

"расстояние больше 1000 миль?"

Если да, то

Если нет, то спросить: "расстояние больше 3 миль?"

Если да, то

Если нет, то идти пешком.

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 269

В приведенном ниже примере расстояние не превышает 3 мили, поэтому выполняется

функция walk

miles = 3

miles > 1000 ? : miles > 3 ? : // отображается "walk"

В данном случае условный оператор выполняется быстрее и результирующий размер

SWF-файла будет меньшим (хотя и ненамного), по сравнению со структурой /else.

В приведенном ниже примере оператор был бы немного проще и быстрее, но

условный оператор является более удобочитаемым.

(day == "Monday") ? fair of face") :

(day == "Tuesday") ? trace ("is full of grace") :

(day "Wednesday") ? full of woe") :

(day == "Thursday") ? far to go") :

(day == ? loving and giving") :

(day == "Saturday") ? hard for a

(day == "Sunday") ? bonny and blithe and good and :

Обратите внимание на то, что в конце концов используется выражение null. Условный

оператор всегда должен возвращать какую-то величину. Поэтому можно либо использовать

что-то, подобное null, либо в качестве действия по умолчанию выбрать одно из действий

trace. Например, чтобы сделать последнюю функцию trace используемой по умолчанию,

изменим последнюю строку следующим образом:

bonny and blithe and good and

Использование последней функции trace по умолчанию приведет в тому, что перемен-

ная day в качестве значения всегда будет иметь действительный день недели, т.е. если днем

не является никакое из значений, начиная с "Monday" (понедельник) и заканчивая

"Saturday" (суббота), то им должно быть "Sunday" (воскресенье).

Сравнение функций, выполняемых условным оператором, с идентичными

функциями, реализуемыми с помощью оператора приведено в

главе 14 "Работа с данными: использование предложений".

Оператор "запятая" используется, в первую очередь, для объявления двух и более пере-

менных в одном выражении, как в приведенном ниже примере.

var x=l,

Это эквивалентно следующему:

var

var

var

Данный оператор пригодится в случае необходимости инициализации двух и более ин-

дексных переменных в цикле как в следующем примере:

for (i = о, j = о, k 0; i < 50; i++, j i, k--) {

Результат будет следующим:

270 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

О 0 -10

1 -1 -11

2 -3 -12

3 -6 -13

Более подробная информация о циклах приведена в главе 14 "Работа с

данными: использование предложений".

Значение, возвращаемое оператором "запятая" (значение последнего операнда), в целом

полезным не является. Например, при задании цикла в средней (проверяемой) части

выражения присутствие нескольких разделенных запятыми элементов будет совершенно

бесполезным (хотя и разрешенным), поскольку оцениваться будет только последняя величи-

на. Так, в приведенном ниже примере в цикле выполняется та же функция, что и в пре-

дыдущем примере, так как часть j k, k < i игнорируется, а в каждом цикле проверя-

ется только часть i < 50.

for (i = 0, j

trace

= 0, k = -10; j >= k, k < i, i < j i, {

ИМЕНОВАННЫЕ ОПЕРАТОРЫ

Обращение к некоторым операторам осуществляется по их именам, а не по символам. Это

операторы new, delete и void.

ОПЕРАТОР NEW

Оператор new используется с функцией конструктора для создания элемента данных типа

j ect (объект) или array (массив). Так, в приведенных ниже примерах функциями конст-

руктора являются j ect Array и Date

= new

myArray = new

new

Знакомство с оператором new состоялось в главе 12 "Управление

переменными, данными и типами данных". Более подробно он описывается в

главе 15 "Объединение предложений в функции".

ОПЕРАТОР TYPEOF

Оператор typeof возвращает строку, указывающую тип данных операнда. Его формат

следующий:

typeof выражение,

где выражение — любое разрешенное выражение.

Оператор typeof представлен и подробно описан в главе 12 "Управление

переменными, данными и типами данных".

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 271

INSTANCEOF

Оператор instanceof определяет, принадлежит ли объект классу. Его формат

следующий:

класс

В класс реализуется в функции конструктора. Следовательно, операндом

в правой части должно быть имя функции конструктора. Оператор instanceof следует цепоч-

ке наследования, чтобы определить, наследует ли объект свойства того или иного класса. Так, в

приведенном ниже примере а является экземпляром поскольку а является массивом,

т.е. объектом, а все объекты являются наследуемыми из С другой стороны, а не явля-

ется экземпляром _global, так не является функцией конструктора.

а = new

instanceof // true

instanceof // true — это справедливо для всех объек-

тов

instanceof // false — _global не является функцией

конструктора

В примере б не является экземпляром Number, поскольку 6 — это прими-

тивный элемент данных, а не объект. С другой стороны, п является объектом, значение ко-

торого равно 6, и п является экземпляром Number.

trace (6 instanceof // false - 6 is not an object

n = new

instanceof // true

ОПЕРАТОР DELETE

Оператор delete пытается удалить переменную, объект (в том числе и функцию), свой-

ство объекта, массив или элемент массива. Формат его простой:

delete

Приведем пример использования оператора:

myVar = "three"; // создать переменную

delete myVar; // удалить ее

Оператор delete возвращает значение true или в зависимости от того, было ли

удаление успешным. В приведенном ниже примере оператор возвращает значение при

попытке удалить свойство второй раз.

= : b: // создать объект

trace(delete // true

// false - уже удалено

ОПЕРАТОР VOID

Я не смог найти ни одного примера из ActionScript, в котором фактически бы использо-

вался оператор void. Вероятно, его наличие объясняется исключительно вопросами совмес-

тимости со стандартом Оператор имеет следующий формат:

void (выражение)

272 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

В результате его применения интерпретирующая программа отбрасывает результаты вы-

ражения и возвращает значение

В словаре Dictionary) говорится о том, что оператор void часто

используется в сравнениях, реализуемых посредством оператора для тестирования неоп-

ределенных значений. Я не могу привести никаких примеров из реальной жизни, однако

приведенный ниже код работает.

а = undefined;

Ь

== // true

Тем не менее проще воспользоваться следующей схемой:

а = undefined;

== // true

ДРУГИЕ ОПЕРАТОРЫ

Применение остальных операторов, представленных в главе 11 "Знакомство с

ActionScript" и в главе "Управление переменными, данными и типами будет ши-

роко продемонстрировано в следующих главах. Здесь они упоминаются только для полноты

картины и быстрого ознакомления.

ДОСТУП к СВОЙСТВАМ ОБЪЕКТА: ОПЕРАТОР "ТОЧКА"

Оператор "точка" используется для обозначения свойства объекта или вложенного ви-

деоклипа. Предположим, свойство объекта устанавливается в следующее значение:

= // задание свойства значения строко-

вого типа

Ниже переменная устанавливается равной имени экземпляра видеоклипа.

clipVar = // устанавливает переменную равной

видеоклипа

Оператор был представлен в главе 12 "Управление переменными, данными

и типами данных". Подробно он описывается в главе 19 "Использование

встроенных базовых объектов" и в главе 21 "Упаковка данных и функций с

помощью пользовательских объектов".

ОПЕРАТОР "МАССИВ-ЭЛЕМЕНТ/ОБЪЕКТ-СВОЙСТВО"

Квадратные скобки могут обозначать элемент массива либо свойство объекта. Ниже при-

веден пример элемента массива.

= "January";

Подробно о массивах рассказывается в главе 19 "Использование встроенных

базовых объектов".

Ниже приведен пример свойства объекта.

= "SVGA";

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 273

Подробная информация об объектах в главе 19 "Использование

встроенных объектов" и в главе 21 "Упаковка данных и функций с

помощью пользовательских объектов".

ОПЕРАТОР "КРУГЛЫЕ СКОБКИ/ОБРАЩЕНИЕ к ФУНКЦИИ"

Помимо использования круглых скобок для группирования других операторов, их можно

применить как оператор обращения к функции для ее активизации.

Информация об использовании круглых скобок для группирования операторов

приведена выше, в разделе "Старшинство, ассоциативность и группирование

операторов".

обращения, или активизации, функции следующий:

где идентификатор — имя функции, а список — необязательный список разделенных запя-

тыми аргументов, или параметров, передаваемых функции. Оператором являются круглые

скобки, в которые заключены аргументы.

Правила образования идентификаторов описываются в главе 12 "Управление

переменными, данными и типами данных".

Процедура объявления или создания функций и получения их

мощью оператора возврата описывается в главе 15

предложений в

значений с по-

"Объединение

Подробная информация об операторе возврата приведена в главе 14 "Работа

использование предложений".

Подробная информация о функциях приведена в главе 15

предложений в функции".

"Объединение

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Если операнды не равными, то почему они тестируются как одинаковые?

Одной из наиболее распространенных ошибок в является использование операто-

ра присваивания (=) в случаях, когда необходимо использовать оператор равенства Оператор

присваивания задает переменную, элемент массива или свойство равным какому-то зна-

чению. Оператор равенства проверяет, являются ли два выражения тождественными. В данном

случае знакомство с арифметической системой обозначений работает против вас. Очень часто вы

пишете if (х е — выражение, которое интерпретирующая программа ActionScript всегда

трактует как истинное, тогда как на самом деле имеется в виду if (х == 10) — выражение, кото-

рое является истинным только тогда, когда переменная х равна 10.

Может ли использование 32 битов в побитовых операциях вызвать проблемы ?

Да! Самый старший бит, находящийся слева в 32-битовых двоичных числах, в побитовых

операциях лучше не использовать. Компьютеры используют этот разряд для представления

отрицательных чисел (как дополнительный код числа), и использование данного бита может

привести к неправильным результатам, особенно на платформах Macintosh.

274 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

FLASH ЗА РАБОТОЙ: ПРИМЕНЕНИЕ ПОБИТОВЫХ

ОПЕРАТОРОВ К ИГРЕ В КРЕСТИКИ-НОЛИКИ

Побитовые операторы могут изменить скорость игры в крестики-нолики, поскольку их

можно использовать повторяющихся операций.

Каждый раз, когда игрок делает ход, необходимо хотя бы раз проверить каждую выиг-

рышную комбинацию, чтобы определить, создал ли только что игрок какую-то из них. Если

вы хотите, чтобы компьютер играл умно, необходимо также определить, сможет ли игрок соз-

дать одну из выигрышных комбинаций при следующем ходе. Побитовые операторы позво-

ляют выполнить эти операции очень быстро.

С помощью девяти бит, представляющих девять клеток игрового поля, можно в виде всего

одного целого числа записать, размещены крестики. Аналогичным образом, в виде одного

целого числа записывается положение всех ноликов. Когда необходимо сравнить эти поло-

жения с выигрышными комбинациями (чтобы проверить, выиграл ли один из игроков), каж-

дую выигрышную комбинацию также можно представить в виде одного целого числа.

Несмотря на то что в данном случае используются обычные 32-битовые двоичные целые

числа ActionScript, задействованными будут только девять первых битов, поскольку осталь-

ные просто не нужны.

В приведенном ниже примере выигрышные комбинации игры в крестики-нолики поме-

чены символом X.

XXX 000 000 ХОО 0X0 ООХ ХОО ООХ

000 XXX 000 ХОО 0X0 ООХ 0X0 0X0

000 000 XXX ХОО 0X0 ООХ ООХ ХОО

Каждая позиция трактуется как бит, начиная 0 в левом верхнем углу. Таким образом,

биты с 0 по 8 соотносятся с полем игры в крестики-нолики следующим образом:

012

345

678

В табл. 13.5 показаны выигрышные позиции в виде десятичных (основание двоичных

(основание 2) и восьмеричных (основание 8) чисел. Обратите внимание на то, как каждый

восьмеричный разряд представлен тремя двоичными разрядами. Каждая группа из трех дво-

ичных разрядов, в свою очередь, подобна строке поля для игры в крестики-нолики.

ТАБЛИЦА 13.5. ВЫИГРЫШНЫЕ позиции в ИГРЕ в

ДЕСЯТИЧНЫЕ

7

56

448

73

146

292

84

273

ДВОИЧНЫЕ

000000111

000

001001001

010010010

100100100

001010100

100010001

ВОСЬМЕРИЧНЫЕ

7

70

700

111

222

444

124

421

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 275

В листинге 13.1 приведен пример фильма (упрощенный вариант файла

f la Ральфа Бокельберга Bokelberg), расположенного на компакт-диске). Здесь по-

казано, как можно использовать массивы чисел, представляющих восемь выигрышных ком-

бинаций, с побитовыми операторами. В файле компьютер играет за обоих

игроков, выбирая свободные клетки случайным образом. В файле f la компьютер игра-

ет за одного игрока, а за другого играет пользователь. Компьютер думает наперед и блокирует

игрока, если следующим ходом он может составить выигрышную комбинацию.

Листинг 13.1. ПРИМЕР ФИЛЬМА TICTACTOE.FLA

// abridged and adapted from охо by Ralf Bokelberg, www.QLOD.com (c)

2002

{

squares = new _root.s2,

_root.s3, _root.s4,

_root.s6, _root.s7,

function {

do {

i =

} while (i ==

i = *

if != null) return i;

else {

j = 0 j < 9;

if i = 0;

if null) return i;

function {

о |= ( 2, num

= null;

function {

x ( num

= null;

}

var true;

function {

if (whoseMove)

else

whoseMove =

}

wins = new

var о =

var x =

276 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью

function

(var i = < 8; i++

& ==

о wins

j = 8; // stop the game

& ==

wins

j =

var j = -1;

}

{

if (j < 9) {

=

ГЛАВА 13. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ 277

ГЛАВА

РАБОТА с ИСПОЛЬЗОВАНИЕ

ПРЕДЛОЖЕНИЙ

ЭТОЙ

Образование автономных предложений и управляющих блоков 279

Управление ходом выполнения программы 283

Принятие решений с помощью условных предложений и ключевого слова switch 284

Повторение действий с помощью циклов 287

Возможные проблемы 290

Flash за работой: использование цикла для создания списка 290

ОБРАЗОВАНИЕ АВТОНОМНЫХ ПРЕДЛОЖЕНИЙ

И УПРАВЛЯЮЩИХ БЛОКОВ

Предложение является "фразой" программирования, т.е. наименьшим блоком кода, кото-

рый сообщает команду выполнения интерпретирующей программе (которая счи-

тывает и исполняет код ActionScript). Следовательно, для того чтобы выполнить ту или иную

задачу, необходимо использовать предложения.

С точки зрения синтаксиса существуют два основных типа предложений: автономные

предложения и управляющие блоки. Управляющий это предложение, содержащее

другие предложения.

Существуют два типа управляющих блоков: циклический (или итеративный) и нецикли-

ческий. Циклические управляющие блоки (while, и in) повторяют со-

держащиеся в них предложения до тех пор, пока не будет соблюдено заданное условие. Не-

циклические управляющие блоки и with) исполняют содержа-

щиеся в них предложения только один раз.

ОБРАЗОВАНИЕ АВТОНОМНЫХ ПРЕДЛОЖЕНИЙ

Автономное предложение состоит из

• вспомогательного ключевого слова, одного из тех, которые зарезервированы

ActionScript для собственного использования;

нулевого или большего количества выражений и операторов;

• точки с запятой.

Самым простым автономным предложением является пустое предложение, состоящее

только из точки с запятой:

Само по себе пустое предложение ничего не значит. Однако действие оценки, доступное

при работе на панели Actions (Действие) в режиме Normal (Обычный), создает пустое пред-

ложение в качестве заполнителя, в который можно вводить необходимое выражение, подле-

жащее оценке, в том числе и пользовательскую функцию, к которой следует обратиться.

Теоретически автономное предложение может состоять только из выражения и точки с

запятой, хотя такое предложение не будет выполнять никакой задачи.

"hi"; // ничего не выполняет

Чтобы быть полезным, предложение должно что-то изменять (или вызывать функцию,

которая что-то изменяет). Зачастую изменения вызывает оператор, как, например, при зада-

нии переменной с помощью оператора присваивания:

heSays =

Часто выполнение действия определяется и ключевым словом. Автономное предложение, ра-

ботающее на основе ключевого слова, начинается с одного ключевого слова и заканчивается точ-

кой с запятой. В двух случаях, break и continue, в состав предложения больше ничего не входит:

Предложение break разрывает (отменяет) текущий циклический управляющий блок,

тогда как предложение continue повторно запускает

При использовании предложения call, которое исполняет сценарий в кадре, за ключе-

вым словом следует заключенное в круглые скобки выражение, которое преобразуется в но-

мер кадра. Так, в приведенном ниже примере выражение представляет номер буквально.

Предложение return, которое указывает на выход из функции, может опционально со-

провождаться выражением. Интерпретирующая программа преобразует выражение в значе-

ние, возвращаемое функцией. Таким образом, первое из приведенных ниже предложений

просто является выходом из функции, а второе является выходом из функции и при этом воз-

вращает значение myValue:

return

Предложение set, которое присваивает значение переменной, сопровождается заклю-

ченной в круглые скобки и разделенной запятой парой параметров: имени переменной и вы-

ражения. Интерпретирующая программа выражение в значение и присваивает

это значение переменной. Например, следующее предложение назначает значение 6 пере-

менной

280 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Подробная информация о предложении set приведена в главе 12

"Управление переменными, данными и типами данных".

В предложении var, которое объявляет и может инициализировать переменную, ключевое

слово именем переменной и опционально оператором присваивания и исход-

ным значением переменной. Так, в приведенном ниже примере первое предложение объявляет

переменную без ее инициализации, а второе — объявляет переменную и инициализирует ее:

var

var MeVar =

Подробно о предложении var рассказывается в главе 15 "Объединение

предложений в функции".

ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в УПРАВЛЯЮЩИЕ БЛОКИ

Обычный управляющий блок состоит из

• ключевого слова;

• заключенной в круглые скобки управляющей структуры;

• тела, состоящего из нулевого или большего количества предложений.

Ниже приведен пример типичного управляющего блока.

if (allDone)

В предыдущем предложении if является ключевым словом, (allDone) — управляющей

структурой, a quit — телом. Ключевое слово определяет тип предложения, управляющая

структура указывает, при каких условиях исполняется тело, а тело назначает, какие действия

выполняет управляющий блок.

Если в теле содержатся два или более предложений, они должны быть заключены в фи-

гурные скобки. Ниже приведены четыре основных формата управляющего блока.

Формат 1

( выражение )

Формат 2

( выражение ) {

}

Формат 3

( выражение )

Формат 4

( ) {

}

и представляют собой список любой длины.

Третий и четвертый форматы выполняют одни и те же задачи, но четвертый является бо-

лее удобочитаемым и представляет собой стандартный формат с использованием нескольких

предложений. Выбор первого или второго формата целиком зависит от предпочтений про-

14. РАБОТА с ДАННЫМИ: ИСПОЛЬЗОВАНИЕ ПРЕДЛОЖЕНИЙ 281

граммиста. При определении форматов управляющих блоков в данной книге используется

четвертый формат.

Предложения do-while, for-in и содержат два ключевых слова. В предложе-

ниях do-while и второе ключевое слово стоит за телом. В предложении for-in

второе ключевое слово содержится в управляющей структуре.

В табл. содержащей список ключевых слов, используемых в предложениях, приведен

каждый из применяемых форматов.

Вместе ключевое слово и управляющая структура образуют заголовок блока. В приведен-

ном ниже примере показаны числа от 0 до 49.

for i < 50; i++) {

}

Здесь for является ключевым словом, (i = i < 50; — управляющей струк-

турой, a одним предложением в теле. Следовательно,

for (i = i < 50; i++) заголовком.

ТАБЛИЦА 14.1. КЛЮЧЕВЫЕ СЛОВА ПРЕДЛОЖЕНИЙ ACTIONSCRIPT

КЛЮЧЕВОЕ

СЛОВО (СЛОВА)

break

call

do-while

for

for-in

ФОРМАТ

do

while

i

for

next)

{ предложения }

for (свойство в

объекте)

{ предложения }

function имя

ОПИСАНИЕ

Отменяет текущий цикл

Выполняет сценарий

в другом кадре

Перезапускает

текущий цикл

Повторяет предложения,

покавыражение истинно

Резервирует место для

предложения в режиме

Normal

Повторяет предложения,

пока test является

ложным

Перечисляет свойства

объекта

Объявляет функцию

УПРАВЛЕНИЕ

ходом

Цикл

Обращение

Цикл

Цикл

По умолчанию

Цикл

Цикл

Обращение

ГЛАВА

14

14

14

14

14

14

19-21

15

(параметры)

{ предложения }

if/else -

if/else

ifFrameLoad

ed

if

{ предложения

} else if

(условие2) {

предложения }

else { предло-

жения }

{ пред-

ложения }

Выполняет предложения Условный

на основе одного или

нескольких

Выполняет предложения, Условный

если кадр был загружен

14

14

282 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 14.1

КЛЮЧЕВОЕ

СЛОВО (СЛОВА)

return

set

switch/case

/default

var

while

with

ФОРМАТ

return; return

set

значение)

ие) зна-

чение блок

default :

var

имя переменной

var

имя_переменной

-

while

(выражение) {

предложения }

with

(имя объекта)

{ предложения

ОПИСАНИЕ УПРАВЛЕНИЕ ГЛАВА

ходом

Выходит из функции и Обращение 15

возвращает значение

Присваивает значение По умолчанию

переменной с динами-

ческим именем

Выполняет предложе- Условный 14

ние(я), начиная с блока,

в котором значение

выражени-

ем совпадений нет,

выполняется

Объявляет переменную с По умолчанию 15

возможным присвоени-

ем значения

Повторяет предложения, Цикл 14

пока выражение истин-

но

Выполняет предложения Цикл 19-21

в контексте заданного

объекта

УПРАВЛЕНИЕ ходом ВЫПОЛНЕНИЯ ПРОГРАММЫ

По умолчанию интерпретирующая программа ActionScript выполняет предложения по-

следовательно, сверху вниз. Однако большинство предложений может изменить ход выпол-

нения программы, заданный по умолчанию. Исключениями являются пустое предложение, а

также set и var, которые не влияют на ход выполнения профаммы.

В ActionScript имеются три типа управления ходом выполнения профаммы: условный,

циклический и вызов. Далее в этой главе основное внимание уделено рассмотрению условного

и циклического управления.

Принцип управления ходом выполнения профаммы вызов представлен предложениями

call и function. При этой схеме предложение инициирует вызов, который прерывает вы-

полнение интерпретирующей профаммой последовательной обработки. Интерпретирующая

программа исполняет блок кода в каком-то другом месте профаммы, а затем возвращается и

продолжает обработку с того места, в котором она была прервана.

Предложение call описано выше, в разделе "Образование автономных пред-

ложений".

Знакомство с функциями состоялось в главе 11 "Знакомство с ActionScript".

Подробнее они рассматриваются в главе 15 "Объединение предложений в

функции".

ГЛАВА 14. РАБОТА с ДАННЫМИ: ИСПОЛЬЗОВАНИЕ ПРЕДЛОЖЕНИЙ 283

ПРИНЯТИЕ РЕШЕНИЙ С ПОМОЩЬЮ УСЛОВНЫХ

ПРЕДЛОЖЕНИЙ И КЛЮЧЕВОГО СЛОВА SWITCH

Когда интерпретирующая программа сталкивается с условным предложением, она

оценивает условие в управляющей структуре и, если оно истинно, исполняет предложения в теле.

Существуют типа условных предложений: и Предложение

можно разбить на простые предложения if и else.

ПРЕДЛОЖЕНИЕ IF

Самым простым условным предложением является Его синтаксис очень простой:

if (выражение) {

}

Интерпретирующая программа преобразует выражение в булево значение. Если

жение преобразуется в значение true, то предложения в теле исполняются. В противном

случае они не исполняются.

Правила преобразования предложений в булевы значения приведены в

табл. 12.4.

Обратите внимание на то, что любой массив, объект или видеоклип преобразуются в зна-

чение true. Следовательно, оператор if можно использовать для проверки существования

(или несуществования) массива, объекта или видеоклипа. Например:

// если видеоклип не существует, обрабатывать условие ошибки

if {

// указывается код для обработки условия ошибки

}

// если массив задать переменную равной длине массива

if

len =

ПРЕДЛОЖЕНИЕ

Предложение фактически представляет собой два отдельных, но связанных

предложения. Предложение if сообщает интерпретирующей программе, что нужно делать,

если выражение истинно. Предложение else сообщает интерпретирующей программе, что

нужно делать, если выражение ложно. Так, в приведенном ниже примере, если массив

myArray уже существует, программа устанавливает переменную len в значение длины мас-

сива. Если массив не существует, программа сначала создает его, а затем задает переменную.

if (myArray) {

len =

} {

myArray = new

len =

284 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Для знакомства с предложениями обратитесь к главе 13

"Использование операторов". Кроме того, важная информация о комментариях и

предложениях if -else содержится в главе Знакомство с ActionScript".

ВЛОЖЕНИЕ УСЛОВНЫХ ПРЕДЛОЖЕНИЙ

Условные предложения можно вкладывать друг в друга на любую нужную глубину, что

позволяет последовательно проверить несколько различных условий. Например:

if (day == "Monday") {

fair of

} else if (day == "Tuesday") {

full of

} else if (day == "Wednesday") {

full of

}

Чтобы сделать последнее действие trace заданным по умолчанию, замените последние

три строки следующей:

} else full of

Такое же вложение можно выполнить с помощью условного оператора. Обра-

титесь за подробными сведениями к главе 13 "Использование операторов".

ПРЕДЛОЖЕНИЕ SWITCH/CASE

В предыдущем примере в каждом условном предложении выполняется проверка

на равенство переменной day. Такой же тип вложенной условной логики можно

представить с помощью предложения switch:

switch (day) {

case

fair of

break

case

traceC'is full of

break

case

full of

}

Интерпретирующая программа тестирует то же самое выражение (в данном случае пере-

менную day) на соответствие каждому набору выражений (в нашем примере это строковые

литералы "Monday", "Tuesday" и "Wednesday"). При нахождении совпадения она начи-

нает выполнять предложения, начиная с того, которое следует за совпавшим значением.

Если интерпретирующая программа не находит совпадений, она ищет предложение

Например, чтобы сделать последнее действие trace заданным по умолчанию, за-

меним последние три строки на следующее выражение:

traceC'is full of

}

Предложение default не обязательно должно быть последним в теле предложения

switch, хотя оно является таковым практически всегда.

ГЛАВА 14. РАБОТА с ДАННЫМИ: ИСПОЛЬЗОВАНИЕ ПРЕДЛОЖЕНИЙ 285

В отличие от вложенных условных предложений, рассмотренных выше, предложение

switch для сравнения значений использует оператор строгого равенства (===).

Предложение switch используется для удобства обозначений и не выполняется быстрее

вложенных условных предложений. В байтовом коде SWF-файла они выглядят совершенно

одинаково. Это позволяет достичь обратной совместимости фильмов с версией Macromedia

Flash 4. Однако в SWF-файлах версии Flash 4 используются операторы равенства тогда

как в версиях Flash 5 и Flash MX — операторы строгого равенства (===). Но это является не-

избежным, поскольку Flash 4 не может определять типы данных. Проверка типов данных яв-

ляется главной функцией определения строгого равенства.

Подробная информация о строгом равенстве приведена в главе 13

"Использование операторов".

Значениями предложений test (day) и case ("Monday", "Tuesday" и "Wednesday")

могут быть любые действительные выражения. Это означает, что ими могут быть массивы,

объекты, функции или сложные математические формулы, но при условии их преобразова-

ния в одно значение. Однако, как правило, это строковые или числовые литералы.

Обратите внимание на оператор break в каждом предложении case. Каждое такое предло-

жение указывает начальную точку кода. Оно не указывает конечную точку. Опера-

торы break сообщают интерпретирующей программе о необходимости выхода из предложения

switch после исполнения предложений, связанных с отдельным случаем. Если несколько слу-

чаев должны выполняться один за другим, операторы break могут быть опущены.

Если оператор case надлежащим образом не выполняется, обратитесь к раз-

делу "Возможные проблемы" в конце этой главы.

ПРЕДЛОЖЕНИЕ IFFRAMELOADED

Предложение является исключенным (хотя пока и поддерживается), но до

сих пор широко применяется. Предложение if FrameLoaded обеспечивает совместимость с вер-

сией Flash 3. Рекомендованная замена, _f требует наличия версии не ниже Flash 4.

Предложение FrameLoaded является специальным случаем предложения if, которое

проверяет, загрузился ли уже определенный кадр (в определенной сцене). Оно используется

при предварительной загрузке видеоклипов.

Например, если приведенный ниже код наложить на первые два кадра видеоклипа, то они

будут циклически выполняться до тех пор, пока не загрузится кадр 60. Затем видеоклип нач-

нет воспроизводиться с кадра 5.

(60) {

}

gotoAndPlay

Рекомендуемая для if FrameLoaded (60) проста:

if (_framesLoaded == 60)

С помощью предложения if FrameLoaded в код можно включить имя сцены:

60) {

Единственным ограничением является то, что предложение if FrameLoaded не поддер-

живает оператора else (тогда как такую поддержку обеспечивает). Вне-

дрить оператор в структуру можно с помощью цикла.

286 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ПОВТОРЕНИЕ ДЕЙСТВИЙ с помощью циклов

Циклические операторы while, do-while, for и используются для

повторяющихся действий. Каждый из них неоднократно оценивает условие и использует ре-

зультат оценки для того, чтобы решить, следует ли продолжать цикл в теле предложения. На-

пример, цикл можно использовать для повторяющейся проверки истечения определенного

промежутка времени либо для неоднократного дублирования видеоклипа до тех пор, пока не

будет создано определенное количество клипов.

Четыре циклических оператора тесно связаны друг с другом. Операторы while и do фак-

тически представляют два способа выполнения одной и той же задачи. Использование того

или иного из них зависит исключительно от предпочтений программиста.

программа Flash транслирует их оба в циклы while SWF-файла. Оператор являет-

ся незначительной вариацией while.

WHILE

Предложение while является основным для выполнения повторяющихся действий.

формат следующий:

while ( выражение ) {

}

Интерпретирующая программа циклически выполняет предложения до тех пор, пока вы-

ражение остается или до тех пор, пока она не столкнется с оператором break, — в

этом случае происходит выход из цикла. Например, приведенный ниже цикл while включает

в программу полусекундную (500 миллисекунд) задержку. Этот цикл составлен на основе

факта, что истекшее время является разностью текущего времени и исходного времени.

= getTimerO;

while < 500) {

= getTimerO -

}

Приведенный ниже код является наиболее распространенным применением оператора

while. Этот код создает несколько копий видеоклипа, каждой из которых присваивается имя

и которая помещается в свой уровень. В данном примере создается девять копий видеоклипа

myClip. Копия myClipl помещается на уровень 1, myClip2 — на уровень 2 и т.д., заканчи-

вая копией

var i =

while (i < 10) {

Этот пример также иллюстрирует наиболее распространенную структуру циклов while.

Счетчик (i) инициализируется перед циклом while, а в пределах цикла происходит его

приращение. Условие становится ложным, когда счетчик достигает определенного числа.

Циклы while часто используются для доступа к массивам. Приведенная ниже программа

считывает элементы из массива menu и помещает их в массив myOrder до тех пор, пока она

не доходит до элемента В этой точке программа останавливается.

ГЛАВА 14. РАБОТА с ДАННЫМИ: ИСПОЛЬЗОВАНИЕ ПРЕДЛОЖЕНИЙ 287

menu = "steak", "peas", "salad", "pie", "ice

myOrder = // пустой массив, с которого начинается выполнение

счетчика

while != "pie") {

=

// приращение счетчика

}

// cream

//

ПРЕДЛОЖЕНИЕ DO-WHILE

Тело цикла while не будет исполнено даже один раз, если с самого начала условие будет лож-

ным. Чтобы цикл while был выполнен хотя бы один раз, используется предложение do-while.

Так, приведенный ниже код выполняет ту же самую задачу, что и цикл while в предыду-

щем примере, за исключением того, что программа будет выполнять цикл даже в случае, если

элемент "pie" является первым в массиве menu, т.е. элементом menu

// ДЕФЕКТ опасность неопределенного цикла

do {

=

} while (menuti]

Однако этот код таит в себе опасность! Если является первым элементом массива

menu, т.е. menu то цикл do-while поместит "pie" в элемент массива myOrder За-

тем будет выполнено приращение i до 1 и проверено, является ли элемент menu [1] равным

"pie". Если это не так, то условие != "pie") будет истинным. При

выполнении приращения i это условие останется истинным всегда, и интерпретирующая

программа зациклится.

Подробная информация о неопределенных циклах приведена в главе 15

"Объединение предложений в функции".

Вы считаете, что попали в неопределенный цикл в обработчике клипа

enterFrame? Обратитесь к разделу "Возможные проблемы" в конце этой главы.

ПРЕДЛОЖЕНИЕ FOR

В большинстве циклов while имеется счетчик, который инициализируется и обновляет-

ся. Предложение делает инициализацию и обновление частью управляющей структуры,

заключенной в скобки. Предложение имеет следующий формат:

for условие; обновление) {

}

Ниже приведен пример использовавшегося ранее для дублирования видеоклипов цикла

while, представленного в форме цикла

for (var i = 1; i < 10; i++) {

288 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Два цикла одинаковы не только функционально: результирующий код SWF-файла для

каждого из них полностью идентичен. Следовательно, не имеет значения, какой цикл вы ис-

пользуете, while или это исключительно дело вкуса. Цикл более лаконичен. Его

структура также напоминает о необходимости включения приращения. Приращение, остав-

ленное вне цикла while, является наиболее распространенной ошибкой, ведущей к появле-

нию неопределенного цикла. С другой стороны, цикл while позволяет отдельно комменти-

ровать выражения инициализации, условия и приращения.

Ниже приведен ранее рассмотренный код доступа к массиву, преобразованный в цикл

for (i = 0; != "pie"; i++) {

=

В предложении for может содержаться несколько счетчиков. За подробной

информацией обратитесь к главе 13 "Использование операторов".

FOR-IN

Предложение нумерует или перечисляет свойства объекта. Оно является исклю-

чительно полезным для исследования существующих объектов, которые вы не задавали само-

стоятельно, таких как встроенные объекты или объекты, связанные с компонентами. Формат

предложения следующий:

for (переменная in {

}

Ниже приведен пример простого цикла in.

myObj = : "a", prop2 : :

(prop in {

:

}

/*

propl : a

prop2 : b

ргорЗ : С

*/

Предложение не выражает условия явным образом. Однако подразумевается сле-

дующее условие: "Есть ли еще какое-то свойство в заданном объекте?" Если оно есть, интер-

претирующая программа исполняет тело предложения in в контексте этого свойства.

Обратите внимание на то, что переменная в управляющей структуре содержит имя

propl), а не значение свойства (например, При наличии имени доступ к

значению получить очень легко. Например:

// а

Еще одним способом представления свойства объекта myObj . propl является выражение

myObj В данном примере rayObj [propl] сначала является эквивалентом

myObj затем — myObj t и наконец — myObj

ГЛАВА 14. РАБОТА с ДАННЫМИ: ИСПОЛЬЗОВАНИЕ ПРЕДЛОЖЕНИЙ 289

Другие примеры использования предложения приведены в главе 19

"Использование встроенных базовых объектов".

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему предложение switch не выполняет case?

Помните, что в сравнениях switch используется операция строгого равенства. Уверены

ли вы в том, что тестируемое значение и значение предложения case относятся к одному ти-

пу данных? Если в качестве тестируемого значения используется переменная, может возник-

нуть ошибка, вызванная тем, что тестируемым значением будет В качестве меры

по устранению ошибки воспользуйтесь оператором для подтверждения типа данных

тестируемого значения непосредственно перед предложением switch.

попал в неопределенный цикл в обработчике события enterFrame!

Зацикливание в обработчике события вступительного кадра видеоклипа является очень

распространенной ошибкой. В каждом кадре имеется по одному обработчику события всту-

пительного кадра. Поэтому, если поместить в него счетчик, он будет каждый кадр автомати-

чески обновляться. Например:

{

f

// код выполняется

}

Пусть вы решили использовать этот счетчик в цикле while следующим образом:

{

while (frameCounter < 10) {

// НЕОПРЕДЕЛЕННЫЙ ЦИКЛ

Результатом является неопределенный цикл. Интерпретирующая программа погружается в

цикл while и никогда не выходит из него, потому что счетчик никогда не обновляется внутри цик-

ла. Вывод: цикл whi 1е должен иметь свой собственный счетчик, внутри цикла.

FLASH ЗА РАБОТОЙ: ИСПОЛЬЗОВАНИЕ ЦИКЛА FOR для

СОЗДАНИЯ

В демонстрационном фильме содержащемся на компакт-диске,

создается раскрывающееся меню, элементы которого берутся из базы данных SQL. В данном

случае элементами меню являются названия 50 штатов США и округа

Раскрывающееся меню используется при регистрации на узле

На С описанием этого узла можно познакомиться в статье Майкла Гурвица (Michael

опубликованной в журнале New Architect в марте 2002 года. В Internet

эта статья размещена по адресу

Раскрывающееся меню является всего лишь одной небольшой частью узла. Здесь мы рас-

смотрим только небольшую часть этого меню — функцию generateList — основой ко-

290 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью

торой является цикл for. Файл является полностью функционирую-

щим, однако он создает совместимые только с Flash 5. На компакт-диске имеется так-

же файл php, который необходим для доступа к базе данных SQL. Он написан на

серверном языке сценариев 4.0.6. (Подробная информация о РНР приведена по адресу

com.)

В раскрывающемся меню указываются названия штатов, по 10 за один раз. Функция

последовательно просматривает элементы массива (массив по 10

за один раз.

Каждый элемент содержит ссылку на объект. Каждый объект имеет два свойства: id —

целое число, уникальным образом идентифицирующее объект, и name — имя штата, пред-

ставленное в виде строки.

Каждый выбранный элемент меню представляет собой видеоклип. Имеется 10 таких клипов, с

именами entityo, entityl...entity9. Клипы вручную выложены на временной шкале компонен-

та menu, начиная с кадра 12. Чтобы увидеть это, дважды щелкните на компоненте menu панели

Explorer (Проводник фильма), в результате чего откроется временная шкала компонента menu.

При каждом прохождении цикла for функция generateList О берет один объект из

массива items и переносит значения свойств этого объекта в свойства text и id одного из

десяти видеоклипов entity. Это происходит в строках 13 и 14 приведенного ниже листинга

кода. Кроме того, в строке функция делает выбранный элемент меню видимым.

Вторая половина программы, начиная со строки 18, делает соответственно видимыми и неви-

димыми стрелки перемещения по списку вверх и вниз, в зависимости от того, есть ли еще подле-

жащие отображению имена до или после выбранного в текущий момент пакета из 10 имен.

// used by permission of Mass Transmit

1: var = 10;

2: function {

3: var startnum = maxdisplay * pagenum;

4: = startnum; i < startnum + maxdisplay; i++) {

5: var entity = + (i %

6: var entityObj =

7:

8: if (i >= {

9: visible = false;

10:

11: else {

= true;

=

14: =

15: }

} // end for loop

17:

if (pagenum { // set up arrow

19: uparrow. visible = false;

20: }

21: else {

uparrow. visible = true;

23: }

25: if + maxdisplay) >= { // set down arrow

dnarrow. visible = false;

27: }

28: else {

dnarrow. visible = true;

30: }

31:

32: }

ГЛАВА 14. РАБОТА с ДАННЫМИ: ИСПОЛЬЗОВАНИЕ ПРЕДЛОЖЕНИЙ 291

Кто захочет лучше разобраться с этим кодом, должен выполнить несколько действий.

PHP-сценарий, размещенный на узле

является жестко закодированным на возвращение списка штатов. Он не является тем же са-

мым, что и PHP-файл на компакт-диске. Последний можно использовать для любого SQL-

поиска, инициированного из Flash-файла.

В своем приложении вы можете изменить предложение SQL select в параметрах клипа

для компонента menu. При изменении предложения SQL select необходимо запрограмми-

ровать Flash-приложение так, чтобы оно соответствовало возвращаемым данным.

В том виде, в котором он есть, фильм la можно использовать с любой

SQL-таблицей, в которой есть поле id, являющееся целым числом, и поле name, являющееся

строкой. Например, в таблице state базы данных к которой осуществляется

посредством узла имеются следующие поля:

state_id: integer

name:

Если в таблице SQL полям не присвоены имена id и name, то для соответствующего пе-

реименования полей можно воспользоваться элементом as в операторе select. В приведен-

ном ниже примере поле indexnumber переименовано в id, а поле — в name.

select indexnumber as id, stringvalue as name from

Файл f la содержит следующее SQL-предложение:

select state_id as id, name from state where state_id >

Чтобы просмотреть SQL-предложение, в основной временной шкале щелкните на компо-

ненте и откройте панель (Свойства).

Файл базы данных не обязательно должен быть размешен на самом Web-сервере. При вы-

полнении поиска базы данных РНР соединяется с демоном (сетевой программой) MySQL,

выполняющимся на этом же сервере. Демон подключается к базе данных mySQL, которая

может находиться как на этом же сервере, так и на каком-то другом. В ответ будет получена

таблица базы данных, выложенная в виде ряда строк с номерами полей в каждой из них. Сце-

нарий РНР принимает эту таблицу, форматирует ее подходящим для Flash образом и отправ-

ляет отформатированные данные в приложение, вызывающее Flash.

При попытке просмотреть источник PHP-файла (или любой другой сценарий РНР или

CGI) в диалоговом режиме вы не увидите фактического кода. Вместо него вы увидите только

текст, сгенерированный путем исполнения сценария РНР или CGI. В этом случае текст будет

начинаться так:

Фактически можно взять этот текст, сохранить его на Web-сервере в виде текстового фай-

ла (например, .txt), а затем в фильм

можно будет загрузить текстовый файл. Вы получите тот же список

штатов без поиска базы данных.

"Единственным, что заставляет меня лезть на стену при работе с Flash, является то, что

Flash-фильмы, доступ к которым осуществляется посредством броузера, могут контактиро-

вать только с приложением CGI или РНР, находящимися в том же субдомене, что и Rash-

фильм", — отмечает Марк Льюис, ведущий специалист по разработке приложений узла Mass

Transit. Ограничение, накладываемое одним субдоменом, не имеет значения при запуске

Flash-фильма с жесткого диска своего компьютера без использования броузера. Однако при

использовании броузера Flash-фильм и сценарий РНР или CGI должны быть на одном и том

292 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

же сервере. Это ограничение, внедренное компанией Macromedia в целях безопасности, упо-

мянуто в справочнике по в статье

"Хотелось бы, Macromedia предоставила вопросы безопасности на рассмотрение

серверных программистов, вместо чтобы внедрять их в принудительном порядке", — го-

ворит Льюис. "Фактически это мешает нам разрабатывать некоторые Flash-приложения".

Чтобы просмотреть файл la на своем узле так же, как другие пользова-

тели смогут сделать это посредством своих броузеров, необходимо установить базу данных

и отредактировать PHP-сценарий, вставив информацию, аналогичную приведенной

для разрешения доступа к базе данных.

= // имя базы данных, подлежащей использованию

= // имя пользователя базы данных

= // пароль для имени пользователя

ГЛАВА 14. РАБОТА с ДАННЫМИ: ИСПОЛЬЗОВАНИЕ ПРЕДЛОЖЕНИЙ 293

ГЛАВА

ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ

в ФУНКЦИИ

В ЭТОЙ ГЛАВЕ...

Улучшение кода с помощью функций 295

Создание функций 296

Вызов функций 298

Использование ключевого слова var для создания локальных переменных

внутри функций 298

Передача данных в функции с помощью аргументов 300

Извлечение результатов с помощью возвращаемых значений 305

Функции как классы: функции-конструкторы 306

Методы и 316

Явный обзор данных

Автоматический обзор данных 322

Возможные проблемы 325

Flash за работой: расчет факториалов — пример рекурсии 326

УЛУЧШЕНИЕ КОДА с помощью ФУНКЦИЙ

Функция — это целостный блок кода, к которому можно обратиться (или активизировать)

из любого места программы. При обращении к функции ее код начинает выполняться. Вы-

звать функцию можно по ее имени, если она его имеет. Кроме того, к функциям можно об-

ращаться посредством переменных, элементов массивов или свойств объектов. Все эти спо-

собы обращения к функции гораздо более лаконичны по сравнению с самой функцией. Та-

ким образом, функции представляют собой эффективный и удобный "рычаг управления" по-

тенциально сложными поведениями.

Функции существенно облегчают поддержку программ. Предположим, что для отображе-

ния сообщений об ошибке вы создали функцию displayError Если когда-либо вы захо-

тите изменить ее, то вам нужно будет внести изменения только в одном месте — в объявлении

функции displayError Если вместо функции использовался несколько раз повторяю-

щийся блок кода, то каждый такой блок придется исправлять в индивидуальном порядке.

Функции существенно улучшают удобочитаемость кода и возможность его повторного исполь-

зования. Они также способствуют уменьшению размера SWF-файла за счет использования крат-

кого обращения к функции вместо длинного повторяющегося блока кода. И напоследок отметим,

что функции лежат в основе методики объектно-ориентированного программирования (ООП).

Знакомство с функциями, удобочитаемостью, возможностью повторного ис-

пользования кода и объектно-ориентированным программированием состоя-

лось в главе 11 "Знакомство с ActionScript".

Методика ООП подробно рассматривается в главе 19 "Использование

встроенных базовых объектов" и в главе 21 "Упаковка данных и функций с

помощью пользовательских объектов".

СОЗДАНИЕ ФУНКЦИЙ

Существуют два основных момента работы с функциями: их создание и вызов.

В зависимости от того, хотите ли вы, чтобы функция имела собственное постоянное имя

или нет, ее можно создать одним из двух способов.

• Чтобы создать функцию с собственным постоянным именем, ее нужно объявить.

• Чтобы создать функцию без собственного постоянного имени, необходимо создать

функциональный Чтобы к нему можно было функциональный ли-

терал должен храниться в переменной, элементе массива или свойстве объекта.

ОБЪЯВЛЕНИЕ ФУНКЦИЙ

При объявлении функции устанавливается постоянная связь имени функции с блоком

кода. Базовый формат объявления функции имеет следующий вид:

function {

}

где function — это ключевое слово; — имя функции; необя-

зательный список разделенных запятыми аргументов, передаваемых функции, а предложе-

и представляют собой набор предложений ActionScript. В наборе может

содержаться любое количество предложений.

Имя функции должно быть действительным идентификатором, образованным в

соответствии с правилами, описанными в главе 12 "Управление переменными,

данными и типами данных".

296 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ниже приведено объявление функции без аргументов.

function {

errorText =

}

Идея заключается в том, что эта функция обновляет переменную временной шкалы, ко-

торая отображается в текстовом поле, уведомляя пользователя об ошибке.

ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ БЕЗ ИМЕН: ФУНКЦИОНАЛЬНЫЕ

ЛИТЕРАЛЫ

Литерал — это выражение, представляющее элемент данных буквально (в противополож-

ность абстрактному представлению). Он реализует элемент данных, а не называет его.

С числовыми, строковыми литералами и литералами массивов вы познакоми-

лись в главе 12 "Управление переменными, данными и типами данных".

Функциональный литерал — это функция, которая написана без присвоения ей имени.

Ниже приведен пример функционального литерала, который выглядит, как объявление

функции без имени.

function О {

errorText =

}

Как и остальные литералы, функциональный литерал после создания необходимо где-то

сохранить, иначе он будет потерян. Например, функциональные литералы можно хранить в

переменных. При этом синтаксически правильно будет после фигурной скобки вставить точ-

ку с запятой, чтобы завершить предложение, хотя пропуск точки с запятой на самом деле не

приведет к возникновению проблем. Например:

displayError = function О {

// точка с запятой завершает назначение предложения

Кроме того, функциональные литералы можно хранить как свойства объекта (это распро-

страненный и удобный синтаксис создания методов). В следующем примере функции назна-

чены не с помощью предложений присваивания, и, следовательно, после фигурных скобок

тел двух функций точки с запятой не стоят. Однако, чтобы завершить предложение присваи-

вания, этот символ стоит в самом конце объявления:

: ,

prop2 :

Ниже показан еще один способ выполнения той же задачи. Первая строка создает пустой

объект, вторая и третья добавляют к нему свойства. Каждое свойство относится к функции.

В данном примере функции назначены с помощью предложений присваивания, следователь-

но, после закрывающих фигурных скобок тел двух функций ставятся точки с запятой:

myObj = // пустого объекта

=

myObj.prop2 =

В приведенном ниже примере те же самые функции назначаются как свойства массива.

myArray = // создание пустого объекта

myArray[0] =

=

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 297

Вызов ФУНКЦИЙ

При объявлении функции фактически в программе ничего не происходит. Чтобы было

выполнено какое-либо действие, функцию нужно вызвать или выполнить.

Обращение к функции осуществляется с помощью оператора вызова функции, представ-

ляющего собой пару круглых скобок:

Оператор вызова функции был описан в главе 13 "Использование операто-

ров".

Синтаксис обращения к функции очень простой:

где это имя функции, а опциональный список аргументов,

разделенных запятыми.

Многие "действия" являются встроенными функциями, которые можно вы-

звать без их объявления. Например, nextFrame является встроенной функцией, которая

отправляет воспроизводящую головку к следующему кадру и затем останавливает ее. Если

функция не имеет аргументов, круглые скобки остаются пустыми. Добавление точки с запя-

той завершает предложение, как показано ниже.

nextFrame

Обращение к пользовательским функциям (к тем, что созданы самостоятельно) выполня-

ется точно таким же образом:

dispalyError () // активизирует функцию

Функция dispalyError О является тривиальной, и ей недостает преимущества сведения

сложных выполняемых операций под одним простым описательным именем. В данном случае

выражение errorText практически является столь же кратким и удобочитае-

мым, как и dispalyError Основным аргументом в пользу функции dispalyError яв-

ляется то, что ее легче поддерживать. Если в программе вы напрямую использовали выражение

= а впоследствии решили внедрить более сложный метод отображения

ошибок, вам придется изменять этот участок кода везде, где он будет появляться в программе.

Для вызова любой функции можно также воспользоваться методами call и

apply () объекта Function.

Подробная информация о методах call и apply О приведена ниже, в раз-

деле "Методы () и О".

ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО ДЛЯ

СОЗДАНИЯ ЛОКАЛЬНЫХ ПЕРЕМЕННЫХ ВНУТРИ ФУНКЦИЙ

Большинство функций содержит одну или несколько переменных, которые используются

только в пределах этой функции. Предположим, что вы создаете функцию greet которая

в зависимости от времени дня возвращает одно из трех приветствий ("доброе утро", "добрый

день" и "добрый вечер"). Для определения времени в ActionScript вы создаете и объект Date

(например, myDate), и переменную времени (например, hours). Вы хотите использовать

298 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

объект myDate и переменную hours только в пределах greet и при этом для об-

ращения к различным объектам и переменным желаете использовать эти имена и в других

местах программы. Заглядывая в будущее, вы также хотите иметь возможность внедрять эту

функцию в другие программы и хотите быть уверенным, что использование уже существую-

щего имени не приведет к конфликту имен и, следовательно, не повлияет на элементы

(переменные или объекты) другой программы, в которой теперь непреднамеренно будут ис-

пользоваться одинаковые имена.

В подобной ситуации для объявления локальной переменной внутри функции можно вос-

пользоваться ключевым словом var. Локальная переменная функционирует только в пределах

функции и не влияет на переменную с тем же именем, находящуюся вне функции. Например:

function greet () {

var hours;

var

// код для получения времени и возврата приветствия

// все применения переменной hours и объекта myDate осуществляются

локально внутри функции

}

В приведенном ниже примере предложение trace отображает локальную пе-

ременную, а не переменную временной шкалы с тем же именем.

myVar = "timeline";

function {

var myVar "local";

trace // "local"

}

Если в предыдущем примере опустить ключевое слово var, то предложение

myVar = будет ссылаться на переменную временной шкалы с тем же именем и из-

менит ее! Если вы хотите использовать какую-то переменную только в пределах функции,

всегда объявляйте ее с помощью ключевого слова var. Это поможет избежать непреднаме-

ренного изменения переменной временной шкалы с тем же именем.

Аргументы также трактуются как локальные переменные. Аргументы рассматри-

ваются в разделе "Передача данных в функции с помощью аргументов".

КЛЮЧЕВОЕ слово VAR НЕ ИСПОЛЬЗУЕТСЯ ВНЕ ФУНКЦИЙ

Ключевое слово var не оказывает воздействия вне функций. Это относится и к обработчи-

кам событий! Ключевое слово var можно использовать в обработчике событий, но его присут-

ствие ничего не изменит. Например, если переменная создается в обработчике событий load,

как показано ниже, может быть изменена предложениями, расположенными во временной

шкале в других обработчиках событий или в коде соответствующих кнопок.

{

var с = 10; // ключевое слово "var" ничего не меняет

ДОСТУП К ПЕРЕМЕННЫМ ВРЕМЕННОЙ ШКАЛЫ ВНУТРИ ФУНКЦИИ

Если во временной шкале имеется функция и внутри нее с помощью ключевого слова var

создана локальная переменная, то к переменной временной шкалы, имеющей то же самое

можно обратиться с помощью ключевого слова this. Например:

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 299

myVar = "timeline";

function

var myVar =

trace // "local"

trace // "timeline"

ПЕРЕДАЧА ДАННЫХ в ФУНКЦИИ с помощью

АРГУМЕНТОВ

Функция displayError рассмотренная выше, в разделе "Вызов функций", может

отображать только одно сообщение: (ошибка). Предположим, вы хотите, чтобы

пользователь получил более подробную информацию об ошибке. Это можно сделать, не соз-

давая отдельной функции для каждой ошибки, а передавая в функцию displayError ар-

гумент. В приведенном ниже примере аргумент имеет имя arg. Параметр arg существует в

памяти только на время действия функции. Когда выполнение функции завершается, аргу-

мент arg исчезает. Он выполнил свою задачу по изменению переменной errorText.

function {

errorText = arg;

}

Для отображения различных сообщений об ошибке можно обратиться к функции, как по-

казано в следующем примере:

required field, cannot be left

displayError must be 8 or more

invalid zip

Функция displayError () будет отображать переданный ей Добавление аргу-

ментов подобным образом делает функцию displayError гораздо более гибкой и полез-

ной. Кроме того, функция становится более доступной для повторного использования. К при-

меру, с ее помощью можно отображать различные сообщения об ошибках в разных

Число аргументов, которые можно передать функции, не ограничивается. Однако в пре-

делах функции по имени можно обратиться только к тем аргументам, которые были объявле-

ны. Доступ к остальным аргументам можно получить посредством объекта кото-

рый будет описан далее в этой главе.

ПЕРЕДАЧА АРГУМЕНТОВ по ЗНАЧЕНИЮ и по ССЫЛКЕ

Когда в виде аргумента в функцию передается элементарная величина, она передается по

значению. Это означает, что интерпретирующая программа выделяет соответствующее место в

памяти и копирует в него значение этого элемента данных. Функция никогда не видит исход-

ный элемент данных, а имеет дело только с его копией. Изменение копии в пределах функ-

ции не оказывает влияния на исходную величину.

В приведенном ниже примере показано, как передать в функцию строковый примитив и

модифицировать переданное значение без изменения оригинала. В данном случае к передан-

ному значению функция добавляет два восклицательных знака, а исходная строка остается

без изменений:

str =

function {

arg +=

return (arg)

300 ЧАСТЬ РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

result »

trace // отображается "string

// отображается "string" - оригинал не меняется

С другой стороны, сложные типы данных (объекты, функции) передаются по

ссылке. Это означает, что интерпретирующая программа создает указатель на исходный эле-

мент и передает его функции. Любые изменения данных внутри функции влияют на ориги-

нал, В приведенном ниже примере показано, как изменяется оригинал при передаче объекта

в функцию и изменении его свойств. В данном примере функция изменяет свойство строки

str, относящееся к объекту obj. Когда функция модифицирует значение свойства на

она изменяет и свойство исходного объекта:

function myFunc(arg) {

= "changed"; // изменение исходного значения

obj new

=

// отображается объект имеет новое значение

ОБЪЕКТ ARGUMENTS

При вызове функции она автоматически получает свойство, именуемое arguments и

представляющее собой массив (или подобный массиву объект в Macromedia Flash 5) с эле-

ментами, доступ к которым осуществляется посредством числовых индексов (начиная с 0), и

параметром length, указывающим число элементов массива.

При каждом вызове функции создается объект arguments, который заполняется всеми пере-

данными ей аргументами. Кроме того, свойство length задает число аргументов.

Объект arguments поддерживается плейерами Flash 5 и Flash 6. Однако обраба-

тывается данный объект этими плейерами по-разному. Например, во Flash 5 со

свойством arguments не работают такие методы массивов, как push и pop

В плейере Flash 6 arguments — это реальный массив со все ми соответствующими

методами. Кроме того, свойство работающее в цикле во

Flash 5, не поддерживается во Flash 6.

На Во Flash 6, в отличие от Flash 5, поддерживается свойство arguments . caller.

Свойство arguments доступно только внутри функции при ее выполнении. К нему мож-

но обратиться либо просто как arguments, либо указав перед ним имя функции, например

В приведенной ниже функции myFunc О предложения и

trace (arguments [0] ) выполняют одну и ту же задачу — отображают значение первого (и

единственного) аргумента.

function {

// отображается "this is the argument"

trace // отображается "this is the argument"

}

is the

Объект arguments имеет три свойства:

• length массива arguments;

• — функция, выполняющаяся в текущий момент;

• — функция, вызвавшая выполняющуюся в текущий момент функцию.

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 301

Выше были перечислены свойства объекта, а не элементы массива. Эти свойства

будут присутствовать даже в том случае, если массив arguments совсем не имеет

элементов, т.е. не было передано никаких аргументов.

СВОЙСТВО ARGUMENTS.LENGTH

Одним из применений свойства length является проверка того, что функ-

ции было передано правильное число аргументов. В приведенном ниже примере показано,

как для функции можно назначить свойство length. Свойство содержит ожидаемое число

аргументов, в данном случае — один. При вызове функции с помощью свойства проверяется,

совпадает ли фактическое число аргументов с ожидаемым. Если это не так, то возвращается

сообщение об ошибке. В данном примере функция отображает сообщение

"Wrong number of arguments! Expected got 0" аргумен-

тов! Ожидалось 1, получено 0).

function {

if !=

err = "Wrong number of expected

return (err + + got +

,

= 1; // ожидаемое число аргументов

trace ( arg2) // это приведет к сообщению об ошибке

Массив со свойством length также будет полезен, когда функции передается

переменное число аргументов. Например, приведенная ниже функция avg возвращает

среднее любого количества аргументов. Массив arguments и свойство arguments . length

позволяют функции avg работать с переменным числом аргументов.

function {

var sum

// добавление всех аргументов

i = 0; i < {

sum = sum +

}

// разделить сумму на число аргументов - это среднее значение

var average

return average;

}

= + // отображается "Average

= + // отображается "Average 30"

СВОЙСТВО CALLEE

Свойство arguments . callee позволяет обратиться к функции изнутри самой функции

без использования ее имени.

Одним из предназначений свойства является создание более обоб-

щенного кода, который можно легко вырезать и вставлять в различные программы. Напри-

мер, рассмотренный в предыдущем подразделе код проверки аргументов в том виде, в каком

он написан, предназначен только для функции myFunc Однако в этой функции можно

заменить myFunc на Результирующий код можно будет вырезать и

вставить в любую функцию, имеющую свойство length, и этот код будет работать.

При работе с обычными именованными функциями использование свойства

для создания обобщенного кода является исключительно вопросом

удобства. Каждая функция имеет постоянное имя, которое всегда можно использовать.

302 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

И наоборот, анонимные функции, созданные посредством функциональных литералов,

не имеют фиксированного имени. В любой момент функция может быть поставлена в соот-

ветствие определенной переменной, элементу массива или свойству объекта, а впоследствии

это назначение можно будет изменить. В этом случае использование свойства

callee для создания обобщенного кода является мерой безопасности.

Ниже приведен пример проблемы, возникновению которой может воспрепятствовать

свойство Пусть создается функциональный литерал и первоначально

ему в соответствие ставится переменная Var. Вы хотите, чтобы функциональный лите-

рал мог обращаться к самому себе, и для этого включаете в него обращение к f irstVar

var firstVar function (i) {

if (i < 3) {

return

f irstVar (0)

0

1

2

*/

Затем вы переназначаете функциональный литерал для другой переменной, secondVar,

и избавляетесь от переменной

secondVar = firstVar;

delete firstVar;

/*0utput

0

*/

Теперь при обращении к secondVar происходит попытка вызова внутри функцио-

нального литерала и активизация функционального литерала не выполняется.

С другой стороны, если включить обращение к свойству то

функциональный литерал будет активизировать сам себя, независимо от того, какой пере-

менной он поставлен в соответствие. Вот как должен выглядеть функциональный литерал.

Назначьте и переназначьте его для любой переменной, и он будет работать:

function (i) {

if (i < 3) {

return

обращающиеся сами к называются рекурсивными. Следовательно, свойство

callee позволяет создавать "надежные" анонимные рекурсивные функции.

Более подробно тема рекурсии освещается ниже, во врезке "Несколько про-

стых примеров рекурсии".

Переназначение другого имени переменной не единственной причиной "сбоя"

рекурсивной анонимной функции с внутренним жестко закодированным обращением. Даже

при сохранении одного и того же имени переменной в пределах анонимной функции она

может остаться вне поля зрения.

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 303

Вопрос "видимости" функциональным литералом переменной, служащей в качестве его

имени, и, таким образом, исполнения литерала является предметом области действия имен.

В двух приведенных ниже ситуациях переменная, присвоенная функциональному

находится вне области действия в пределах функционального литерала.

• Функциональный литерал присвоен локальной переменной внутри функции.

• Функциональный литерал используется в функции-конструкторе.

Приведенный ниже пример иллюстрирует первую ситуацию.

В функции переменная является локальной, для которой назначен

функциональный литерал. Сначала активизируется функция myFunc О (строка 12). Затем

функция myFunc после возвращения (строка 9), обращается к переменной localFunc

В точке, в которой () обращается к самой себе (строка 5), переменная

localFunc О является неопределенной. С другой стороны, свойство

успешно исполняет localFunc

Функция myFunc не выполняет никаких полезных но она иллюстрирует си-

туацию, в которой свойство callee оказывается очень полезным.

// спасибо Tatsuo Kato за эту идею!

myFunc = function (i) {

var localFunc function (i) {

if (i < 3) {

return // здесь не

// определена!

6

else return i;

return

7

8

9

11:

=

trace = /*

Output

0

1

2

r = 3

*/

Несмотря на то что сама по себе функция localFunc в строке 5 работать не будет, в

этой ситуации будет выполняться функция И все-таки свойство

callee является единственным, которое всегда позволяет анонимной функции

обращаться к самой а потому — самое легкое и безопасное в применении.

СВОЙСТВО CALLER

Свойство caller позволяет обратиться к функции, которая активизировала

функцию, выполняющуюся в данный момент. Например:

function {

// обратный вызов

304 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью

Для изучения полезных применений обратитесь

к описанию функции в главе 21 "Упаковка данных и функций с

помощью пользовательских

При использовании свойства caller убедитесь, что при этом не будет соз-

дан бесконечный цикл.

Несколько простых примеров рекурсии

Рекурсия возникает, когда функция обращается к самой себе. В большинстве случаев рекур-

сию можно создать просто путем использования имени функции внутри нее же, как в приве-

денном ниже примере.

function { // НЕ ДЕЛАЙТЕ ЭТОГО!

Ту же самую задачу можно выполнить с помощью свойства callee как по-

казано ниже.

function { // НЕ ДЕЛАЙТЕ ЭТОГО!

Цикл будет бесконечным, даже если вставить предложение return, как показано ниже.

function { // НЕ ДЕЛАЙТЕ ЭТОГО!

В последнем случае при попытке интерпретирующей программы вычислить возвращаемое

значение исполняется функция цикл будет бесконечным.

Функция является ярким примером рекурсии, потому что все, что она де-

лает, — это обращается к самой себе снова и снова. Это не только бесполезно, но и вредно,

поскольку может привести к сбою приложений и компьютеров.

Flash MX автоматически прерывает такой сценарий и выводит сообщение об ошиб-

ке после выполнения 256 циклов. Плейер Flash 6 прерывает сценарий вывода

сообщения об ошибке. Flash 5 и плейер отображают сообщение

об ошибке и позволяют пользователю прервать сценарий.

При использовании броузеров возможность прерывания зависит от разных факторов, напри-

мер, от используемой операционной системы. Но совершенно четко можно сказать, что ника-

кие из результатов не будут полезными, и все может окончиться перезагрузкой компьютера.

Однако сама по себе рекурсия может быть полезной. Необходимо только обеспечить

выхода из

Пример полезной рекурсии представлен в разделе "Flash за работой: расчет

факториалов — пример рекурсии" в конце этой главы.

ИЗВЛЕЧЕНИЕ РЕЗУЛЬТАТОВ с помощью

ВОЗВРАЩАЕМЫХ ЗНАЧЕНИЙ

Иногда требуется, чтобы функция не только выполняла задачу, но и возвращала значение.

Например, вы пишете функцию для удвоения чисел, но хотите, чтобы она не только выпол-

няла эту операцию, но и возвращала удвоенные числа для последующего использования.

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 305

Функция возвращает значения благодаря предложению return. Предложение return с

возвращаемым значением передает его вызывающей функции. Так, в приведенном ниже

примере функция возвращает удвоенное переданное ей значение.

function {

return numberToBeDoubled * 2;

}

Функция не обязательно должна включать в себя предложение return. При его отсутст-

вии функция будет просто последовательно, сверху вниз, исполнять предложения и завер-

шится по достижении последней фигурной скобки. Предложение return завершит функцию

до как она достигнет последней фигурной скобки.

Предложение return без возвращаемого значения вернет значение Напри-

мер, приведенная ниже функция myFunc если ей не было передано аргументов, возвра-

щает значение В противном случае она возвращает сам аргумент.

function {

if return;

return

}

result =

trace undefined

Подозреваете, что часть функции "отключена"? Возможно, это происходит из-

за преждевременного возвращения. Обратитесь к разделу "Возможные про-

блемы" в конце этой главы.

Существуют два способа применения возвращаемого значения.

• Присвоить возвращаемое значение переменной и каким-либо образом использовать ее.

• Применить обращение функции к ней самой и в качестве эквивалента возвращаемого

значения использовать переменную.

Например, приведенная ниже функция doublelt иллюстрирует первый подход.

twicefour =

отображается 8

Л этот пример демонстрирует второй подход:

// отображается 8

Оба примера иллюстрируют выполнение одной и той же задачи. Второй код в два раза коро-

че первого как в исходном коде, так и в SWF-файле. Однако во втором случае не создается пере-

менная, которую можно продолжать использовать, тогда как в первом случае это происходит,

Не получили ожидаемого возвращаемого значения? Обратитесь к разделу

проблемы" в конце этой главы.

ФУНКЦИИ КАК КЛАССЫ: ФУНКЦИИ-КОНСТРУКТОРЫ

Одним из самых важных типов функций во Flash является функция-конструктор. Функция-

конструктор в комбинации с оператором new является способом создания новых объектов во Flash.

Функция-конструктор выглядит так же, как и обычная. Фактически ею она и является.

Однако используется функция-конструктор очень специфическим образом, что позволяет

извлечь максимум пользы из тех ее свойств, которые обычно оставались неиспользованными.

306 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

В частности, все функции имеют свойство prototype, но, как правило, оно не используется.

Однако в функциях-конструкторах оно является ключевым, поскольку позволяет всем объектам

класса иметь общие свойства, а также позволяет одному классу наследовать свойства других.

В этом разделе рассмотрены три основные темы.

• Создание новых объектов с помощью оператора new.

• Использование свойства prototype для коллективного использования свойств.

• Задание цепочек наследования с помощью оператора new.

Эти три темы представляют собой основу методики объектно-ориентированного про-

граммирования (ООП).

Более широко вопросы, связанные с объектно-ориентированным программи-

рованием, рассматриваются в главе 21 "Упаковка данных и функций с

помощью пользовательских объектов".

СОЗДАНИЕ ОБЪЕКТОВ с помощью

ОПЕРАТОРА NEW

Для создания объекта сначала необходимо задать функцию-конструктор, а затем исполь-

зовать ключевое слово new. Приведенная ниже функция-конструктор назначает

только одно свойство col (цвет) для создаваемых объектов.

function Ball (col) {

= col;

}

Ball () с помощью оператора new.

= new Ball

За исключением ключевого слова new это предложение выглядит как обычное обращение

к функции. Следовательно, сразу же можно обратить внимание, что данное предложение вы-

зывает функцию Ball принимает возвращаемое значение и присваивает его переменной

Так ведет себя обычная функция, и в данном случае происходит то же самое.

Однако здесь есть одна странность. Вы активизируете функцию так, как если бы она воз-

вращала какое-то значение, но при этом оператор return отсутствует! Какое же значение

возвращается? Ключевое слово new говорит функции о том, что следует создать новый объ-

ект. Этот объект и есть возвращаемое значение, которое присваивается переменной

Несмотря то что строка кода = new Ball выглядит очень просто,

она инициирует активизацию достаточно сложной цепочки событий.

• Сначала интерпретирующая программа создает новый "родовой" объект и

передает его функции На данном этапе представим себе, что этот объект яв-

ляется пустым, не обладающим никакими свойствами.

• Внутри функции объект (который до сих пор является "анонимным" или бе-

зымянным) называется this. Каково предназначение предложения

col = col? Элемент col в правой части предложения относится к аргументу,

переданному функции, т.е. является строкой "blue". Левая часть предложения,

col, создает для анонимного объекта новое свойство с именем col. Следова-

тельно, результатом всего предложения объект

• Функция Ball возвращает все еще безымянный объект, обладающий новым свой-

ством col. Эта часть процесса, в некотором роде, "скрыта", поскольку

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 307

конструктор не имеет предложения return. Вместо этого оператор new инициирует

возвращение объекта. В этом месте анонимному объекту наконец-то присваивается

Интерпретирующая программа задает скрытое свойство объекта myBall,

свойство _proto_, для того, чтобы сослаться на объект prototype функции-

конструктора Это свойство позволяет объекту myBall найти в объекте

prototype коллективно используемые свойства.

Свойство описывается в главе 21 "Упаковка данных и функций с

помощью пользовательских объектов".

Теперь можно проверить, что же только что было сделано:

trace (typeof //

for (a in myBall) // перечисляет свойства: отображает "col"

// "blue"

Все выглядит отлично!

Свойство col содержится в объекте myBall локально. Для каждого объекта, созданного

функцией-конструктором Ball О , будет задано свойство col, и каждое из этих свойств бу-

дет локальным по отношению к каждому созданному объекту. Это означает, что при измене-

нии значения свойства col в одном из объектов оно не повлияет на значения col других объ-

ектов. Это свойство не является коллективно используемым.

СВОЙСТВО PROTOTYPE

При создании каждой функции интерпретирующая программа ActionScript автоматиче-

ски назначает для нее свойство prototype. Свойство prototype является объектом, т.е.

может иметь свои собственные свойства. При создании нового объекта с помощью оператора

new (как описано в предыдущем подразделе) любые свойства объекта prototype функции-

конструктора используются вновь созданным объектом.

Предположим, что создается класс Dog, реализуемый в функции Dog

function Dog ()

Этот пример не слишком похож на функцию, но, тем не менее, имеет объект prototype.

Теперь назначим несколько свойств объекта prototype класса Dog:

= 4, "bow wow", food:

В переводе это означает, что прототипная собака имеет четыре лапы, лает "bow wow", ест

кости и мясо.

Те же самые свойства для объекта prototype можно назначить и по-другому:

=

= "bow

=

На заметку Имена классов традиционно пишутся с прописной буквы.

В качестве свойств объект prototype может иметь и функции. Функция, являющаяся

свойством объекта, называется методом.

В этом конкретном примере никакие из свойств методами не являются. Методы мы рас-

смотрим позднее, поскольку при их назначении для объекта prototype необходимо принять

во внимание несколько специальных моментов.

308 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Синтаксис назначения метода для объекта prototype будет рассмотрен ниже,

в разделе "Назначение методов для класса".

После создания указанных выше трех свойств объекта prototype класса Dog ими

автоматически будет обладать любой другой объект этого класса. Можно создать объектов

класса Dog, и каждый из них будет иметь четыре ноги, лаять "bow wow", есть кости и мясо. Но

эти данные необходимо хранить только в одном месте.

Разработчик Flash Робин (Robin Debreuil), на Web-узле которого размещен превос-

ходный учебник по объектно-ориентированному программированию в привел хо-

рошую аналогию этой ситуации. Предположим, вы смотрите через окно с двойным стеклом.

И на первом, и на втором стекле есть несколько царапин. Но глядя через стекло, вы не можете

отличить их. Вы просто видите ряд царапин. Первое стекло является объектом, а царапины —

его свойствами. Второе стекло является объектом prototype функции-конструктора, а цара-

пины на нем — свойства этого объекта. Когда вы, будучи программистом ActionScript, получаете

доступ к свойству, то для вас не имеет значения, является ли оно локальным свойством (первого

стекла) или свойством prototype (второго стекла). Эта аналогия разрушается, когда речь идет

о нескольких объектах одного и того же класса (за которыми каким-то образом будет распола-

гаться второе окно), но в случае с одним объектом она работает превосходно.

На самом деле происходит вот что: когда интерпретирующей программе ActionScript нуж-

но найти свойство объекта (поскольку в программе имеется ссылка на нечто подобное

col), то сначала поиск проводится в объекте Если объект не содержит нуж-

ного свойства, интерпретирующая программа ищет прототип функции-конструктора данного

объекта Как правило, для программиста этот процесс прозрачен. При об-

ращении к объекту col нет необходимости указывать, является ли свойство локаль-

ным по отношению к объекту или хранится в прототипе конструктора.

Интерпретирующая программа ActionScript может выполнять поиск и за преде-

лами прототипа конструктора. Речь об этом пойдет ниже, в разделах

"Применение наследования для создания повторно используемого кода" и

"Использование оператора new для создания цепочек наследования".

Пока что объект Ball не имеет никакого содержимого, т.е. для этого класса

еще нет коллективно используемых свойств. Теперь создадим коллективное свойство:

= "Ball"; // добавление свойства className

for (a in // отображается "className" и "col"

"Ball"

Обратите внимание, что синтаксис обращения к свойству className является

таким же, как и в обращении к col, даже несмотря на то, что className является

локальным свойством объекта prototype, а свойство col — локальным для myBall.

НАЗНАЧЕНИЕ МЕТОДОВ для КЛАССА

Теоретически метод для класса можно назначить одним из четырех способов, приведен-

ных в табл. 15.1.

ТАБЛИЦА 15.1. ЧЕТЫРЕ СПОСОБА НАЗНАЧЕНИЯ МЕТОДА для КЛАССА

ЛОКАЛЬНЫЙ (в КАЖДОМ ЭКЗЕМПЛЯРЕ) КОЛЛЕКТИВНЫЙ (в ПРОТОТИПЕ)

Объявление функции Объявление функции

Функциональный литерал Функциональный литерал

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 30 9

Как видно из табл. метод назначается одним из двух способов: либо путем объявления

функции, либо с помощью функционального литерала. Каждый из способов можно использо-

вать как для создания локального метода, хранящегося в экземпляре класса, так и для

создания коллективного метода, сохраняющегося только один раз в объекте prototype.

На практике почти никогда не существует причины, по которой каждый объект должен

был бы обладать своей собственной копией метода. Объект должен иметь собственную ко-

пию свойства, только если ему необходимо иметь для него индивидуальное значение. Напри-

мер, пусть существует много объектов различных цветов, принадлежащих классу Dog, и вы не

хотите, чтобы всем членам этого класса было предоставлено в коллективное использование

только одно свойство col. Фактически это означало бы наличие только одного значения

этого свойства, т.е. одного цвета. Однако для всех объектов класса метод почти всегда являет-

ся идентичным. Когда ситуация является подходящей, метод может использоваться коллек-

тивно и принадлежать объекту prototype функции-конструктора. В этой главе рассматри-

вается только назначение методов для объекта prototype.

Процедура назначения свойств отдельным экземплярам продемонстрирована

в главе 21 "Упаковка данных и функций с помощью пользовательских

объектов".

Как видно из табл. 15.1, метод можно назначить посредством объявления функции либо с

помощью функционального литерала. Давайте сначала рассмотрим синтаксис из

этих способов, а потом обсудим, в каких случаях лучше применять тот или иной подход.

НАЗНАЧЕНИЕ МЕТОДА ПОСРЕДСТВОМ ОБЪЯВЛЕНИЯ ФУНКЦИИ

Назначение метода для объекта prototype, начинающегося с объявления обычной функ-

ции, проходит в этапа. Сначала выполняется объявление функции (в нашем примере это

функция Затем для свойства объекта конструктора prototype (в нашем

примере это getColor) назначается функция.

// сначала объявляется функция

function {

return

}

// затем для свойства в прототипе назначается идентификатор функции

=

// это работает!

// отображается "blue"

Обратите внимание, что при назначении функции не используются круглые скобки:

=

Круглые скобки используются только при функции:

Кроме обратите внимание, что в функции можно использовать ключевое слово

this, которое автоматически будет относиться к объекту, метод которого активизируется.

Это означает, что можно без труда назначать одну и ту же функцию для нескольких объектов.

Например, в приведенном ниже листинге создается функция-конструктор Cat, в прототипе

Cat создается свойство getColor, для которого назначается функция whatColorAml () .

Обратите внимание, что это та же самая функция, которая использовалась для

function Cat (col) {

=

310 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

// создание Объекта Cat серого цвета

myCat = new

// проверить цвет myCat

// отображается "gray"

НАЗНАЧЕНИЕ МЕТОДА с помощью ФУНКЦИОНАЛЬНОГО ЛИТЕРАЛА

Назначить метод для объекта prototype можно с помощью всего одного шага — исполь-

зуя функциональный литерал. Рассмотрим, например, такой функциональный литерал:

function () {

return

То же самое можно записать одной строкой:

function О

Сразу после создания функциональный литерал нужно где-то сохранить, иначе он будет

потерян. В данном случае "где-то" является свойством объекта prototype:

// назначение функционального литерала для свойства getColor

= function ()

// это работает!

// отображается "blue"

Ниже приведено несколько других примеров назначения свойств с помощью функцио-

нальных литералов. Во втором примере имеется аргумент col, который позволяет задать но-

вый цвет мяча.

Ball = function 0

= function (col) =

// отображается "Ball"

// отображается "red"

СЛУЧАИ ПРИМЕНЕНИЯ ФУНКЦИОНАЛЬНОГО ЛИТЕРАЛА И ОБЪЯВЛЕНИЯ ФУНКЦИИ

Если вы собираетесь назначить функцию только для одного класса и не используете ее в

любом другом контексте, то использование функционального литерала будет более эффек-

тивным. В этом случае объявление функции только добавит строки кода в программу.

С другой стороны, если вы назначаете одну и ту же функцию для нескольких классов или

используете ее в каком-либо другом контексте, лучше объявить функцию в одном месте и обра-

щаться к ней каждый раз, когда ее необходимо использовать. Если в такой ситуации воспользо-

ваться функциональным литералом, будет задействовано дополнительное количество памяти,

что не является необходимым, поскольку в каждом классе будет храниться своя копия функции.

ПРИМЕНЕНИЕ НАСЛЕДОВАНИЯ для СОЗДАНИЯ ПОВТОРНО

ИСПОЛЬЗУЕМОГО КОДА

Возможность одного объекта (такого как myBall) эффективно заимствовать свойства

другого объекта (объекта prototype конструктора) лежит в основе ключевой характеристи-

ки объектно-ориентированного программирования — наследования.

Основная идея наследования очень проста: поскольку объект, подобный myBall, может

эффективно заимствовать свойства из объекта prototype функции-конструктора, то и один

класс может заимствовать свойства другого. В является

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 311

олицетворением класса, поэтому наследование является процедурой заимствования свойств

одной функцией-конструктором у Говоря точнее, она заключается в том, что один

объект prototype одной функции-конструктора заимствует свойства другого объекта

prototype у другой функции.

Несмотря на схожесть способов, которыми заимствуют свойства объекты и классы, обра-

тите внимание на то, что нигде не говорится о том, что объект "наследует" свойства класса.

В языках, имеющих статически определенные классы, таких как Java, следует избегать фразы

о том, что объект "наследует" свойства класса. Наследование — это нечто, происходящее

только между классами. Когда объект является реализованным (созданным как экземпляр

класса), функция-конструктор назначает для него различные свойства. Некоторые свойства

могут быть унаследованы классом до того, как он был назначен для объекта. Но сами по себе

объекты ничего не "наследуют".

Это совершенно четкое отличие не очень хорошо отражает реалии языка

В ActionScript механизм, согласно которому объект (такой как myBall) получает какие-то

полезные свойства без конкретного выполнения задачи, а просто благодаря обстоятельствам

своего рождения, является тем же самым, что и механизм передачи свойств от класса к клас-

су. Этим механизмом является объект prototype. Экземпляры и классы получают

"заимствованные" свойства одним и тем же способом, поэтому иногда использование терми-

на наследование в обеих ситуациях является естественным.

Взаимосвязь между классами, которые заимствуют свойства, и классом, который их пере-

дает, является отношением типа "родитель-потомок". Объект prototype функции-

конструктора заимствует свойства экземплярам класса аналогичным способом. В ActionScript

взаимосвязь типа "прототип-экземпляр" удобнее называть связью типа "родитель-потомок".

Любое отношение типа "родитель-потомок" является двухуровневой иерархической струк-

турой. На верхнем уровне находится родительский объект, на нижнем уровне — один или не-

сколько дочерних объектов. В ActionScript родительский объект может иметь любое количество

дочерних объектов, но каждый дочерний объект может иметь только один родительский.

Можно создать цепочки наследования, содержащие несколько поколений. Родительские

объекты могут иметь свои родительские объекты, а дочерние — свои дочерние объекты. Чуть

позже вы узнаете, как это сделать.

Однако сначала подумаем, для чего мы хотим создать такую цепочку. На минутку вернув-

шись к функции 1 подумайте, почему вы хотите использовать функцию-конструктор для

создания мячей? Ведь для того, чтобы просто создать мяч, обладающий рядом свойств, придется

затратить массу усилий. если требуется просто создать парочку мячей с нескольки-

ми свойствами, применение объектно-ориентированного программирования, вероятно, являет-

ся излишним. С другой стороны, чем больше мячей необходимо создать, тем удобнее будет сде-

лать это с помощью одной строки кода для каждого мяча. Иными словами, ценность функции-

конструктора увеличивается по мере увеличения ее повторного использования в программе.

Если вам понадобятся мячи в другой программе, то время и усилия, потраченные на соз-

дание функции-конструктора О, будут вполне оправданы. Таким образом, ценность

функции-конструктора увеличивается и по мере увеличения ее повторного использования в

других программах.

Вы можете позволить другим программистам использовать свою функцию в их програм-

мах. При этом программистам не нужно будет анализировать всю внутреннюю разработку

функции-конструктора. что им нужно, — это понимать простые взаимодействия, реали-

зованные в методе. Таким образом, затратив время и силы на исходном этапе, вы создадите

доступный для неоднократного использования и, следовательно, ценный объект.

Подтверждением последней концепции неоднократного использования является то, что

компания Macromedia проделала с ActionScript: она создала ряд различных классов, которые,

скорее всего, будут востребованы широким кругом Flash-программистов. Теперь вы, как

программист, можете взять эти классы и использовать их своих собственных программах.

312 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Классы можно использовать в том виде, в каком они есть. Можно также изменить или рас-

ширить их в соответствии со своими потребностями. Неоднократное использование объектов

такого рода является наиболее упоминаемым преимуществом объектно-ориентированного

программирования.

Однако не все классы имеют равный потенциал повторного использования. Следователь-

но, у программистов есть стимул для создания широко применяемых классов. Это и является

основной мотивацией создания цепочек наследования, состоящих из нескольких поколений,

поскольку это позволяет создавать обобщенные классы, широко доступные для неоднократ-

ного использования.

Хорошими примерами этой стратегии являются компоненты пользовательского интер-

фейса, такие как полоса прокрутки, комбинированное окно и поле списка, которые

Macromedia предоставляет в комплекте Flash MX. Например, если перетащить объект

в рабочее поле и воспользоваться панелью Movie Explorer (Проводник фильма) для

просмотра его кода вы обнаружите комментарии, подобные приведенным ниже.

FSelectableListClass

EXTENDS

CLASS

EXTENDS FUIComponentClass

FListBoxClass

EXTENDS FSelectableListClass

IMPLEMENTS

FScrollSelectListClass

EXTENDS FSelectableListClass

FListltemClass

EXTENDS FSelectableltemClass

Эти комментарии отображают трехъярусную иерархию наследования.

• Ярус 1 — вверху находится FUIComponentClass.

• Ярус 2 — FSelectableListClass и FSelectableltemClass наследуют свойства

FUIComponentClass.

• Ярус 3 — FScrollSelectListClass наследует свойства FSelectableListClass,

a FListltemClass — свойства FSelectableltemClass.

Свойства, необходимые для всех компонентов, можно поместить в FUIComponentClass

и предоставить в коллективное использование всем классам данной иерархической структу-

ры. Свойства, необходимые для всех списков, в которых нужно выбирать элементы, можно

поместить в FSelectableListClass и предоставить в коллективное использование объек-

там класса FScrollSelectListClass. И наконец, свойства, необходимые для всех выби-

раемых элементов, можно поместить в FSelectableltemClass и предоставить в коллек-

тивное использование объектам класса FListltemClass.

Объект, созданный с помощью функции-конструктора будет иметь общие свойст-

ва по всей цепочке наследования, обратно до класса FUIComponentClass. Например, объ-

ект класса FListltemClass будет иметь свойства, общие с FSelectableltemClass и

FUIComponentClass.

ИСПОЛЬЗОВАНИЕ ОПЕРАТОРА NEW для СОЗДАНИЯ ЦЕПОЧЕК

НАСЛЕДОВАНИЯ

Иерархию наследования можно задавать по собственному усмотрению, создавая классы или

повторно используя уже существующие. Например, если вы хотите создать собственные компо-

ненты, то можете взять за основу и повторно использовать существующие классы Macromedia.

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 313

Иерархические структуры из нескольких поколений можно создавать двумя способами.

Если рассматривать объекты prototype в качестве связующих звеньев между родительски-

ми и дочерними элементами, то рассматриваемый в этой главе подход заключается в созда-

нии новых цепочек. Это стандартный и рекомендуемый способ начала процесса.

Другой подход, который заключается в выполнении повторной компоновки су-

ществующих цепочек, рассматривается в главе 21 "Упаковка данных и

функций с помощью пользовательских

Предположим, что имеются четыре функции-конструктора: Bird (Птица), Raptor

(Хищник), Eagle (Орел) и BaldEagle (Белоголовый орел). Очевидно, что эти четыре класса

находятся в иерархической взаимосвязи. Как связать их в структуру типа

Вы уже видели, каким образом объекты привязываются к объекту prototype их функ-

ций-конструкторов. Это происходит автоматически, при создании экземпляра объекта с по-

мощью оператора new. Но вы еще не пытались создавать никаких экземпляров. Вы только хо-

тите объединить существующие классы в иерархическую структуру.

Начните с рассмотрения двух верхних классов иерархии: Bird и Raptor. На минутку сде-

лайте вид, что хотите создать несколько экземпляров в классе Raptor, и хотите, чтобы каж-

дый из них обладал всеми свойствами, присущими классу Bird. Этого можно достичь, если

поместить все свойства класса Bird в объект prototype класса Raptor. По существу, это

означает, что вы хотите, чтобы объект prototype стал членом класса Bird. Иными

словами, вы хотите сказать, что

= new

Будет ли это работать? Да! Этот подход может показаться немного странным, потому что

до сих пор мы рассматривали прототип только как нечто, создаваемое автоматически при

создании функции. В данном же случае новый объект-прототип создается как член сущест-

вующего класса.

Теперь разберемся в деталях. Ниже приведены функция-конструктор Bird и предложе-

ние, назначающее свойство movement для объекта prototype.

function Bird ( ) {

// локальное свойство "covering"

=

}

// коллективное свойство

Любой объект, созданный с помощью функции Bird, будет иметь два свойства:

• локальное свойство, covering = "feathers";

• коллективное свойство,

Ниже приведена функция-конструктор Raptor:

function Raptor ( ) {

// здесь указывается предложение

}

В данный момент функция-конструктор Raptor представляет собой всего лишь пустую

оболочку. Несмотря на это, как и все остальные функции, Raptor уже имеет объект

prototype, который был задан при создании функции. Macromedia не сделала этот факт

очевидным. Так, например, в цикле in объект prototype не отображается:

a ( in Raptor) trace (a) ,• // ничего не отображается

314 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Несмотря на это, объект-прототип имеется, и это можно подтвердить, используя недоку-

ментированную функцию ASSetPropFlags (установить метки

null, 8, 1) // "открыть" скрытые свойства

for (a in Raptor) // отображается "prototype"

В объекте Raptor пока что ничего не появилось. Это можно подтвердить пу-

тем применения цикла следующим образом:

for a ( in // ничего не отображается

Подробная информация о скрытых свойствах прототипа приведена в главе 21

"Упаковка данных и функций с помощью пользовательских объектов".

Необходимо создать новый объект-прототип для функции Raptor — тот, что обладает

всеми свойствами класса Bird. С этой целью используется предложение

= new Bird(). Теперь, если проверить содержимое объекта

даже без применения функции ASSetPropFlags вы обнаружите

два свойства, унаследованных от класса Bird:

for (a in // "movement" "covering"

Поставленная цель достигнута! Теперь любой объект, созданный с помощью функции-

конструктора Raptor, будет обладать свойствами класса Bird.

Вспомните, что вы намеревались создать экземпляры класса Raptor. В реальности Raptor

является все еще слишком обобщенным классом для того, чтобы иметь экземпляры. Сначала

необходимо установить связь класса Eagle с классом Raptor же образом, как только

что задавалась связь между Raptor и Bird. Затем надо установить связь BaldEagle с Eagle.

И наконец, создаются экземпляры класса BaldEagle. Ниже приводится костяк программы,

которая выполняет все эти операции и выполняет проверку работы кода.

// Bird

function Bird ( ) {

// локальное свойство "covering"

=

}

// коллективное свойство "movement"

// функция-конструктор Raptor

function Raptor ( ) {

// здесь указывается предложение

Raptor = new

// Raptor наследует свойства класса Bird

// Eagle

function Eagle ( ) {

// здесь указывается предложение

}

= new

// Eagle наследует свойства класса Raptor

// BaldEagle

function BaldEagle ( ) {

// здесь указывается предложение

}

= new Eagle

// BaldEagle наследует свойства класса Eagle

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 315

baldEaglel = new // создание экземпляра BaldEagle

for (a in // отображает "movement" и "covering"

// отображает "fly"

// отображает "feathers"

Последние три строки программы показывают, как была достигнута поставленная цель:

все свойства класса Bird переданы вниз по Eagle и BaldEagle и появля-

ются в экземплярах класса BaldEagle.

Данная цепочка наследования является всего лишь основой, поскольку внутри трех ниж-

них классов не добавлены или не удалены никакие свойства. В реальной программе каждый

класс для подтверждения ценности своего существования должен был бы выполнять что-то

полезное. В данном примере можно было добавить какие-то свойства, характерные для

того или иного подкласса. Например, хищники (Raptor) обладают признаками, которые не

являются характерными для всех птиц (Bird), орлы обладают признаками, которые

не являются присущими для всех хищников, а белоголовые орлы (BaldEagle) обладают

признаками, не являющиеся характерными для всех орлов.

Цепочки наследования рассматриваются также в главе 21 "Упаковка данных и

функций с помощью пользовательских объектов".

ФУНКЦИИ КАК ДАННЫЕ

Каждая функция является объектом и, следовательно, может иметь свойства. Так, приве-

денный ниже пример показывает, как можно объявить функцию и задать ее свой-

ство counter, которое устанавливается в значение, равное 0.

function myFunc ()

=

Как правило, свойства функций не назначаются, но они могут понадобиться при работе с

классами. Естественным местом хранения данных о классе является функция-конструктор. В

приведенном ниже примере является функцией-конструктором. Свойство

counter может, например, использоваться для подсчета количества созданных эк-

земпляров этого класса:

function MyClass ()

= 0;

Методика хранения данных в функции-конструкторе описывается в главе 21

"Упаковка данных и функций с помощью пользовательских объектов".

МЕТОДЫ и

Методы apply и определенные для всех функций, позволяют обратиться к

функции или методу, как если бы это был метод любого назначенного объекта. Объект

указывается как первый аргумент метода apply или Внутри активизируе-

мой функции назначенный объект обозначает ключевое слово this. При обращении

к функции или методу без использования apply О или call вы будете привязаны к на-

значенному для this значению по умолчанию. Например, при обращении к методу this от-

носится к объекту, к которому принадлежит данный метод. Если выполняется вызов функ-

ции на временной шкале, то this относится этой временной шкале.

316 ЧАСТЬ ill. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Подробная информация на эту тему приведена в разделе "Явный обзор данных

с помощью ключевого слова this" далее в этой главе.

С помощью методов apply и call О можно сделать так, что ключевое слово бу-

дет относиться к любому необходимому объекту.

Вызываемой функции можно передавать любое количество параметров. Единственное

отличие между методами apply и заключается в том, что при использовании ме-

тода apply () параметры передаются в виде массива, а при использовании метода call О

выполняется передача списка, разделенного запятыми.

Формат методов выглядит следующим образом:

myArgl,

Методы apply () и call будут получать значения, которые функция возвращает при

обычных условиях.

Если первым аргументом является null, то будет использоваться значение this, задан-

ное по умолчанию. В этом случае методы apply и ведут себя как обычные обра-

щения к функции за исключением того, что метод apply передает параметры в массиве.

Чтобы что вы сознательно не передаете никаких параметров, второй аргумент

также можно задать равным Пи использовании этой методики достигается тот же эф-

фект, что и при полном пропуске второго аргумента.

В приведенном ниже примере метод apply используется для сброса счетчиков в трех

классах.

Подробная информация об использовании класса для хранения счетчика при-

ведена выше, в подразделе "Функции как данные".

Сначала объявим функцию resetCounter предназначенную для установки свойства

counter (счетчик) какого-то объекта (представленного ключевым словом this) в значение о.

Затем создадим три класса — Classl, Class2 и — и зададим для каждого из них

свойство counter. Установим свойства counter в ненулевые значения так, чтобы функция

resetCounter могла выполнить необходимую операцию.

И наконец, применим цикл и метод apply для передачи классов, одного за дру-

гим, в функцию resetCounter Второй аргумент метода установим равным

null, поскольку функция resetCounter не принимает никаких аргументов.

// объявление функции resetCounter

function resetCounter () {

= 0;

создание трех классов, каждый из которых обладает свойством

function

= 1;

function

=

function

=

// использование метода для передачи классов,

одного за другим, в

функцию

for (i i < 4; i++) {

className = // образование имени класса

}

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 317

В приведенном ниже примере в каждом классе создаются три свойства counter. Свойст-

во counterl устанавливается в значение 1, свойство counter2 — в значение 2, а

— в Значения счетчиков передаются в функцию setCounters () в

виде массива в качестве второго аргумента метода apply Функция из-

влекает эти значения с помощью свойства arguments, в котором хранятся переданные

функции аргументы.

Объект arguments был рассмотрен ранее в этой главе, в разделе "Передача

данных в функции с помощью аргументов".

// определение функции

function setCounters () {

=

=

определение классов

function

function И

function

// создание и инициализация трех счетчиков в каждом классе

for (i = 1; i < 4; {

className =

}

Метод apply не поддерживает ассоциативных массивов в качестве своего второго ар-

гумента. Именованные свойства ассоциативного массива будут утеряны, а вызываемая функ-

ция получит только элементы с числовыми индексами.

Дополнительная информация об ассоциативных массивах представлена в гла-

ве 19 "Использование встроенных базовых объектов".

Свойство arguments функции можно использовать в качестве второго аргумента метода

apply Так, в приведенном ниже примере сначала вызывается функция myHandler с

двумя 2. Функция myHandler О, в свою очередь, вызывает функцию

myDelegate С помощью свойства arguments функция myHandler "пересылает" свои

аргументы в качестве второго аргумента метода apply

Обратите внимание на то, как возвращается значение от функции () к

функции myHandler () и обратно.

Ключевое слово this функции myDelegate относится к временной шкале, поскольку

первым аргументом метода apply было значение null. Таким образом, в последнем дей-

ствии trace величины рО и показаны как обычные переменные временной шкалы.

function myDelegate () {

=

this.pl =

return

}

function {

ret = (null, // "пересылка" аргументов

return ret;

}

result =

trace // true

trace (pO + + // 1 2

318 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью

ЯВНЫЙ ОБЗОР ДАННЫХ

Обзор данных представляет собой процедуру сообщения интерпретирующей программе

о том, где следует искать переменную, видеоклип или массив. Интерпретирую-

щая программа может выполнять поиск в функции, в объекте, во временной шкале, в объекте

Object или в идентификаторе _global. Можно непосредственно указать определенное ме-

сто поиска, и интерпретирующая программа будет осуществлять его именно там. В этом и за-

ключается явный обзор данных, темой данного подраздела. Если сознательно не

сообщать интерпретирующей где следует выполнять поиск, то она будет следо-

вать собственным правилам автоматического обзора данных. Этот тип поиска рассмотрен

ниже, в разделе "Автоматический обзор данных".

На В данном подразделе термины временная шкала или обозначают

временную шкалу видеоклипа и любые присоединенные обработчики событий

и кнопки.

Область действия данных похожа на сложную файловую систему. Ее можно использовать

как для поиска данных, так и для сохранения их конфиденциальности. К сожалению, случа-

ется и пропуск файлов: когда интерпретирующая программа не может найти или об-

наруживает что-либо неверное, могут возникать неявные ошибки.

Подробная информация об идентификаторе _global приводится в главе 12

"Управление переменными, данными и типами данных".

Один из способов предотвращения подобной проблемы заключается в применении яв-

ного обзора данных для сообщения интерпретирующей программе ActionScript точного места

поиска. При этом для сообщения интерпретирующей программе ActionScript места поиска

элемента данных, к которому производится обращение, используется синтаксис с примене-

нием точек (или исключенный синтаксис с применением символов косой черты). Например:

// сообщает интерпретирующей программе, где искать

// видеоклип

= 10; // искать в _global

ОГРАНИЧЕНИЯ ЖЕСТКОГО КОДИРОВАНИЯ

Примером жесткого кодирования является использование имени видеоклипа, функции,

объекта или идентификатора _global для указания пути к элементу данных, как в приве-

денных выше примерах. Однако четкие и легкие в употреблении жестко закодированные пу-

ти делают код менее пригодным к неоднократному использованию. Рассмотрим

указанием пути (} Если необходимо использовать функцию

myFunc в каком-то другом проекте, но не с видеоклипом myCl ip, код нужно будет

несколько видоизменить. То же самое справедливо и для второго примера, т.е. если вы хотите

повторно использовать переменную myVar, но не хотите, чтобы она была глобальной.

Избежать жесткого кодирования можно с помощью относительного обращения или ключе-

вого слова this. Еще одна возможность заключается в применении автоматического, а не

явного обзора данных.

ЯВНЫЙ ОБЗОР ДАННЫХ С ПОМОЩЬЮ ОТНОСИТЕЛЬНЫХ ОБРАЩЕНИЙ

Если областью обзора данных является видеоклип, то наиболее распространенный способ

повышения возможности неоднократного использования кода заключается в применении

относительных обращений. Это означает, что для указания видеоклипа, в котором должен вы-

полняться поиск, используется текущего видеоклипа. Например:

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 319

// выполнять поиск в родительском клипе

// выполнять поиск в "прародительском" клипе

Предположим, например, что функция myFunc находится в видеоклипе основной

временной шкалы. При этом абсолютный путь к клипу будет следующим:

(Любой путь, начинающийся с префикса _root, называется "абсолютным путем", потому

что он указывает местоположение видеоклипа, начиная с основной временной шкалы, а не

относительно другого видеоклипа.) Теперь, если необходимо обратиться к функции

myFunc () из дочернего клипа, скажем, из можно указать путь

myFunc При обращении из клипа, например из

_root можно указать путь _parent Если использо-

вать этот код с видеоклипами myClip2 и то, чтобы применить его к

другим именам экземпляров видеоклипов, менять уже ничего не нужно.

ЯВНЫЙ ОБЗОР ДАННЫХ С ПОМОЩЬЮ КЛЮЧЕВОГО СЛОВА THIS

В третьем типе явного обзора данных используется ключевое слово this, за одним-

исключением: this относится к видеоклипу, в котором располагается пред-

ложение. В следующих подразделах приведено несколько примеров общего правила. После

этого мы рассмотрим исключение.

ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО СЛОВА THIS: основы

Ключевое слово this обычно относится к временной шкале (в том числе с присоединен-

ными обработчиками событий и кнопками). В видеоклипах ключевое слово можно ис-

пользовать для того, чтобы интерпретирующая программа ActionScript распознала, что вы-

полняется обращение к методу ip, а не к глобальной функции с тем же именем. На-

пример, если поместить приведенный ниже код во шкалу, то интерпретирующая

программа ActionScript посчитает, что вы обращаетесь к глобальной функции

duplicateMocieClip и сгенерирует ошибку.

При вставке ключевого слова this будет активизироваться метод MovieClip, и код будет

работать корректно:

// все в порядке

Подробная информация о функции приведена в

главе 17 "Демонстрация мощи видеоклипов".

В приведенном ниже примере показаны три варианта использования ключевого слова

this во временной шкале для обзора данных.

• Переменная находится в свойстве объекта на временной шкале.

• Обращение к переменной выполняется внутри функции.

• Обращение к переменной производится в видеоклипе.

Три предложения trace в конце кода подтверждают, что в каждом случае интерпрети-

рующая программа рассматривает this как шкалу. Если с равно 300, то можно

сделать вывод о том, что данное предложение "видит" а и b на временной шкале. Если бы она

видела свойства а и Ь, к примеру, в объекте то с равнялось бы 3, а не 300.

320 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

а • 100; // переменная объявлена во временной шкале видеоклипа

b = 200; // переменная объявлена во временной шкале видеоклипа

с а + // переменная объявлена во временной шкале видеоклипа

= : 1, Ь : 2, с : + // #1 "this" в свойстве

function {

// #2 "this" в функции

}

// # 3 "this" во временной шкале - отображается 300

// отображается 300 -в объекте

// отображается 300 -в функции

Областью действия переменной является временная шкала, в которой она находится, да-

же если она используется внутри объекта или функции. Кажется но интерпре-

тирующая программа не выполняет сначала проверку внутри объекта наличия свойств, сов-

падающих с вызываемым именем.

ИСКЛЮЧЕНИЕ: ОБЗОР ДАННЫХ в ОБЪЕКТЕ

В предыдущем подразделе мы увидели, что в большинстве ситуаций, если ключевое слово

this указывалось в качестве пути к переменной на временной шкале, то под ним подразуме-

валась шкала. Из этого правила есть одно важное исключение — в пределах метода

объекта ключевое слово this привязывается к объекту.

За исключением этого момента правила обзора данных для функций такие же, как и для

переменных, т.е. на временной шкале (или соответствующих обработчиках событий и кноп-

ках) или в пределах функции на временной шкале областью действия this явля-

ется временная шкала.

Приведенный ниже код выполняет, в сущности, ту же операцию, что и код в предыдущем

примере, но только вместо переменных используются функции. Четыре вызова функции,

стоящие в конце кода (строки говорят о том, что происходит. В строке 10 показано,

что при обращении к а О во временной шкале интерпретирующая программа ищет на

временной шкале функцию а Аналогичным образом, интерпретирующая программа ищет

на временной шкале функцию а при обращении к ней внутри (строка Третий вы-

зов функции (строка 12) показывает, что активизация this . а внутри функции myFunc

на временной шкале ничего не меняет. Интерпретирующая программа все равно ищет функ-

цию а () на временной шкале. Однако последний вызов функции показывает, что когда

this . а () активизируется внутри метода, интерпретирующая программа ищет функцию а

в объекте, которому принадлежит данный метод.

1 function a 0 ("function

2

3

4

5

6

7

8

9

function b 0 // областью действия

// временная шкала

myObj = {

а : function () ("object function

b : function // областью действия

}

function {

this.aO; // областью действия "this" является

}

"this" является

,

"this" является

временная шкала

10: // отображается "function a" - областью действия "this"

// является временная шкала

11: "function a"

myFuncO; // отображается "function a"

// отображается "object function aIT

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 321

ПСЕВДОНИМЫ ФУНКЦИЙ СОХРАНЯЮТ свою СОБСТВЕННУЮ ОБЛАСТЬ ДЕЙСТВИЯ

Если задать переменную равной функции или методу, то она сохранит свою собственную

область действия. Она не принимает область действия функции или Так, в приведен-

ном ниже примере переменная устанавливается равной Ис-

полнение () отображает корректно, поскольку используется метод,

областью действия которого является объект. Однако при исполнении функции

myAliasFunc получим значение (или пустую строку во Flash 5), так как обла-

стью действия переменной myAliasFunc является шкала, в которой нет такой

переменной, как propl.

myObj = new

= function 0 {

}

= 1;

myAliasFunc =

// отображается "1"

myAliasFunc // undefined, свойство во временной шкале не

// определено

АВТОМАТИЧЕСКИЙ ОБЗОР ДАННЫХ

При автоматическом обзоре данных вы просто указываете прямую ссылку на перемен-

ную, функцию, объект или массив, без применения точечного синтаксиса. При этом интер-

претирующая программа ActionScript выполняет обзор данных автоматически.

Например, ниже приводится прямая ссылка.

// интерпретирующей программе не сообщается, где следует искать

// функцию

В этом случае интерпретирующая программа начинает поиск там, где сделана ссылка на

данные. Оттуда может выполняться поиск во временной шкале видеоклипа (в том числе в

связанных с ней обработчиках событий и кнопках), в функциях или объектах, в том числе и в

цепочках наследования. И, наконец, последнее место, в котором проводится поиск, — это

_global.

По умолчанию цепочки обзора ActionScript очень просты. Цепочка обзора представляет со-

бой список объектов, в которых следует проводить поиск. Если с помощью методик объект-

но-ориентированного программирования, описанных ранее в этой главе, не была создана бо-

лее сложная структура, то, как правило, цепочкой обзора является последовательность

шкала или шкала-функция.

Поиск в цепочках выполняется справа налево, т.е. сначала выполняется поиск в функции, за-

тем — во временной шкале, потом — в объекте ect и наконец — в _global.

Встречаются и более длинные цепочки, такие как

внешняя функция-внутренняя функция, когда внутренняя функция объявляется внутри

внешней.

Цепочка обзора временно удлиняется при использовании предложения with, которое до-

бавляет еще один объект на самом нижнем уровне цепочки. Этот добавленный объект

(объект внутри предложения with) всегда проверяется первым внутри предложения with.

По завершении выполнения этого он удаляется из цепочки обзора.

В следующих трех примерах показаны начальная точка (в которой объявлена переменная

или функция) и типовая итоговая цепочка обзора.

322 ЧАСТЬ РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Начало на временной шкале (или в присоединенном к ней обработчике событий или кнопке).

Пример:

// на временной шкале

Цепочка обзора: шкала.

Примечание: в цепочку обзора не входят другие временные зависимости.

Начало в свойстве объекта или элементе массива на временной шкале.

В этом примере переменная объявлена на временной шкале и ссылается на

свойство myObj Затем это свойство отображается двумя способами: с по-

мощью метода объекта, определенного в строке 4 и вызываемого в стро-

ке 5, и с помощью предложения trace во временной шкале, в строке 6.

myVar = "main";

rayObj = { myVar :

: myVar,

myMethod : function ()

// отображается "main"

// отображается "main"

Цепочка обзора: шкала.

Примечание 1. Если значением myPropl в является (обратите

внимание на добавление ключевого слова this), то цепочкой обзора все равно будет

последовательность j шкала.

Примечание 2. В цепочку обзора не входят "подчиненные" свойства или элементы.

Например, в строке 2 содержится myObj но оно игнорируется.

Начало в объявлении функции или метода.

В этом примере переменная myVar, будучи объявленной во временной шкале

(строка 1), сначала упоминается в объявлении функции во временной шкале

(строка 3), а затем — в методе j . myFunc (строка 5).

myVar =

function {

}

myObj = : 99 , myFunc : {

// 10

// 10

Цепочка обзора:

Примечание: в цепочку обзора не входят "подчиненные" свойства или элементы. На-

пример, интерпретирующая myVar : 99 (строка 5).

Последнее предложение, myObj () работает идентично и во

Flash 5, и во Rash MX, при условии, что оно находится в той же временной шкале,

что и объявление объекта myOb j над ним (строка 5). Однако при попытке выпол-

нить метод myOb j . myFunc из другой временной шкалы, во Rash 5 код

работать не будет (или же будет отображена переменная myVar другой временной шкалы,

если таковая Flash MX метод myObj можно выполнить из дру-

гой временной шкалы, и при этом будет отображена переменная myVar той временной

шкалы, в которой был определен объект myOb

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 323

Предположим, например, что приведенный выше код располагается в основной времен-

ной шкале и в ней же имеется клип circle, во временной шкале которого имеются следую-

предложения:

= "circle";

// во Plash 5 отображается "circle", а во

Flash MX - 10

При работе с Flash 5 в результате выполнения второго предложения отобразится

"circle", а при использовании Flash MX— 10. Во Flash MX областью действия метода все

время является временная в которой он был определен, и ею никогда не является

временная шкала, из которой выполнялся вызов метода. (В этом месте Flash MX соответству-

ет стандарту ЕСМА-262, a Flash 5 отходит от него.)

Нововведением Flash MX также является то, что функциональный литерал, за-

данный внутри принимает область действия внешней функции. Во

Flash 5 его областью действия являлась шкала.

В приведенном ниже примере функция относится к функционально-

му литералу внутри функции Во Flash MX областью действия функцио-

нального литерала является функция outerFunction О , что обеспечивает доступ к пара-

метру arg. Следовательно, когда функциональный литерал возвращается в строку 4, он

включает в себя аргумент, который отображается при выполнении функции в строке 5. Во

Flash 5 областью действия функции innerFunction () является временная шкала, в кото-

рой аргумент arg не определен, поэтому в строке 5 будет отображено

1: function outerFunction (arg) {

return innerFunction = function () ("Argument was:

}

4: myFunc =

5: // во Flash MX отображается "Argument was: myArg"

Это пример цепочки обзора, состоящей из пяти звеньев:

функция.

Приведенная ниже функция О показывает, как использовать эту новую

функциональность для присоединения программным образом обработчиков событий к видео-

клипам. Во Flash MX функция makeHandler возвращает аргумент name. Во Flash 5 верну-

лось бы значение (предполагается, что во временной шкале не объявлена перемен-

ная name), потому что внешняя функция не является областью действия внутренней функции.

// спасибо Gary Grossman, главному инженеру коллектива Macromedia

Flash!

function {

return function () {

name

function names) {

for (var i++) {

// отображается "Handler onPress invoked."

etc.

.

324 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

В разделе "Возможные проблемы" обсуждается такая возможность размеще-

ния на временной шкале, чтобы переменная или функция была не доступна

даже в пределах одной временной шкалы.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему я не могу получить доступ к переменной или функции на одной и той же вре-

менной шкале ?

Если воспроизводящая головка ни разу не доходила до кадра, содержащего

определенную переменную или функцию, то интерпретирующая программа

ActionScript о ней ничего не знает.

Пусть, например, в кадр 1 помещен следующий обработчик события:

= {

Пусть в кадр 2 той же временной шкалы помещено предложение х = В этом случае

при первом исполнении (в первом кадре) предложение trace (x) в обработчике события бу-

дет отображать потому что переменная х еще не объявлена. После того как ин-

терпретирующая программа "увидит" переменную х (т.е. после того, как воспроизводящая

головка достигнет второго кадра), программа "запомнит" ее, и, начиная с этого момента и в

дальнейшем, предложение trace (х) в обработчике события будет отображать "10" при

достижении любого кадра, в том числе и кадра

Знайте, что интерпретирующей программе ActionScript становятся известны все функции

кадра, как только она его достигнет. Таким образом, функцию можно выполнять еще до ее

объявления, в пределах одного кадра:

// отображается "hi"

function {

}

Почему я получаю возвращаемое значение

Функции возвращают значение в случае отсутствия предложения return или при

его наличии, но без указания возвращаемого значения. Проверьте программу на наличие таких си-

туаций. В обоих следующих случаях необходимо использовать предложение return

Нет предложения return:

{

result = numberToBeDoubled *

}

Нет возвращаемого значения:

function {

result = numberToBeDoubled * 2

return;

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 325

Часть моей функции никогда не выполняется. Почему?

Если часть функции никогда не выполняется, то, вероятно, это может быть потому, что в

код внесено предложение return. Вот простой пример подобной проблемы:

function {

if (num < 0)

err = "negative numbers not supported";

return ("Your room number is // эта строка никогда

1

2

3

4

5

не выполняется

6

Проблема возникает из-за того, что вокруг двух предложений, которые должны были бы

являться кодом возврата ошибки (строки 3 и 4), нет фигурных скобок. Таким образом, стро-

ка 4 выполняется всегда, что приводит к возврату функции. Строка 3 пропускается, если num

больше или равно 0. Если 3 не выполняется, то ошибка (err) не определяется и по-

этому строка 4 возвращает величину При этом строка 5, которая должна вернуть

номер комнаты (room number), вообще никогда не выполняется.

Функция должна выглядеть следующим образом:

function num) {

i f < {

err = "negative numbers not supported";

return ("Your room number is

FLASH ЗА РАБОТОЙ: РАСЧЕТ ФАКТОРИАЛОВ — ПРИМЕР

РЕКУРСИИ

Рекурсию часто демонстрируют на примере функции, выполняющей расчет факториалов.

Факториалы часто используются для того, чтобы сколько различных способов

имеется для упорядочивания или систематизации ряда событий.

Факториал числа вычисляется по формуле

(число) х (число - 1) х (число -

и т.д. до тех пор, пока не будет достигнут последний множитель, равный 1. Таким обра-

зом, факториал числа 4 равен:

или 24.

По определению факториалы 0 и 1 равны

В виде псевдокода функцию можно представить следующим образом:

if (число < нуля) отклонить

if (число не целое) округлить его до целого в сторону уменьшения

if (числом является 0 или 1) факториал = 1

if (число > 1) факториал = число х - 1)

Последняя строка делает функцию рекурсивной. Чтобы получить факториал числа, это чис-

ло нужно умножить на факториал числа, меньшего на Таким образом, цикл начинается снова.

Вот как функция расчета факториала выглядит на языке

326 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

function

myNumber = // округлить до ближайшего цело-

в сторону уменьшения.

if (myNumber < // Если число < 0, отклонить его.

return ("факториалы отрицательных чисел не

if (myNumber < 2 ) { // Если числом является 0 или 1

return // факториал = Также разрывается цикл рекурсии!

else return (myNumber * - // рекурсия 9

10: }

11: // отображается "24"

Когда вызывается с аргументом 4, то первая строка кода, которая что-

то делает, — это строка 9. Она начинает возвращать ial но, естественно, интерпре-

тирующая программа, прежде чем она сможет вернуть значение, должна вычислить

factorial

Когда функция вызывается с аргументом 3, снова выполняется предложе-

ние else в строке 9, Функция начинает возвращать но интерпретирую-

щая программа теперь должна вычислить factorial

Функция вызывается с аргументом 2. В предложении else в строке 9 ин-

терпретирующая программа возвращает 2*factorial но сначала ей нужно рассчитать

И наконец, когда интерпретирующая программа выполняет функцию то

предложение if (myNumber < 2) в строке 3 становится истинным. Функция возвращает

значение 1.

Теперь интерпретирующая программа выполняет предложение return, которое было ос-

тавлено "в подвешенном состоянии". Самый последний цикл дает значение 2. Это приводит

к тому, что предыдущий цикл дает значение 6, а цикл перед ним — 24, которое и является

значением, возвращаемым функцией

ГЛАВА 15. ОБЪЕДИНЕНИЕ ПРЕДЛОЖЕНИЙ в ФУНКЦИИ 327

ГЛАВА

ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ

И УСТАНОВЛЕНИЕ

ПОСЛЕДОВАТЕЛЬНОСТИ

В ЭТОЙ ГЛАВЕ...

Инициирующее действие: временная шкала и обработчики событий 329

Создание сценариев на основе временной шкалы 330

Создание сценариев на основе событий

Установление последовательности действий с помощью порядка выполнения 353

Возможные проблемы 354

Flash за работой: универсальные процессоры событий Flash 354

ИНИЦИИРУЮЩЕЕ ДЕЙСТВИЕ: ВРЕМЕННАЯ ШКАЛА

И ОБРАБОТЧИКИ СОБЫТИЙ

Интерпретирующая программа по своей природе линейна. Если ей не давать

никаких специальных распоряжений, она просто будет последовательно выполнять предло-

жения. В предыдущей главе мы увидели, что вызовы функций позволяют нарушить такую по-

следовательность. Они позволяют прервать последовательный ход выполнения программы,

выполнить ряд предложений, определенных где-то в другом месте, а затем вернуться в то ме-

сто, где последовательное выполнение программы было прервано.

Подробная информация о вызове функций приведена в главе 15 "Объединение

предложений в функции".

В данной главе рассматриваются два других способа изменения хода выполнения програм-

мы. В одном из них используется шкала, а в другом — события. Каждый объект имеет

определенные события, наступления которых он ожидает. Например, всякий раз, когда пользо-

ватель на кнопке, она генерирует событие onPress. Чтобы отследить событие, необхо-

димы специальные функции, именуемые обработчиками событий. Схема, работающая на осно-

ве временной шкалы и также называемая "кадровой", основана на том, что при воспроизведе-

нии кадра интерпретирующая программа исполняет находящийся в нем код.

Еще один способ изменения хода выполнения программы заключается в ис-

пользовании глобальной функции которая описывается в

главе 17 "Демонстрация мощи видеоклипов".

Источником возможной путаницы является тот факт, что наиболее распространенные со-

бытия также часто бывают связаны с кадрами. Так, всякий раз по достижении кадра видео-

клип генерирует событие onEnterFrame. Событие onEnterFrame позволяет выполнять

один и тот же код всякий раз, когда определенный видеоклип достигает кадра, без помещения

этого кода в каждый кадр. В отличие от такого подхода, при использовании кадрового про-

граммирования выполняется тот код, который находится в кадре, когда воспроизводящая го-

ловка достигает его.

Отличия между кадровым и событийным управлением ходом выполнения про-

граммы описаны в главе 11 "Знакомство с ActionScript".

Большая часть этой главы посвящена программированию, основанному на событиях. Од-

нако сначала коротко рассмотрим методику программирования, основанного на использова-

нии временной шкалы.

СОЗДАНИЕ СЦЕНАРИЕВ НА ОСНОВЕ ВРЕМЕННОЙ ШКАЛЫ

Иногда шкала является самым естественным средством систематизации про-

грамм. Хорошим примером является меню, которое в свернутом состоянии

находится в одном кадре (например, в кадре 1), а в развернутом — в другом (например, в кад-

ре 2). Примером такого меню может служить файл находящийся на прила-

гаемом к книге компакт-диске. На рис. 16.1 и 16.2 показано развернутое состояние меню в

том в каком оно отображается соответственно в SWF- и во FLA-файлах.

Временная шкала описывается в главе 2 "Интерфейс Flash".

Если действие связано с одним из состояний меню (свернутым или разверну-

тым), то имеет смысл поместить его в кадр с соответствующим состоянием.

Например, на рис. 16.1 показано приложение "Картинная галерея", в котором каждый

элемент меню позволяет пользователю выбрать и отобразить определенную репродукцию

картины. Когда меню разворачивается, отображаемая в данный момент

"затеняется" (коэффициент прозрачности _alpha устанавливается равным 50) так, что она

меньше отвлекает внимание.

На рис. 16.2 изображен файл FLA этого же приложения. Временная шкала содержит

всплывающее меню, а воспроизводящая головка находится в кадре 2 слоя 1. Свер-

нутое состояние меню помещено в кадр 1, а развернутое — в кадр 2. Когда меню разворачива-

ется (путем перехода к кадру 2), происходит активизация кода в этом кадре, т.е.

currentPicture = и текущая репродукция затеняется.

330 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Option 5

Option 4

Option 3

Рис. При кадрового программирования развернутое состояние раскрываю-

щегося меню достигается за счет перемещения воспроизводящей в кадр 2

Кроме того, при наличии кода, последовательно, но логически

из двух или нескольких отдельных частей, для его компоновки можно использовать временную

шкалу. Если каждую часть кода поместить в отдельный кадр верхнего слоя и пометить каждый

кадр, несущий код, то размещение кода и его базовая структура будут сразу же понятны любому

пользователю, открывшему файл. На рис. 16.3 изображена временная шкала файла

автором которого является разработчик Flash Робин (Robin

(He беспокойтесь о том, для чего предназначен файл la. Он приведен

здесь только для того, чтобы продемонстрировать компоновку кода. Если вы хотите поближе

познакомиться с этим файлом, то найдете его на компакт-диске, прилагаемом к книге.)

Помещая код в различные кадры (в идеальном случае они должны иметь описательные

метки) и отправляя воспроизводящую головку в определенный кадр в нужный момент вре-

мени, можно создавать достаточно сложные приложения. До выхода версии Flash 5 это был

единственный способ моделирования вызовов функций во Flash. С появлением реальных

функций в версии Flash 5 управление ходом выполнения программы на основе временной

шкалы стало использоваться гораздо меньше. Однако два способа программирования не яв-

ляются несовместимыми и их можно эффективно применять в комбинации.

СОЗДАНИЕ СЦЕНАРИЕВ НА ОСНОВЕ СОБЫТИЙ

Flash-плейер генерирует событие для чтобы сигнализировать о том, что с объектом в

программе происходит нечто потенциально существенное. Например, пользователь мог щелк-

нуть на кнопке или изменить размеры рабочего поля; могла завершиться загрузка видеоклипа,

XML-файла или звука; пользователь мог изменить содержимое текстового поля и т.п.

ГЛАВА 16. ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 331

Options

Option 5

Option 4

Option 3

Option 2

Файл FLA раскрывающегося меню, показанного на рис. 16.1. Воспроизводящая головка

находится в кадре 2

Рис. 16.3. временной шкалы для компоновки кода, ко-

торый логически состоит из двух или нескольких отдельных частей

Когда плейер генерирует событие, с фильмом ничего не происходит. Чтобы с ним что-то

начало происходить, необходимо захватить событие путем создания обработчика событий

или создать для него функцию обратного вызова. Тогда при наступлении события Flash-

плейер вызовет эту функцию.

Например, функция обратного вызова может отображать новое изображение при нажатии

кнопки, изменять расположение элементов на рабочем поле при изменении его размеров, прове-

рять значение переменной после загрузки содержащего ее видеоклипа, проверять содержимое из-

мененного текстового поля и предпринимать определенные действия на основе введенного текста.

Все функции обратного вызова являются методами или объектами. Если объект является

видеоклипом, кнопкой или текстовым полем, функция обратного вызова будет выполняться

только в том случае, если этот объект в данный момент находится в рабочем поле.

Имена функций обратного вызова являются предварительно заданными: они всегда на-

чинаются с on, как, например, onEnterFrame. Обстоятельства, при которых они активизи-

руются, также являются предварительно заданными. Однако решение о создании определен-

332 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

.

ного обработчика для определенного объекта и о какие предложения нужно поместить в

обратного вызова, целиком зависит от программиста.

вы можете задать обработчик события для видеоклипа

поместив строку кода в кадр временной шкалы, содержащей

function () ("just

Flash-плейер будет активизировать функцию обратного вызова всякий когда видео-

клип достигнет нового кадра. В этом случае для каждого кадра в выходном окне будет ото-

бражаться фраза "just testing".

РАСШИРЕНИЕ ОБРАБОТКИ СОБЫТИЙ во FLASH MX

Во Flash 5 к кнопкам, видеоклипам и экземплярам классов и можно было

присоединять только документированные события. Обработчики событий кнопок и видео-

клипов должны были быть действиями объектов, а не кадров.

В главе 11 "Знакомство с ActionScript" рассматривались отличия между

виями объектов и действиями кадров. В этой же главе говорилось о том, как сле-

дует создавать обработчики событий видеоклипов с помощью действий объектов.

Во Flash 5 присоединять события к кнопке или видеоклипу необходимо было при разработке

фильма. Этот метод определения событий все еще применяется. В рабочем поле необходимо

щелкнуть на кнопке или видеоклипе, а затем воспользоваться панелью Actions (действия) для

создания обработчика событий on (для кнопок) или onClipEvent (для видеоклипов). Во

Flash 5 нельзя было присоединять обработчики событий кнопок и видеоклипов программным

образом при выполнении фильма. Кроме того, при выполнении фильма их нельзя было изме-

нить или удалить. Обработчики событий были статическими, или непреложными.

В противоположность этому, и во Flash 5, и во Flash MX события, связанные с экземпля-

рами классов и присоединяют программным образом при выполнении

фильма. Например, для использования обработчика событий для объекта снача-

ла программным образом создается объект, а затем к нему присоединяют обработчик собы-

тия, тоже программным путем, как показано ниже.

= new XML О; // создание объекта XML

= //

// обработчика

Подробная информация об XML представлена в главе 28 XML-данные".

Обработчики событий, созданные программным образом, при выполнении кода

можно также программно изменить или удалить. Они являются динамическими.

Обработчики событий on, onClipEvent и обработчики связанные с

XML, во Flash MX и во Flash 5 работают одинаково. Кроме того, во Flash MX вне-

сен ряд существенных расширений возможностей программирования на основе

событий.

Теперь создаваемые пользовательские объекты могут иметь обработчики событий и

получать уведомления о событиях. Объект, явным образом зарегистрированный для

получения событий определенного класса, называется приемником. Если вы хотите,

чтобы встроенный объект получал события, которые он обычно получать не может,

зарегистрируйте его как приемник.

ГЛАВА 16. ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 333

Обработчик можно создавать динамически для любого события, подлежащего захвату,

независимо от того, связано ли оно с классом Button, LoadVars,

Sound, Stage, TextField, XML или XMLSocket. Любое статическое событие on и

onClipEvent имеет динамический эквивалент. Например, onEnterFrame является

динамическим эквивалентом события ipEvent

Класс LoadVars описан в главе 27 "Взаимосвязь с сервером"

Теперь видеоклипы могут принимать все те же события и иметь все те же поведения,

что и кнопки, отличаясь лишь областью действия. Видеоклип кнопки — это видеоклип,

так же, как и кнопка, но гораздо более гибкий и сохраняющий

свою область не ограничивающий ее только той временной шкалой, на ко-

торой он находится. Некоторые пользователи Flash MX заявили, что они больше ни-

когда не будут пользоваться "старыми" кнопками.

Теперь можно задавать обработчики событий для четырех классов объектов, которые ни-

когда раньше не получали событий. Это классы LoadVars, Sound, TextField и Stage.

LoadVars, TextField и Stage, которые являются новыми типами объектов Flash MX.

Вместе с новыми типами объектов появились и новые события: onLoad для объектов

resize — для Stage, а также onChanged, onScroller, onSetFocus и

onKillFocus — для объектов TextField.

Теперь текстовые поля и кнопки имеют имена экземпляров. Это требуется для назна-

чения им динамических обработчиков событий.

Подробная информация об объекте TextField представлена в главе 20

"Использование встроенных объектов фильмов".

• Для существующего объекта Sound (для которого во Flash 5 не было определено обра-

ботчиков событий) теперь имеются два обработчика событий: onLoad и

• Новый класс Button делает кнопки "реальными" объектами и позволяет применять к

ним все технологии объектно-ориентированного программирования. Класс Button

имеет динамические эквиваленты всех статических событий on, которые имели кноп-

ки. Например, класс Button имеет метод onPress, эквивалентный событию on

(press). Кроме того, класс Button имеет два новых события: onSetFocus и

onKillFocus. Теперь кнопки также имеют имена экземпляров, что является требо-

ванием для присоединения динамических событий.

• Класс MovieClip тоже поддерживает события onSetFocus и onKillFocus, а также

динамические эквиваленты всех статических событий onClipEvent. Например, ме-

тод является эквивалентом события onClipEvent

В табл. представлены все события, которые плейер Flash 6 считает потенциально важными.

СИСТЕМНЫЕ СОБЫТИЯ и СОБЫТИЯ ВВОДА ПОЛЬЗОВАТЕЛЕМ

Во Flash существуют два основных типа событий: системные и события ввода пользовате-

лем. Системные события генерируются фильмом. К ним относится, например, достижение

видеоклипом определенного кадра или завершение процесса загрузки внешних данных.

334 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ТАБЛИЦА 16.1. СОБЫТИЯ FLASH MX

BUTTON KEY LOADVARS

on E

onResize

onScroller E

X

onSetFocus E

onKillFocus E

E

onRollOut E

onPress E

onRelease

onReleaseO E

utside

onDragOut '

onDragOver .

L(n)

onKeyDown Цп)

onClipEvent

onUnload

onLoad E(n)

onData

onConnect

MOVIE MOUSE SELEC- TEXT SOUND STAGE XML XML

CLIP FIELD SO-

CKET

Цп)

E(n),

E

E Цп) E(n)

E E(n)

E

E

E

E

E

E

E

E Цп)

E Цп)

E Цп)

E

E

E

E

E

E E

E

E E

E E

E(n)

E — событие; L — приемник; — новый во Flash MX

События ввода пользователем начинаются после щелчка мышью или нажатия клавиши на

клавиатуре. Точнее говоря, события наступают посредством интерфейса мыши или клавиату-

ры, к которому могут относиться и другие способы ввода данных, например, голосом. К со-

бытиям ввода пользователем относятся все события, связанные с классами Button, Key,

Mouse, Stage и TextField. Многие события видеоклипов также являются событиями ввода

пользователем, поскольку они дублируют функциональность событий классов Button, Key,

и TextField.

ГЛАВА 16. ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 335

РЕГИСТРАЦИЯ ПРИЕМНИКОВ

Каждая функция динамического обработчика событий является свойством объекта. Объ-

ект может принадлежать одному из следующих встроенных классов: Button,

Sound, TextField, Stage, XML или В этом случае объект по

умолчанию получает одно или несколько событий. Пользователю достаточно просто создать

функцию обратного вызова для определенного экземпляра объекта.

Если вы хотите, чтобы объект, принадлежащий определенному встроенному классу, по-

лучал события, которые он не получает по умолчанию, или если вы желаете, чтобы события

получал созданный вами пользовательский объект, необходимо выполнить еще одно дейст-

вие: зарегистрировать объект как приемник. События, которые может получать зарегистри-

рованный объект, генерируют пять классов: Key, Selection, Stage и TextField.

Объект регистрируется как приемник с помощью метода addListener того класса, в ко-

тором производится регистрация. Например, видеоклип обычно получает события

и только тогда, когда он имеет клавиатурную фокусировку. Чтобы объект полу-

чал эти события при любых обстоятельствах, необходимо создать функцию обратного вызова

и зарегистрировать видеоклип как приемник в классе Key, как показано ниже.

= function ()

= function ()

Приведенный ниже код создает объект вставляет ъ него обработчик события

(отпускание кнопки мыши), а затем регистрирует объект как приемник класса Mouse.

myObj new

=

)

Начиная с этого места при отпускании кнопки мыши будет запускаться событие

Того же самого результата можно достичь, используя пустой видеоклип со статическим

обработчиком события onClipEvent (mouseup). Однако динамический обработчик имеет

ряд преимуществ.

Во-первых, динамический подход более гибкий, поскольку позволяет программным обра-

зом при исполнении фильма решить, какие приемники следует регистрировать и для каких со-

бытий следует создавать обработчики. При статическом подходе принять решение о том, какие

объекты получат те или иные обработчики событий, необходимо при разработке фильма.

Во-вторых, динамический подход позволяет поместить код в любое нужное место. Его не

обязательно присоединять именно к видеоклипу. Весь код можно сосредоточить, например, в

основной временной шкале, что облегчит его поиск и редактирование.

В-третьих, динамические обработчики событий являются реальными функциями, тогда

как статические обработчики к ним не относятся. Это означает, что в отличие от статических,

в динамических обработчиках событий можно определять локальные переменные, вызывать

их явным образом и передавать в них параметры.

В-четвертых, существует только 9 статических событий видеоклипов, внедряемых в собы-

тие onClipEvent в качестве параметров. При этом динамических событий видеоклипов на-

считывается 18.

В-пятых, для видеоклипов и кнопок не существует статических эквивалентов событий

onSetFoucs и onKillFocus. Таким образом, невозможно программным образом управлять

способом связи статических обработчиков событий с клавиатурной фокусировкой.

В-шестых, динамические обработчики событий onPress и onRelease позволяют видео-

клипу выступать в роли кнопки, запуская его события и отображая его пиктограмму только

336 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

тогда, когда видеоклип находится в активном состоянии. Чтобы достигнуть того же результа-

та с помощью статических событий mouseup и придется затратить гораздо

больше усилий.

И использование видеоклипов только для захвата событий подобно использова-

нию дорогого ножа с десятью лезвиями только в качестве штопора. Пользовательский объект

занимает гораздо меньше памяти, чем пустой видеоклип, поскольку он не обладает свойства-

ми видеоклипа, не относящимися к захвату событий.

Использование статических событий клипов является обоснованным только для событий

onClipEvent присоединяемых к видеоклипам, которые вручную помещены в рабочее

поле при разработке фильма. В этом случае динамическое событие onLoad работать не будет.

Подробная информация о событиях onLoad и onClipEvent приведе-

на ниже, в подразделе "События, связанные с видеоклипами".

ОБЗОР ДАННЫХ И ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО СЛОВА THIS

С ОБРАБОТЧИКАМИ СОБЫТИЙ

Внутри статических обработчиков событий on и и ключевое слово this, и

прямые ссылки относятся к временной шкале клипа, к которому присоединен обработчик

событий. Например, приведенные ниже выражения эквивалентны.

{

{

)

Однако при использовании динамических обработчиков событий ситуация усложняется.

Каждый динамический обработчик событий является методом объекта, и внутри обработчика

ключевое слово this относится к объекту. С другой стороны, областью действия прямых

ссылок является временная шкала, в которой определена функция обработчика событий. Та-

ким образом, если приведенный ниже код помещен в основную шкалу, то пере-

менная относится к объекту тогда как myVar относится к

myVar = "main timeline"

= "myClip";

= {

// "myClip"

// "main timeline"

Как и в случае с другими методами, в динамических обработчиках событий можно опре-

делять локальные переменные. Например, в качестве первой строки кода функции

представленной в предыдущем примере, можно добавить следующее

выражение:

var myVar =

Тогда предложение trace в последней строке кода будет отображать а

timeline".

В можно указать и другой обработчик события объекта, и тогда зна-

чение переменной this внутри onMouseUp изменится на другой объект. С другой

стороны, областью действия прямой ссылки на переменную myVar будет временная шкала,

в которой определен функциональный литерал.

ГЛАВА 16. ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 337

На Если областью действия переменной или другого элемента данных является та

область действия, в которой он (элемент данных) определен, то говорят, что он

задан лексически.

Предположим, что вы создали еще один клип с именем определили для него

собственное свойство myVar, а также задали свойство указывающее на обра-

ботчик события myClip определенный в предыдущем примере. Вот как будет

выглядеть код:

=

=

Несмотря на то что onMouseUp и . onMouseDown относятся к одному и

тому же функциональному литералу, . onMouseDown активизируется, когда пользо-

ватель нажимает кнопку мыши, а слово this означает myClip2 внутри функции. Отобража-

ется и timeline". С другой стороны, myClip. onMouseUp активизиру-

ется, когда пользователь отпускает кнопку мыши, а слово this означает myClip, т.е. ото-

бражается "myClip" и "main timeline". В обоих случаях прямая ссылка все так же

относится к основной временной шкале. Подводя итог, можно сказать, что значение пере-

менной this является объектом, связанным с вызывающим методом, а прямая ссылка на пе-

myVar задана лексически.

ЯВНОЕ ОБРАЩЕНИЕ К ОБРАБОТЧИКАМ СОБЫТИЙ

Хотя обработчики событий автоматически вызываются Rash-плейером при предварительно

заданных условиях, тем не менее разрешается активизировать их и в явном виде. Такая необхо-

димость может возникнуть, например, если обработчик события, созданный в одном объекте,

потребуется выполнить в другом объекте. Методы apply О и call

позволяют указать ключевого слова в пределах обращения.

Расширим код, приведенный в предыдущем подразделе. Так, в приведенном ниже коде

создается объект с именем j (строка 1), задается его свойство myVar (строка 2), указы-

вается обработчик события onMouseDown, который сначала выполняет функцию

onMouseUp, а затем выполняет одну дополнительную строку кода (строки 3-6), на-

конец, (строка 7) объект myObj регистрируется как приемник объекта класса Mouse так, что

событие onMouseDown будет активизировано после щелчка мышью:

= new

=

= {

4: // отображается "main

timeline"

5: // отображается "myObj"

6: }

Предложение в пределах функции myObj всегда отображает

"myObj". Если вы хотите, чтобы при явном обращении к ключевое

слово относилось к объекту myObj внутри этой функции, необходимо применить метод

или О. Если активизировать функцию

с помощью обычного вызова, ключевое слово this всегда будет отно-

ситься к объекту

Расширяя код, представленный в предыдущем подразделе, представим себе, что приве-

денный ниже код был помещен в третий видеоклип.

338 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

{

В результате выполнения этого кода отображается и "main timeline", по-

скольку обращение к нему производится как к методу объекта Поэтому он выполня-

ется в контексте myCl ip.

Вызов обработчиков событий явным образом открывает третью возможность, отличную

от обычного вызова и использования методов или Эта возможность за-

ключается в указании переменной в методе и последующего использования переменной для

выполнения метода. В этом случае this будет относиться к временной шкале, в которой оп-

ределена переменная. Прямая ссылка на переменную myVar в все так

же задается лексически. Это место является неизменным во всех трех способах вызова мето-

да. Эта третья возможность проиллюстрирована в приведенном ниже коде, который относит-

ся к временной шкале клипа

myVar = "my Var in

f =

// отображается "myVar in "main timeline"

Подробная информация об областях действия функций приведена в главе 15

"Объединение предложений в функции".

ОБРАБОТЧИКИ СОБЫТИЙ и ФОКУСИРОВКА

И текстовые поля, и кнопки, и видеоклипы кнопок поддерживают события onSetFocus

и onKillFocus. По умолчанию обработчики событий onKeyUp и связанные с

этими объектами, не будут активизированы до тех пор, пока объект не будет иметь клавиа-

турной фокусировки, т.е. пока курсор не будет находиться на объекте. (Статические эквива-

ленты, onClipEvent и onClipEvent активизируются независимо от

клавиатурной

Кроме того, чтобы зарегистрировать объект для приема событий определенного класса,

можно использовать предложение В этом случае динамические обработчики

событий этого класса всегда будут активизироваться, независимо от того, имеет ли объект

фокусировку.

Пусть имеется видеоклип и вы хотите, чтобы он захватывал события onKeyUp и

onKeyDown. Сначала создадим функции обратного вызова:

=

=

У нас есть два варианта. Один из них заключается в том, чтобы сделать объект ви-

деоклипом кнопки. Функция обратного вызова активизируется, когда объект myClip имеет

клавиатурную фокусировку.

Процесс создания видеоклипа кнопки будет описан далее в этой главе, в под-

разделе "События, связанные с видеоклипами".

Другая возможность заключается в том, чтобы сделать объект приемником класса

Key, как показано ниже.

Функции обратного вызова активизируются все время.

ГЛАВА 16. ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 339

ОТКЛЮЧЕНИЕ и УДАЛЕНИЕ ОБРАБОТЧИКОВ СОБЫТИЙ

Удалить обработчик события легко, поскольку он является обычной переменной. Например:

delete

Если вы зарегистрировали приемник для класса, в котором не собираетесь больше захва-

тывать никаких событий, то удалить следует приемник, как показано ниже.

Обработчик события можно отключить чтобы он не задействовал циклы про-

цессора в то когда не выполняет никакой полезной функции. Например, некоторое

количество обработчиков событий выполняющих только проверку условия

if и возврат, могут замедлить программу.

Одна из возможностей заключается в том, чтобы установить сам обработчик события в значение

null. Предположим, что обработчик события onEnterFrame определен следующим образом:

0 {

// предложения функции

= myFunc;

Если вы хотите отключить обработчик можно использовать следующее предложение:

= null;

Эта методика применена в фильме имеющемся на прилагаемом компакт-

диске. Найдите 25-ю строку программы:

else =

Чтобы снова запустить обработчик события, используйте следующее предложение:

= myFunc;

На Чтобы включить нумерацию строк на панели Actions (Действия), щелкните в

правом верхнем углу панели и из выпадающего меню выберите пункт View

Numbers (Показывать номера строк). Включение нумерации строк облегчает

поиск определенной строки кода.

Если установка обработчика события onEnterFrame в значение null дает нежелатель-

ные сторонние эффекты, то практически того же самого результата можно достичь, присвоив

переменной значение myFunc и использовав переменную для выполнения функции

myFunc в обработчике события Для включения и отключения обработчи-

ка событий можно переключать переменную между значениями и myFunc:

= function 0 {

// предложения функции

}

doNow =

= function О {

Теперь, когда обработчик события необходимо отключить, используйте такое предложение:

doNow =

;

Когда обработчик события снова требуется запустить, используйте предложение

doNow =

340 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

СОБЫТИЯ, СВЯЗАННЫЕ С КНОПКАМИ

Во Flash имеется восемь статических событий кнопок: press, release, releaseOutside,

и keyPress.

Имеется также девять динамических событий кнопок: onPress, onRelease,

onReleaseOutside, onRollover, onDragOver,

onKillFocus и

Обратите внимание на то, что кнопки не получают динамические события класса Key по

умолчанию. Однако кнопки можно зарегистрировать как приемник класса Key, и тогда они

смогут получать события onKeyUp и onKeyDown — динамические эквиваленты

Все события кнопок активизируются только в ответ на нажатие главной кнопки мыши.

В ответ на нажатие вторичной кнопки мыши никакой реакции нет.

Все события кнопок, связанные с мышью (к ним относятся все события кнопок за исклю-

чением keyPress), активизируются только один раз, в точке перехода. Например, если поль-

зователь нажал и удерживает кнопку мыши, событие press активизируется только едино-

жды, когда кнопка была нажата в первый раз.

За исключением первого из следующих ниже подразделов, посвященного событиям, связан-

ным с фокусировкой, во всех остальных описывается по одному событию, которое может быть за-

хвачено как статическим, так и динамическим обработчиком. Таким образом, фраза "события

press и onPress" сродни фразе и теленовости" — события одни и те же, но доступны по

двум различным каналам. Можно также сказать: "события press", и это будет означать "событие,

возникающее при нажатии кнопки и захватываемое либо статически, либо динамически".

ONKILLFOCUS И ONSETFOCUS

Событие onSetFocus возникает, когда кнопка получает клавиатурную фокусировку.

Клавиатурная фокусировка изменяется, когда пользователь нажимает клавиши или

<Shift+Tab> для перемещения по текстовым полям и кнопкам страницы. Событие

onKillFocus возникает, когда кнопка утрачивает клавиатурную фокусировку. События фо-

кусировки были введены, в первую очередь, для текстовых полей ввода данных. Они пред-

ставляют собой удобный прием при любой необходимой предварительной или последующей

обработки данных, введенных пользователем в поля. Эти события также могут оказаться по-

лезными для кнопок и видеоклипов кнопок. Например, если вы пользуетесь предназначен-

ной для отправки данных кнопкой Submit, то когда кнопка становится активной, можно про-

верить правильность заполнения полей пользователем. Когда кнопка теряет фокусировку, вы

можете сгенерировать сообщение типа "Спасибо".

PRESS И ONPRESS

События press и onPress возникают при нажатии пользователем главной кнопки мы-

ши, в то время когда указатель мыши находится в пределах активной области кнопки. Данное

событие обеспечивает максимально быструю реакцию, поскольку оно активизируется сразу

же при нажатии кнопки мыши. С другой стороны, это событие не позволяет пользователю

изменить свое мнение после нажатия кнопки мыши. Это событие очень хорошо подходит для

игр (где время реакции является решающим фактором) и для переключателей, где пользова-

тель может отменить сделанный им выбор, повторно щелкнув на кнопке.

RELEASE И ONRELEASE

События release и onRelease возникают, когда пользователь нажал и отпустил главную

кнопку мыши, в то время как указатель мыши находится в пределах активной области кнопки.

Эти события позволяют пользователю изменить свое мнение относительно сделанного выбора,

просто сместив указатель мыши с активной области до того, как отпустить кнопку мыши.

ГЛАВА 16. ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 341

И ONRELEASEOUTSIDE

События releaseOutside и наступают при нажатии пользовате-

лем кнопки мыши, когда указатель находится в пределах активной области, последующего

перемещения указателя за ее пределы и отпускания кнопки мыши. Если пользователю нуж-

но, к примеру, перетащить какой-то элемент из одного места в другое, то в эти обработчики

событий можно поместить соответствующие действия с тем, чтобы определить, находится ли

указатель в нужном месте, когда пользователь отпускает кнопку мыши.

ROLLOVER И ONROLLOVER

События rollover и onRollOver активизируются, когда указатель мыши перемещается в

пределы активной области при не нажатой кнопке мыши (находящейся в состоянии Up). Несмот-

ря то что состояние Up кнопки и соответствующий кадр _ир видеоклипа кнопки описывают ви-

зуальный аспект обработчик события позволяет также выполнить в этом месте про-

граммным образом какую-либо операцию. Например, можете воспользоваться этими событиями,

если хотите сделать что-то непосредственно перед тем, как пользователь нажмет кнопку.

ROLLOUT ONROLLOUT

События rollout и onRollOut активизируются, когда указатель мыши смещается за

пределы активной области кнопки, а сама кнопка не нажата. Аналогично предыдущему слу-

чаю, состояние Up кнопки и соответствующий видеоклипа кнопки описывают визу-

альный аспект процесса, а обработчики событий позволяют выполнить что-либо программ-

ным образом. Это событие можно использовать, к примеру, для того, чтобы выполнить ка-

кое-либо действие после того, как пользователь завершил работу с определенной кнопкой.

DRAGOUT И

События dragOut и onDragOut активизируются, когда указатель мыши смещается за

пределы активной области кнопки, а сама кнопка нажата.

DRAGOVER И ONDRAGOVER

События и onDragOver когда пользователь выполняет дей-

ствие типа dragOut, не отпускает кнопку мыши за пределами активной области кнопки, а

затем перемещает указатель обратно в пределы активной области и отпускает кнопку мыши.

KEYPRESS

Событие возникает, когда пользователь нажимает какую-либо клавишу на кла-

виатуре. Событие имеет следующий формат:

on (keyPress клавиша) {

}

где клавиша обозначает заключенную в кавычки строку, представляющую нажатую клавишу.

Для буквенно-цифровых клавиш обозначает буквальное представление, например:

on (keyPress "a" ) {

trace ("a

}

Кроме того, выражение клавиша может обозначать одно из 14 специальных ключевых

слов, использующихся для представления не буквенно-цифровых клавиш, таких как клавиши

со стрелками, пробел и <Enter>:

342 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

<Backspace> <Delete> <Down> <Enter>

<Home> <Insert> <PgDn> <PgUp>

<Right> <Space><Tab> <Up>

Эти клавиши можно представить так:

on (keypress {

bar

}

В отличие от событий, связанных с кнопками мыши, событие keyPress обычно повторя-

ется многократно, если пользователь удерживает клавишу нажатой, хотя процесс происходит

по-разному для разных клавиатур и систем.

На Поскольку поведение клавиатурной фокусировки отличается для разных сред

проектирования, Flash-плейера и броузеров, то любой фильм, в котором за-

действована клавиатурная фокусировка, необходимо протестировать во всех

окружениях, в которых он может использоваться.

Обработчик события keyPress необходимо присоединить к экземпляру кнопки. Кроме

того, чтобы обработчики события, связанные с клавишами клавиатуры, активизировались,

Flash-плейер должен иметь фокусировку мыши. Фильмы автоматически получают фокуси-

ровку мыши во или в проектировщике, но не в броузере. Следовательно, для

достижения совместимости с броузером пользователь должен будет сначала щелкнуть на

кнопке мыши, а затем вводить данные с клавиатуры.

На В среде Flash для задания клавиатурной фокусировки фильма может возник-

нуть необходимость щелкнуть в текстовом поле ввода данных.

Практически во всех ситуациях событие keyPress является более ограниченным и менее

гибким по сравнению с событиями onKeyUp и связанными с объектом Key. На-

пример, событие keyPress не поддерживает функциональные а также клавиши

<Caps Lock>, <Cmd> (Macintosh) или <Ctrl> (Windows). Оно также не поддерживает прием-

ников. И что наиболее важно, обработчик keyPress требует нажатия определенной клави-

ши. Он не позволяет получить событие при нажатии произвольной клавиши, а затем опреде-

лить, какая это была клавиша. Все эти ограничения можно обойти с помощью объекта Key.

Событие keyPress обладает одной уникальной возможностью, которая не присуща объекту Key:

оно может отключить клавишу для предотвращения смещения фокусировки. Чтобы предот-

вратить использование пользователем клавиши для смещения фокусировки в отдельном плей-

ере, проектировщике или броузере, к кнопке необходимо присоединить следующий код:

{

// здесь должно быть какое-то предложение

dummy = null;

}

Затем, при желании, можно воспользоваться объектом Key для выявления клавиши

и функцией Selection. setFocus изменения фокусировки явным образом.

С другой стороны, события объекта Key позволяют охватить клавишу без ее от-

ключения для смещения фокусировки.

СОБЫТИЯ, СВЯЗАННЫЕ С НАЖАТИЕМ КЛАВИШ

Во Flash 5 был введен объект Key (Клавиша) со связанными событиями видеоклипов

(keyDown) и Событие keyDown активизируется,

когда пользователь нажимает произвольную клавишу на клавиатуре. Событие keyUp активи-

зируется, когда пользователь отпускает клавишу.

ГЛАВА 16. ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 343

С объектом Key связаны четыре метода, позволяющие определить, какая клавиша была нажата.

• getCode — возвращает код последней нажатой клавиши.

• () — возвращает ASCII-код последней нажатой клавиши.

• isDown — возвращает значение true, если указанная клавиша

в данный момент нажата.

• Key. — возвращает значение true, если указанная кла-

виша (<Caps Lock> или <Num Lock>) в данный момент включена.

Метод Key. isDown () можно сам по себе использовать в обработчике события

enterFrame для проверки клавиши в каждом кадре. Например, приведенный ниже код про-

веряет нажатие клавиши в каждом кадре.

= function О {

if

key

}

Такой код можно использовать, например, в играх, первоочередной задачей которых яв-

ляется максимально быстрое нажатие клавиш.

Обратите внимание на то, что константа TAB набрана прописными буквами.

Константы, представляющие собой наиболее используемые клавиши, перечис-

лены в списке инструментов в левой части панели Actions (Действия), в группах

Objects, Movie, Key, Constants.

За исключением процедуры проверки клавиши в каждом кадре, использование одного толь-

ко метода isDown является ненадежным способом выявления нажатия клавиш, потому

что пользователь может нажать клавишу в том кадре, в котором проверка не выполняется. Что-

бы обойти эту проблему, воспользуйтесь обработчиком события Key для обнаружения нажатия

клавиши и одним из методов Key, чтобы выяснить, какая клавиша была нажата. В приведенном

ниже примере используется обработчик события KeyDown с методом getAscii а так-

же метод f romCharCode для трансляции ASCII-кода в буквенно-цифровой символ.

= {

trace(

Bo Flash MX не добавлялось новых событий или методов, но зато были введены

динамические обработчики (onKeyUp и onKeyDown) и функции приемников,

позволяющие получать события Key объектам, не являющимся видеоклипами.

Если Flash-плейер имеет фокусировку, то событие on (keypress) всегда будет активизи-

роваться при нажатии соответствующей клавиши. Однако события, связанные с объектом

Key, могут и не активизироваться. Это зависит от двух факторов: клавиатурной фокусировки

и регистрации приемника.

Чтобы обработчики события, связанные с нажатием клавиш (в том числе и

активизировались, Flash-плейер должен иметь фокусировку

мыши.

Фокусировка, приемники и события были рассмотрены ранее в этой главе, в

подразделе "Обработчики событий и фокусировка".

344 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Существуют два способа активизации обработчиков событий, связанных с объектом Key.

• Любые обработчики событий, связанные с объектом Key, будут активизироваться не-

зависимо от клавиатурной фокусировки, если объект зарегистрирован как приемник

объекта Key, как показано ниже.

= function ()

// работает для любого

// клавиатурная фокусировка игнорируется

• Если кнопка или видеоклип кнопки имеет клавиатурную фокусировку, то обработчик

события, связанный с нажатием кнопки, будет активизироваться. При этом не обяза-

тельно, чтобы он был зарегистрирован как приемник объекта Key.

Два этих правила сведены в табл. 16.2.

ТАБЛИЦА 16.2. АКТИВИЗАЦИЯ СОБЫТИЙ, СВЯЗАННЫХ с ОБЪЕКТОМ KEY

ОБЪЕКТ ЗАРЕГИСТРИРОВАН КАК

ПРИЕМНИК KEY

ОБЪЕКТ НЕ ЗАРЕГИСТРИРОВАН

КАК ПРИЕМНИК KEY

Объект имеет клавиатурную

фокусировку

Объект не имеет клавиатур-

ной фокусировки

Для любого объекта будут акти-

визироваться события, связан-

ные с нажатием клавиш

Для любого объекта будут акти-

визироваться события, связан-

ные с нажатием клавиш

События, связанные с нажа-

тием клавиш, будут активизи-

роваться для кнопок и видео-

клипов кнопок

События, связанные с нажа-

тием клавиш, активизиро-

ваться не будут

СОБЫТИЯ, СВЯЗАННЫЕ С МЫШЬЮ

Во Flash 5 были введены объект Mouse (Мышь) и связанные с ним события видеоклипов

и Событие

активизируется, когда пользователь нажимает кнопку мыши. Событие mouseUp акти-

визируется, когда пользователь отпускает кнопку мыши. Событие mouseMove активизируется в

любой момент движения мыши. Оно может активизироваться и при загрузке фильма.

Во Flash MX добавлены динамические версии этих событий: onMouseUp, onMouseDown и

onMouseMove. Кроме того, добавлена регистрация приемников так, чтобы эти события мог-

ли получать и объекты, не являющиеся видеоклипами. Несмотря на возможность поставить

события мыши в соответствие кнопкам, они будут активизироваться независимо от того, на-

ходится ли указатель мыши в пределах рабочего поля, игнорируя клавиатурную фокусировку

и активные области кнопок. Кроме того, в отличие от событий, связанных с кнопками, собы-

тия, связанные с мышью, не изменяют вид указателя мыши.

Одним из предназначений событий mouseMove и onMouseMove является "пробуждение"

программы после периода простоя. Если данные события используются в подобном этому

ограниченном контексте, то пока они не используются, их можно установить равными null.

В противном случае они могут генерировать большое количество событий за короткий про-

межуток времени, много циклов процессора.

Подробная информация об установке обработчиков событий в значение null

представлена выше, в подразделе "Отключение и удаление обработчиков событий".

Одним из наиболее распространенных применений событий, связанных с мышью (в соче-

тании с двумя методами, show и hide делающими указатель мыши видимым или неви-

димым), является создание пользовательского указателя мыши. Вы скрываете обычный ука-

ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 345

затель, используете операторы _root и _root для проверки положения

мыши при наступлении события, связанного с мышью, а затем отображаете в этом положе-

нии пользовательский указатель мыши.

СОБЫТИЯ, СВЯЗАННЫЕ С ВИДЕОКЛИПАМИ

Видеоклипы получают все события объектов классов Button (Кнопка), Key (Клавиша) и

Mouse (Мышь). Кроме того, видеоклипы получают события, связанные с входом в кадр, за-

грузкой, выгрузкой и данными.

Нововведением Flash MX являются связанные с основной временной шкалой ди-

намические формы этих событий (onEnterFrame, onUnload и

onData). Статические формы можно присоединять к видеоклипам, но не к ос-

новной временной шкале. События присоединенные к основной

временной шкале, не открывают никаких новых возможностей, но иногда способствуют уп-

рощению операций. Например, они устраняют необходимость помещения кода в видеоклип

только из-за того, что нужно выполнить какое-то действие в каждом кадре.

Событие enterFrame уже много раз упоминалось в этой книге. Оно возникает каждый

раз, когда воспроизводящая головка достигает кадра и является наиболее распространенным

событием во Flash.

DATA

События data и onData возникают, когда внешние данные загружаются в видеоклип в

результате выполнения функции loadVariables или

Класс также имеет событие onData, которое рассматривается в главе 28

XML-данные".

Функция loadVariables активизирует одно событие data по завершении загрузки

всего пакета переменных. В отличие от нее, функция loadMovie активизирует ряд собы-

тий data при загрузке фильма, максимально по одному на кадр. Таким образом, при исполь-

зовании функции loadVariables событие data говорит о том, что имеются все необхо-

димые данные и с ними можно начинать работать. При использовании функции

loadMovie событие data сигнализирует о том, что поступила определенная часть загру-

жаемого фильма, но при этом может быть необходимо проверить, достаточно ли этой порции

для выполнения тех или иных задач. Для выполнения проверки можно воспользоваться

функциями и getBytesTotal свойствами видеоклипа

_framesloaded и или (для совместимости с Flash 4) исключенной функ-

цией

Подробная информация о свойстве И функции

Loaded () приведена в главе 14 "Работа с данными: использование предло-

жений".

Простой пример использования события onData с функцией loadVariables приве-

ден в фильме la, содержащемся на прилагаемом к книге компакт-диске.

Подробная информация о событии data представлена в главе 27 "Взаимосвязь

с сервером".

346 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

LOAD И ONLOAD

События load и onLoad активизируются при первоначальной загрузке видеоклипа в

фильм.

Событие onLoad также связано с объектом loadVars. За подробной инфор-

мацией обратитесь к главе 27 "Взаимосвязь с сервером".

Объект Sound также имеет событие onLoad, которое описывается ниже, в

подразделе "События, связанные со звуком".

Клипы можно создавать вручную с помощью инструментальных средств разработки путем

дублирования другого клипа с использованием функции или за-

грузки из библиотеки путем выполнения функции attachMovie О . Кроме того, их можно

загрузить как внешний SWF-файл с помощью функции

Flash MX: события Load при выгрузке клипа

Во Flash 5 функция как ни парадоксально это кажется, также

приводила к активизации события load, поскольку на место, образовавшееся при

выгрузке фильма, загружался пустой видеоклип. Предположим, что в библиотеке

имеется клип с идентификатором связи и этот код мы помещаем в основную

временную шкалу:

"туМС",

Предположим также, что имеется кнопка, к которой присоединен следующий

{

}

При нажатии кнопки отображается сообщение об ошибке Error opening URL. . ., по-

скольку Flash пытается загрузить безымянный видеоклип.

Теперь все это не так. Во Flash MX кнопка будет работать без сообщений об ошибке. Очевид-

но, что Flash MX не генерирует событие load при выгрузке клипа.

В большинстве случаев динамические и статические обработчики событий функциони-

руют практически идентично. Динамические обработчики обеспечиваю большую гибкость,

облегчают централизацию кода и локализуют область действия.

Более подробная информация о преимуществах динамических обработчиков

событий над статическими приведена выше, в подразделе "Регистрация при-

емников".

Все, что можно сделать с динамическими обработчиками событий, обычно можно приме-

нить и к статическим обработчикам, и наоборот. Но это не касается событий load и onLoad.

Фактически первая же попытка применить событие onLoad оказывается бесполезной. Почему?

Проблема заключается в том, что обработчик события onLoad должен быть создан до то-

го, как загрузится клип. Однако, если клип не загрузился, то нечего ставить в соответствие

обработчику onLoad. Таким образом, если на рабочем поле вручную создан клип

ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 347

первый кадр основной временной шкалы помещен приведенный ниже код, то ко времени

получения кода интерпретирующей программой клип уже будет

= function () // никогда не

активизируется

С другой стороны, если вы собираетесь загрузить клип программным образом с помощью

функции attachMovieClip то возникает вопрос: когда нужно объявлять обработчик со-

бытия до или после присоединения? Если до, то клип еще не существует и для него

нельзя определить обработчик события. Если после, то клип уже загружен и объявлять обра-

ботчик события уже слишком поздно.

Получается, что существует только один способ успешного применения динамического

события onLoad: событие должно быть унаследовано из объекта prototype функции-

конструктора, т.е. из класса. Когда интерпретирующая программа создает новый объект, то

есть промежуток времени, когда объект еще не имеет имени и "не рожден", но уже обладает

всеми коллективными методами и свойствами объекта prototype.

Процесс создания нового объекта более полно описан в главе 15

"Объединение предложений в функции".

Если одним из коллективных методов, которыми обладает "рожденный" объект, является

обработчик события onLoad (он будет активизироваться).

Это продемонстрировано в файле f la, часть кода которого приведена ниже. Основ-

ной идеей программы является помещение обработчика события onLoad в объект prototype

класса и последующее использование предложения Object для

регистрации видеоклипа в библиотеке класса MyMCClass.

Подробная информация о предложении приведена

в главе 17 "Демонстрация мощи видеоклипов".

Когда видеоклип загружается из библиотеки с помощью предложения он

ставится в соответствие классу и обработчик события onLoad активизируется.

myMCclass = function О // определение класса

= new // наследование из MovieClip

= { // помещение onLoad в прототип

}

// регистрация видеоклипа

В представленном на компакт-диске файле f la, созданном Эрикой Нортон

(Erica Norton), ведущим специалистом по гарантии качества компании Macromedia, проде-

монстрирована та же самая стратегия — помещение кода между командами компилятора

ttinitclip и Эти команды превращают предложения в действия по инициа-

клипа, которые выполняются перед помещением любого кода в кадр

Инициализация клипа часто используется вместе с компонентами. Об этом го-

ворится в главе 22 "Компоненты".

UNLOAD И

События и активизируются при использовании функций

unloadMovie О для выгрузки загруженного клипа.

348 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Событие unload является хорошим средством освобождения ресурсов (таких как прием-

ники), которые были связаны с видеоклипом. Например:

{

{

He можете заставить работать динамическое событие видеоклипа? Обратитесь

к разделу "Возможные проблемы" в конце этой главы.

СОЗДАНИЕ ВИДЕОКЛИПА кнопки

•

Во Rash 5 видеоклипы не могли получать события кнопок. Во MX они по умол-

чанию получают эти события. Этот факт является основой создания видеоклипа

кнопки. Существуют еще три функциональные возможности, присущие кнопкам.

I

Курсор в виде позволяющий пользователю получить визуальное представление о

том, когда можно щелкать на кнопке. По умолчанию, когда обработчик события

кнопки ставится в соответствие видеоклипу, клип при наведении на него указателя

мыши начинает отображать курсор в виде

область — область рабочего поля, в пределах которой можно щелкать на

кнопке. Теперь видеоклипы обладают свойством позволяющим назначить

любой видеоклип как активную область видеоклипа кнопки.

Подробная информация о курсоре, принимающем вид руки, и свойстве

hitArea видеоклипа приведена главе 17 "Демонстрация мощи видеоклипов".

• Состояния Up, Over и Down, позволяющие кнопке изменять свой внешний вид, когда

пользователь перемещает курсор мыши в активную область кнопки или когда он на-

жимает ее. Во временной шкале видеоклипа кнопки можно пометить кадры, отвечаю-

щие разным состояниям кнопки (_up, _over и _down), и они автоматически будут

обеспечивать нужные поведения. В качестве альтернативного способа внедрения по-

ведений можно воспользоваться обработчиками событий onRollOver, onRollOut и

onRelease или onPress.

В файле la, содержащемся на компакт-диске, продемонстрирован клип,

использующий свойство hitArea и кадры с метками _up, _over и _down.

В приведенном на компакт-диске файле f la, разработанном

Web-дизайнером и владельцем узла Хелен Триоло

(Helen продемонстрирован подход, заключающийся в использова-

нии заданной по умолчанию активной области и обработчиков событий onRollOver,

onRollOut и onRelease. В этой программе видеоклип кнопки создается полностью про-

граммным образом.

Сначала с помощью прикладного программного интерфейса рисования и функции

createEmptyMovie был создан видеоклип с именем triangle. Функциональность кнопки

triangle в файле f la задается следующими строками кода:

= new

= 0 {

ГЛАВА 16. ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 349

// красный цвет при наведении мыши

= {

this // первоначальный синий цвет

= {

}

В первой строке для клипа triangle задается свойство принадлежащее

классу Color (цвет) и использующееся в последующих обработчиках событий

и onRelease для изменения цвета видеоклипа в состояниях Up, Down и

Обработчик события onRelease делает кнопку доступной для нажатия.

СОБЫТИЯ, СВЯЗАННЫЕ С ВЫБОРОМ

Объект Selection предназначен в первую очередь для того, чтобы помочь в управлении

клавиатурной фокусировкой.

Если с использованием предложения зарегистрировать объект в классе

Selection и определить обработчик события onSetFocus, то этот объект будет получать

уведомления обо всех изменениях фокусировки.

Обработчик события onSetFocus имеет следующий формат:

onSetFocus новый_фокус) {

предложения

}

Приведенный ниже код демонстрирует создание объекта и делает его приемником всех

событий onSetFocus.

= new О;

= set event

Этот обработчик отличается от обработчиков событий onSetFocus, заданных по умолча-

нию (без использования предложения addListener) для экземпляров классов Button,

и TextField. Обработчик события onSetFocus, заданный по умолчанию, ак-

тивизируется только в случае, если получает фокусировку экземпляр, которому он принадле-

жит. Следовательно, заданному по умолчанию обработчику событий onSetFocus необхо-

дим только один аргумент, каковым является старый фокус объекта. Новым фокусом всегда

является экземпляр, которому принадлежит данный обработчик. Таким образом, заданный

по умолчанию обработчик события onSetFocus имеет такой формат:

onSetFocus {

предложения

}

Если экземпляр класса MovieClip или TextField с помощью предложения

addListener зарегистрирован в классе Selection, то его обработчик события

onSetFocus будет получать уведомления, присущие обоим классам. Такой "двойственный"

обработчик события onSetFocus будет активизироваться дважды, когда фокусировку полу-

чает экземпляр, и единожды, когда фокусировку получает любой другой объект.

Эти аспекты продемонстрированы в файле f la.

350 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Объект и фокусировка рассматривались ранее в этой главе, в под-

разделах "Обработчики событий и фокусировка" и "События, связанные с

кнопками".

СОБЫТИЯ, СВЯЗАННЫЕ СО ЗВУКОМ

Объект Sound (звук) имеет два события. Событие активизируется при загрузке

звука, а событие — по завершении воспроизведения

В приведенном ниже коде, взятом из файла продемонстрировано

создание объекта Sound, определение обработчиков событий и загрузка звука.

На Очень важно определить обработчики событий перед загрузкой звука.

music new // создание объекта sound

= function () {

// начало воспроизведения звука

когда звук загружается

} /' . _

= function () {

finished

// "true" обозначает потоковый

// режим

Подробная информация об объекте Sound приведена в главе 20

"Использование встроенных объектов

СОБЫТИЕ ONRESIZE, СВЯЗАННОЕ с РАБОЧИМ ПОЛЕМ

Новой возможностью Flash MX является способность манипулирования рабочим

полем как объектом.Объект stage (Рабочее поле) имеет только одно событие,

onResize, которое происходит, когда пользователь изменяет размеры рабочего

поля. Для изменения размеров рабочего поля во Flash-плейере или в броузере

пользователь может щелкнуть на маркерах, расположенных в его левом верхнем (Macintosh)

или правом верхнем (Windows) углу. Пользователь может развернуть рабочее поле или свер-

нуть его. Эти действия приводят к активизации события Еще одним способом из-

менения размеров является перетаскивание краев окна плейера или броузера. При этом будет

активизировано несколько событий onResize, поскольку размеры окна изменяются непре-

рывно. Во Flash-плейере или в инструментальной среде разработки выполнение команды

также приводит к активизации события onResize, тогда как при

минимизации или масштабировании размеров рабочего поля оно не активизируется. Кроме

того, при первоначальной загрузке фильма, будь то в броузере, во Flash-плейере или в среде

разработки, может активизироваться одно или несколько событий resize.

Свойство scaleMode объекта Stage определяет, каким образом масштабируется и обре-

зается графика при изменении размеров рабочего поля. В броузере на масштабирование и

обрезку также влияют параметры HTML-файла.

Подробная информация о свойстве scaleMode приведена в главе 20

"Использование встроенных объектов фильмов".

ГЛАВА 16. СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 351

Существует очень много комбинаций свойства и параметров HTML. Рас-

смотрим вариант, который в целом дает неплохие результаты.

Выполните команду Settings публикации). В открыв-

шемся диалоговом окне Publish Settings перейдите ко вкладке HTML, из раскрывающегося

списка Dimensions (Размеры) выберите пункт Percent (Проценты), а в полях Width (Ширина)

и Height (Высота) оставьте заданные по умолчанию размеры, равные 100%. В этой же вкладке

из раскрывающегося списка Scale (Масштаб) выберите пункт Default (Show All) (По умолча-

нию (Показывать

Задайте свойство равным а свойство рав-

ным В приведенном ниже коде показано, как эти свойства задаются программным образом.

Любой объект может быть приемником события В приведенном ниже

простом примере объект Stage зарегистрирован как приемник в своем же классе, что устра-

няет необходимость создания отдельного объекта для приема данного события.

= "noScale";

= "TL";

= () {

// здесь приводится код!

Stage. addListener (Stage)

Событие используется, как правило, для корректировки размеров, ком-

поновки или содержимого фильма в соответствии с новыми размерами рабочего поля.

СОБЫТИЯ, СВЯЗАННЫЕ С ТЕКСТОВЫМИ ПОЛЯМИ

Во Flash используются четыре события TextField.

• Событие onSetFocus происходит, когда текстовое поле не является активным, а поль-

зователь переносит на него фокусировку либо щелкая в нем, либо нажимая клавиши

или Это событие имеет один аргумент — предыдущий фокус.

• Событие происходит, когда текстовое поле является активным, а поль-

зователь переносит фокусировку с него на другой элемент, либо щелкая за пределами

текстового поля, либо нажимая клавиши или Это событие имеет

один аргумент — новый фокус.

Подробная информация о событиях onSetFocus и onKillFocus приведена

выше, в разделе "События, связанные с выбором".

Нажимаете клавишу для изменения фокусировки, но ничего не происхо-

дит? Обратитесь к разделу "Возможные проблемы" в конце этой главы.

Событие onChanged активизируется всякий раз при изменении текста в поле

(например, когда пользователь вводит или удаляет букву). Вырезание или вставка бло-

ка текста приводит к активизации только одного события — onChanged. Это событие

имеет только один аргумент — имя экземпляра текстового поля.

Событие onScroller активизируется при перемещении полосы прокрутки в тексто-

вом поле. Это может происходить либо после щелчка на самой полосе прокрутке, либо

автоматически, при вводе текста пользователем. Данное событие имеет только один

аргумент — имя экземпляра текстового поля.

352 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Каждое из указанных событий продемонстрировано в приведенном на компакт-диске

фильме textf f la. Этот файл содержит одно текстовое поле с компо-

нентом ScrollBar, добавленным из окна Components. (Чтобы открыть это окно, выполните

команду События onChanged и onScroller дают приращение пе-

ременных и myScrollBarScroller), которые отображаются в ди-

намических текстовых полях. Ниже приведен код.

myScrollBarChanged = 0;

myScrollBarScrolled =

= {

= {

{

= {

trace

УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ ДЕЙСТВИЙ

С ПОМОЩЬЮ ПОРЯДКА ВЫПОЛНЕНИЯ

Системные события выполняются в определенном порядке относительно основной времен-

ной шкалы и временной шкалы любого дочернего видеоклипа. Необходимо принять во внима-

ние три основных фактора: во-первых, относительное расположение слоев, в которых происхо-

дят события; во-вторых, положение клипа, содержащего событие, в иерархической структуре

(основной фильм, дочерний клип); и, тип события (например, загрузка данных с ис-

пользованием функций или инициали-

зация клипа путем выполнения команд #initclip и загрузка и выгрузка кли-

па с помощью обработчиков событий onClipEvent (load) и собы-

тия onLoad и достижение кадра с использованием обработчиков событий

и

Ниже приведено несколько основных правил управления последовательностью выполне-

ния системных событий.

• При загрузке фильма любой код инициализации клипа выполняется до любого дру-

гого кода, содержащегося в этом же кадре.

• Статические события загрузки (onClipEvent выполняются в том кадре, в

который загружается клип, и до выполнения любого кода временной шкалы этого

клипа.

• Динамические события загрузки (onLoad) выполняются в кадре, следующем после

кадра, в который загружается клип, и после выполнения любого кода временной шка-

лы этого клипа.

• Загрузка и выгрузка фильма предшествует событию, происходящему при достижении

фильмом определенного кадра. Таким образом, события и

ГЛАВА 16. ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 353

не начнутся до тех пор, пока не будет достигнут кадр, следующий по-

сле кадра, содержащего фильм.

• В пределах одной временной шкалы код выполняется от верхнего слоя к нижнему.

• Код родительской временной шкалы, не относящийся к событию, выполняется до не

относящегося к событию кода, расположенного в дочерней временной шкале.

• Если в один и тот же кадр загружается несколько клипов, то первоначально их код вы-

полняется в соответствии с порядком загрузки. Для задания порядка загрузки выпол-

ните команду Settings, перейдите ко вкладке Flash и из раскрывающего-

ся меню Load Order выберите пункт Bottom Up (Снизу который задан по умол-

чанию, или Top Down (Сверху вниз). В последующих кадрах порядок выполнения кода

будет противоположным.

При взаимодействии всех этих правил порядок выполнения кода может стать очень слож-

ным. Это еще одна причина, по которой нужно постараться как можно сильнее централизо-

вать код и ограничить число дочерних клипов, содержащих код.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему не активизируется мой обработчик события?

Одна из причин может заключаться в том, что вместо имени динамического обработчика собы-

тия используется имя статического параметра. Например, mouseDown является статическим пара-

метром, который нужно использовать со статическим обработчиком события, как показано ниже.

{

// предложения

}

Если во Flash 5 вы часто использовали статические обработчики событий, то можете на-

писать нечто подобное и во Flash MX:

= О { // ЭТО НЕ ОБРАБОТЧИК СОБЫТИЯ!

// предложения

}

Нужно использовать не mouseDown, a onMouaeDown:

= {

// предложения

Я нажимаю клавишу чтобы изменить фокусировку, но ничего не происходит.

Это стандартная ситуация в среде проектирования. Попробуйте протестировать SWF-

файл в броузере и во Flash-плейере.

FLASH ЗА РАБОТОЙ: УНИВЕРСАЛЬНЫЕ ПРОЦЕССОРЫ

СОБЫТИЙ FLASH

Во Flash MX документированная модель событий позволяет принимать лишь ограничен-

ный набор последних: нажатие клавиш, щелчки мышью, изменения текстовых полей и раз-

меров рабочего поля. Однако могут возникать ситуации, требующие приема других событий,

354 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью

связанных либо со встроенными, либо с созданными объектами. Это можно сделать с помо-

щью универсального процессора событий.

Предположим, что у нас есть фильм, в котором есть кукла и "оживляющий" ее кукольник.

Пользователь управляет действиями кукольника. Действия кукольника, в свою очередь, вы-

зывают отклики самой куклы. Вы хотите определить события, связанные с кукольником, и

хотите, чтобы кукла принимала эти события. Эта задача состоит из четырех основных этапов.

• Создайте пользовательские объекты, представляющие куклу и кукольника (они также

могут быть представлены видеоклипами или другими встроенными объектами).

• Определите способ управления пользователя кукольником.

• Задайте для объекта, представляющего кукольника, необходимые свойства и методы

отслеживания, добавления и удаления приемников, а также для отправления уведом-

лений об одном или нескольких событиях.

• Для куклы задайте соответствующие функции обратного вызова (совпадающие с теми,

что были заданы для объекта, представляющего кукольника) и сделайте куклу прием-

ником кукольника.

Выполнение третьего шага требует наличия универсального процессора событий. Неко-

торые из них можно бесплатно загрузить из Web. Ссылки на узлы загрузки имеются на Web-

узле

Кроме того, во Flash MX встроен недокументированный универсальный процессор собы-

тий ASBroadcaster. В приведенной ниже программе процессор событий

используется для того, чтобы на действия кукольника откликались две куклы.

Основная идея программы заключается в том, что объект-кукольник принимает событие

и активизирует событие aultPosition, когда пользователь нажи-

мает клавишу <Пробел>. Две куклы, зарегистрированные как приемники объекта-

кукольника и для которых определены функции обратного вызова

assumeDef aultPosition принимают событие assumeDef aultPosition. При выпол-

нении функции обратного вызова в выходном окне отображаются следующие строки:

assumes default position (кукла 1 предполагает положение по умолчанию);

puppet2 assumes default position (кукла 2 предполагает положение по умолчанию).

Ниже описано, как соотносится с описанными выше четырьмя основными этапами каж-

дая строка программы.

Я Объект-кукольник создается в строке 1, а объекты-куклы — в строках 12 и 13.

• В строках 2-7 создается функция обратного вызова для объекта-

кукольника, чтобы кукольник активизировал событие assumeDefaultPosition

(строка 5) при нажатии пользователем клавиши <Пробел>.

• Предложение initialize в строке 8 наделяет объект (Кукольник)

четырьмя свойствами: массивом _listeners, методами

removeListener и . Методы и

добавляют и удаляют объекты из массива _listeners. Метод

broadcastMessage выполняет функцию обратного вызова во всех объектах мас-

_listeners.

• Функция aultPosition определенная в строках используется объекта-

ми-куклами как функция обратного вызова. Строки 14 и 15 "заставляют" двух кукол

принимать события кукольника. Строки 16 и 17 задают для каждой из кукол метод

1: puppetMaster =

ГЛАВА 16. ВЗАИМОДЕЙСТВИЕ, СОБЫТИЯ и УСТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ 355

3: =

4:

)

6: }

7: }

9: function

10: default

11: }

puppetl =

puppet2 =

16: =

17: =

Первым аргументом метода ASBroadcaster .broadcastMessage О является имя со-

бытия. Кроме того, можно добавить любое количество других аргументов. В приведенной

ниже программе puppets2 . la, содержащейся на прилагаемом к книге компакт-диске,

объект-кукольник откликается на любую из трех клавиш: <Пробел>, <К> и <Р> (в англий-

ской раскладке клавиатуры). В зависимости от того, какую клавишу нажимает пользователь,

кукольник выполняет метод ASBroadcaster с различным вторым

параметром или (при нажатии клавиши <Пробел>) без второго параметра. Второй параметр

(или его отсутствие) говорит куклам о том, какую позицию следует занять.

puppetMaster =

=

4:

5 :

6:

7: // 75 это код клавиши <К>

8:

9: }

10: // 80 это код клавиши <Р>

11:

12: }

13: }

function assumePosition

if (arg = undefined) arg =

17: assumes

18: }

puppetl =

20: puppet2 =

= assumePosition;

= assumePosition;

Я узнал о существовании ASBroadcaster из списка рассылки для программистов Flash. Про-

верьте архивы или подпишитесь на рассылку на узле f com.

Внимание! Поскольку ASBroadcaster является недокументированной функцией, то в сле-

дующих версиях Flash она может измениться или вообще не поддерживаться. В

вставить новый код, заменяющий эту функцию, достаточно легко. Подробная информация

ASBroadcaster приведена на узле

wiki (зайдя на узел, щелкните на ссылках Undocumented Features и Flash MX Features).

356 ЧАСТЬ РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ГЛАВА 17

ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ

В ЭТОЙ ГЛАВЕ...

Представление видеоклипов 357

Новые свойства видеоклипов во Flash MX 363

Создание и удаление видеоклипов 367

Загрузка и выгрузка внешнего содержимого 369

Управление визуальным порядком наложения видеоклипов 372

Использование исходных объектов для задания свойств новых видеоклипов 377

Использование метода Ob j registerClass для выделения нового

видеоклипа в подкласс 378

Проверка перекрытия видеоклипов 382

Повторный вызов функции с помощью глобальной функции 385

Перетаскивание видеоклипов 387

Динамические маски 389

Возможные проблемы 391

Flash за работой: игра "счастливый случай" 392

ПРЕДСТАВЛЕНИЕ ВИДЕОКЛИПОВ

Видеоклип, безусловно, — самый важный и распространенный тип объектов Macromedia

Flash. Видеоклипы являются уникальными объектами. Несмотря на создание класса

призванного привести видеоклипы к рамкам объектно-ориентированного про-

граммирования, введенного в версии Flash 5, они все же не похожи на другие типы объектов и

требуют особого

Например, в отличие от большинства других классов, для создания экземпляров класса

MovieClip нельзя использовать оператор new. Приведенное ниже предложение не создает

новый видеоклип.

MyClip = new // НЕ создает новый видеоклип!

Тем не менее предложение new может оказаться полезным. Например, его

можно использовать для создания подкласса, наследующего класс MovieClip. Но, в отличие

от других функций-конструкторов, сам по себе класс MovieClip не может служить полно-

ценным средством создания видеоклипов.

Подробная информация о создании подкласса, наследующего класс MovieClip,

приведена ниже, в разделе "Использование метода Object ()

для выделения нового видеоклипа в подкласс".

Фактически во Flash 5 невозможно было создать совершенно новый видеоклип про-

граммным образом. Во MX эту функцию выполняет метод

класса MovieClip. Этот метод необходим в связи тем,

что хотя посредством класса MovieClip видеоклип попадает в рамки объектно-

ориентированного программирования, введенного во Flash 5, его основы были заложены еще до

появления ООП, и многие базовые свойства (такие _у, _xscale, _yscale) не имеют ни-

какой связи с классом но при этом встроены в интерпретирующую программу.

Видеоклипы уникальны еще и в том, что они имеют собственную временную шкалу с од-

ним или несколькими кадрами, т.е. кадрами, в которые можно либо добавить код

либо добавить или изменить графику, кнопку, текстовое поле или еще один ви-

деоклип. Многие методы видеоклипов (такие как и

prevFrame три свойства видеоклипов _f ramesloaded и

totalf rames и вездесущее событие связаны с временной шкалой.

На заметку Кнопки тоже имеют собственную временную шкалу, но она не поддерживает ни

ActionScript, ни другие связанные с ней методы, свойства или события.

Помимо рабочего поля, единственными объектами во Flash, которые могут иметь графи-

ческое содержимое, являются кнопки и видеоклипы. Графику могут содержать и графиче-

ские символы, но они не являются объектами.

В табл. перечислены все методы класса MovieCl ip, за исключением методов рисования.

Методы рисования рассматриваются в главе 18 "Процедура рисования с

помощью ActionScript".

ТАБЛИЦА 17.1. МЕТОДЫ КЛАССА MOVIECLIP

МЕТОД ФОРМАТ ОПИСАНИЕ

(поток)

AttachMovie

глубина

[,

аудиопоток

к видеоклипу

Присоединяет фильм библиоте-

ки к объекту ip с указан-

ной глубиной. Присоединенный

фильм обладает всеми локаль-

ными свойствами объекта init.

Возвращает ссылку на присое-

диненный фильм

358 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ПРОДОЛЖЕНИЕ ТАБЛ. 17.1

МЕТОД ФОРМАТ ОПИСАНИЕ

createEmptyMovie

Clip

DuplicateMovieClip

GetBounds

GetDepth

getURL

GlobalToLocal

Нет

глубина)

глубина, х,

у, ширина, высота)

глубина

[,

rdinateSpace)

окно,

(кадр)

Нет

Создает пустой как

дочерний для объекта с

указанной глубиной

Создает пустое текстовое поле с

указанным именем экземпляра,

глубиной, координатами х и у,

шириной и высотой

myClip, соз-

давая ответвление указанной

глубины. Новый фильм обладает

всеми локальными свойствами

исходного объекта

Возвращает минимальные и

максимальные координаты х и у

объекта myClip по отношению

к указанному координатному

пространству

Возвращает число байтов, за-

груженных для объекта myCl ip

Возвращает размер объекта

в байтах

Возвращает глубину объекта

Загружает документ в окно бро-

узера из указанного URL, пере-

давая все переменные из ис-

точника myCl ip с помощью ме-

тодов или POST, указанных

В строке переменные

объект int

из координат рабочего поля ос-

новного фильма локальные

координаты объекта

Отправляет воспроизводящую

головку к определенному кадру

объекта myClip и затем начи-

нает воспроизводить фильм

Отправляет воспроизводящую

головку к определенному кадру

объекта и затем оста-

навливает фильм

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 359

ПРОДОЛЖЕНИЕ ТАБЛ. 17.1

МЕТОД ФОРМАТ ОПИСАНИЕ

HitTest

nextFrame

play

prevFrame

rayClip.hitTest (x, y,

shapeFlag)

,

next Frame

Stop

(maskMovieClip)

Возвращает значение true, ес-

ли окно объекта пере-

крывает точку, заданную коор-

динатами X И у. ShapeFlag —

это булево значение, которое

определяет, была ли оценена

(true) общая форма объекта

или только его окно

(false)

Возвращает значение true, ес-

ли окно объекта пере-

секается с окном целевого ви-

деоклипа

Загружает фильм или JPEG-

указанный в "url", в

объект с помощью ме-

тода GET или POST, указанного

в строке переменные

Загружает переменные из URL

или другого места в объект

Преобразует объект point из

локальных координат объекта

в глобальные координа-

ты рабочего поля

Отправляет воспроизводящую

головку к следующему кадру

объекта

Воспроизводит объект

Отправляет воспроизводящую

головку к кадру

объекта

Удаляет объект из вре-

менной шкалы, если он был соз-

дан с помощью методов

О ,

или

Задает видеоклип как маску

myClip

Приостанавливает воспроизве-

дение объекта myCl ip

360 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 17.1

МЕТОД ФОРМАТ ОПИСАНИЕ

startDrag

ft, top, right,

stopDrag

SwapDepths

Делает объект myCl ip доступ-

ным для перетаскивания и на-

чинает его перетаскивание. Ес-

ли значение lock истинно, то

мыши остается в точ-

ке регистрации объекта

myClip. Значения top,

right и bottom являются ко-

ординатами, за пределы которых

перетаскивать

нельзя

Останавливает перетаскивание

любого видеоклипа (не только

объекта myClip). Является точ-

ным эквивалентом глобальной

функции stopDrag

Помещает объект myClip на

указанную глубину. Если на этой

глубине уже есть какой-либо ви-

деоклип, то объект бу-

дет помещен в слой предыдуще-

го уровня

Меняет уровни глубины объекта

myClip и целевого видеоклипа

Удаляет если он

был загружен с помощью метода

Применим и для

JPEG-файла, загруженного с

помощью метода loadMovie

Нет — недокументированный метод.

В табл. 17.2 перечислены все свойства

ТАБЛИЦА 17.2. СВОЙСТВА КЛАССА MOVIECLIP

Свойство ОПИСАНИЕ

_droptarget

enabled

целое число до 100

Номер текущего кадра; целое число; только для чтения

Строка, предназначенная только для чтения, содержащая абсолютный путь

(написанный с использованием косой черты), по которому перетаскивался

экземпляр видеоклипа

Булево значение, определяющее, был ли включен видеоклип кнопки

Булево значение, определяющее, может ли видеоклип получить фокусировку

Булево значение, определяющее, обрамлен ли активный видеоклип жел-

тым прямоугольником

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 361

ОКОНЧАНИЕ ТАБЛ. 17.2

свойство ОПИСАНИЕ

_framesloaded

_name

_rotation

t

tabEnabled

_target

_totalframes

useHandCursor

_visible

_width

_x

_xmouse

_xscale

_У

_yscale

Целое число, означающее количество кадров, загруженных в память; толь-

ко для чтения

Высота экземпляра видеоклипа в пикселях; число с плавающей запятой

Видеоклип, определяющий активную область видеоклипа кнопки

Строка, определяющая качество отображения: LOW (Низкое), MEDIUM

(Среднее), HIGH (Высокое), BEST (Наилучшее)

Имя экземпляра; строка

Обращение к видеоклипу, являющемуся родительским для данного

Число с плавающей запятой; число градусов поворота относительно перво-

начальной ориентации видеоклипа

Целое число; число секунд, которое звук находится в буфере перед началом

воспроизведения

Булево значение, определяющее, включен ли дочерний видеоклип в авто-

матический порядок перехода по клавише табуляции

Булево значение, включен ли видеоклип в порядок перехо-

да по клавише табуляции

для видеоклипа порядок перехода по клавише табуляции

Путь к целевому видеоклипу

Общее число кадров в видеоклипе

Булево значение, определяющее, что если пользователь нажмет кнопку

мыши на данном видеоклипе кнопки (или на кнопке) и отпустит ее на дру-

гом видеоклипе, то последний получит событие, соответствующее отпущен-

ной кнопке

Строка, предназначенная только для чтения; местоположение SWF-файла,

из которого был загружен данный видеоклип

Булево значение, включающее или отключающее для видеоклипа кнопки

отображение курсора в виде руки

Булево значение, определяющее, является ли экземпляр видеоклипа скры-

тым или видимым

Ширина экземпляра видеоклипа в пикселях; число с плавающей запятой

Координата х экземпляра видеоклипа; число с плавающей запятой

Координата х курсора мыши в пределах экземпляра видеоклипа; число с

плавающей запятой

Число с плавающей запятой, указывающее процентную величину масшта-

бирования экземпляра видеоклипа по горизонтали

Координата у экземпляра видеоклипа; число с плавающей запятой

Координата у курсора мыши в пределах экземпляра видеоклипа; число с

плавающей запятой

Число с плавающей запятой, указывающее процентную величину масшта-

бирования экземпляра видеоклипа по вертикали

362 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с ACTIONSCRIPT

НОВЫЕ СВОЙСТВА ВИДЕОКЛИПОВ во FLASH MX

Во Flash MX добавлено девять новых свойств видеоклипов. Шесть из них

enabled, f hitArea, и включают и отклю-

чают присущие видеоклипу или кнопке видеоклипа функциональные возможности. Во

Flash 5 имелась глобальная переменная которая существует и во Flash MX.

Кроме того, кнопки и видеоклипы теперь обладают свойством f

Дополнительная информация о свойстве _f ocusrect приведена ниже, во врезке

"Включение и отключение обозначающего фокусировку желтого прямоугольника".

Подробная информация о видеоклипах кнопок приведена в главе 16

"Взаимодействие, события и установление

Три свойства tabChildren, и — поряд-

ком по клавише табуляции, т.е. последовательностью, в которой текстовые поля, кнопки

и/или другие видеоклипы становятся активными, когда пользователь нажимает клавишу или

Наиболее распространенным примером применения этих свойств является заполнение

формы и использование клавиши для перехода от одного ее поля к другому.

Если пользователь не определяет порядок перехода по клавише табуляции, Flash устанавливает

его автоматически. Это означает, что порядок, в котором элементы становятся активными, будет

установлен по умолчанию. Например, при создании формы с рядом текстовых полей ввода дан-

ных, располагающимися в виде одного столбца, наиболее приемлемым порядком перехода между

полями, принятым по умолчанию, будет направление сверху вниз. Помимо этого, пользователь-

ский порядок перехода по клавише табуляции можно задать явным образом. При этом установлен-

ный автоматический порядок перехода аннулируется по всему с учетом SWF-файлов,

загруженных с помощью метода или Пользовательский порядок

перехода бывает необходим при создании сложных форм.

Включение и отключение желтого прямоугольника, обозначающего фокусировку

В среде Flash кнопка или видеоклип кнопки, имеющие в данный момент клавиатурную фоку-

сировку, обрамляются прямоугольником желтого цвета, за исключением случаев, когда эта

функция была каким-либо образом отключена. Включить и отключить обрамление желтым

прямоугольником можно глобально с помощью глобального свойства ocusrect. Если оно

установлено в значение true (по умолчанию), то желтый прямоугольник будет отображаться.

Если свойство установлено в значение (как в приведенном ниже при-

мере), то желтый прямоугольник отображаться не будет. В этом случае при получении клавиа-

турной фокусировки для кнопки и видеоклипа кнопки будет отображено состояние Over.

_focusrect =. false; // прямоугольник фокусировки отключается глобально

Во Flash MX желтый прямоугольник, обозначающий фокусировку, можно включить и

отключить локально для отдельного видеоклипа или экземпляра кнопки с помощью

свойства ocusrect данного экземпляра. Если свойство ocusrect установлено

в значение true (по умолчанию), то когда экземпляр получит фокусировку, желтый

прямоугольник будет отображаться. Если свойство f ocusrect установлено в значение

(как в приведенном ниже примере), то когда экземпляр получит фокусировку, желтый пря-

моугольник отображаться не будет. В этом случае при получении клавиатурной фокусировки кнопка

или видеоклип кнопки отображены в состоянии Over.

= false; // для экземпляра прямоугольник

фокусировки не отображается

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 363

СВОЙСТВО

Свойство enabled включает и отключает для видеоклипа функциональные возможности,

присущие кнопкам. По умолчанию это свойство установлено в значение true. Если его уста-

новить в значение как показано в приведенном ниже примере, не будет отображаться

курсор в виде руки, не будут вызываться обработчики события кнопки и, кроме того, отклю-

чатся кадры _over, и _up.

false; // больше не функционирует как кнопка

Даже когда свойство enabled установлено в значение видеоклип все равно будет

включен в порядок перехода по клавише табуляции и будут продолжать функционировать

обработчики событий Mouse и Key.

СВОЙСТВО FOCUSENABLED

Свойство ocusEnabled позволяет включать и отключать для видеоклипа обработчики

событий, связанные с фокусировкой.

Текстовые поля, кнопки, видеоклипы кнопок и обычные видеоклипы могут иметь обра-

ботчики событий onSetFocus и onKillFocus, которые активизируются в ответ на выпол-

нение функции setFocus Для текстовых полей, кнопок и видеоклипов кно-

пок эти два обработчика событий, связанные с фокусировкой, включены по умолчанию. Для

обычных видеоклипов эти обработчики событий по умолчанию отключены. Если для обыч-

ного видеоклипа свойство f ocusEnabled установить в значение true, то его обработчики

событий onSetFocus и onKillFocus будут активизироваться в ответ на выполнение функ-

ции

Приведенный ниже код взят из файла f f la.

= {

was new focus is

= true; // позволяет активизировать

// активизируется

Ниже приведены четыре факта о свойстве f ocusEnabled.

• По умолчанию оно установлено в значение которое является эквивален-

том значения

• В нем нет необходимости, если свойство tabEnabled установлено в значение true.

(Свойство включает фокусировку.)

• Оно не применимо к текстовым полям, кнопкам или видеоклипам кнопок.

• Оно включает обработчики событий, связанные с одним видеоклипом (в предыдущем

примере это был видеоклип myClip). будет активизироваться

только тогда, когда объект получит фокусировку Если вы хотите, чтобы собы-

тие активизировалось при каждом изменении фокусировки

(для других объектов наряду с то вместо этого или в дополнение к установке

свойства f ocusEnabled в значение true задайте приемник:

Подробная информация о приемниках приведена в главе 16 "Взаимодействие,

события и установление последовательности".

364 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью

Если сделано и то и другое, т.е. задан приемник и свойство ocusEnabled установлено в

значение true, то при получении фокусировки объектом myClip событие

onSetFocus будет активизироваться дважды.

Свойство f ocusEnabled можно использовать и для того, чтобы фокусировку получал ви-

деоклип, не имеющий обработчика события onSetFocus. В приведенном ниже примере кода,

взятого из файла содержащегося на прилагаемом к книге компакт-

диске, фокусировку получает видеоклип а событие принимает еще один объект

function MyClass ()

=

= new

СВОЙСТВО HITAREA

Свойство Area позволяет назначить любой видеоклип активной областью. Для ви-

деоклипов кнопок (как в приведенном ниже примере) при наведении мыши на видеоклип,

являющийся активной областью, ее указатель примет вид руки, и на видеоклипе кнопки

можно будет щелкнуть:

=

В любой момент свойство можно переназначить для другого видеоклипа. Мож-

но изменить размер и форму видеоклипа, являющегося активной областью. Кроме того, его

можно сделать невидимым, не изменяя доступность видеоклипа кнопки для нажатия. Если

свойство hitArea не назначать или назначить его для фактически несуществующего объек-

та, то по умолчанию видеоклип кнопки сам станет активной областью.

функции активной области

Само по себе назначение активной области для обычного видеоклипа не играет никакой роли.

Даже добавление свойства useHandCursor = true (описанного ниже в этой главе) не будет

иметь никакого эффекта. Чтобы кнопка стала доступной для нажатия, а курсор принимал вид ру-

ки, для видеоклипа необходимо назначить обработчик события, связанный с кнопкой, что сде-

лает его видеоклипом кнопки. В этом случае функция активной области тоже будет работать.

СВОЙСТВО TABCHILDREN

Свойство позволяет исключать и впоследствии включать в порядок пере-

хода по клавише видеоклип, являющийся дочерним по отношению к рассматри-

ваемому видеоклипу. Это свойство может быть полезным, к примеру, если определенные по-

ля формы нужно заполнять только при определенных условиях. Когда эти условия наступа-

ют, свойство tabChildren можно установить в значение true.

По умолчанию видеоклипы, являющиеся дочерними по отношению к включенным в по-

рядок перехода по клавише табуляции, в эту последовательность не попадают. Таким обра-

зом, если вы хотите трактовать имеющийся компонент пользовательского интерфейса, со-

стоящий из нескольких видеоклипов, как единый объект перехода по клавише табуляции,

дополнительно предпринимать ничего не нужно.

Если вы хотите, чтобы иногда дочерние были включены в порядок перехода

по клавише табуляции, а иногда были исключены из него, то сначала их нужно включить в

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 365

этот порядок (например, с помощью свойства Затем, если дочерний видео-

клип нужно исключить из порядка перехода по клавише табуляции, установите свойство

tabChildren в значение Если возникнет необходимость повторного включения, ус-

тановите свойство tabChildren в значение true.

Если свойство tabChildren установлено в значение (по то до-

черние видеоклипы будут включены в порядок перехода по клавише табуляции как только вы

установите свойство tabEnabled в значение true или сделаете видеоклип видеоклипом

кнопки.

СВОЙСТВО TABENABLED

Свойство tabEnabled включает видеоклип в автоматический или пользовательский по-

рядок перехода по клавише табуляции, в зависимости от того, какой из них задан в текущем

документе. При этом данный видеоклип сможет принимать фокусировку.

TABlNDEX

Изменение значения свойства на положительное целое число (с установлен-

ного по умолчанию значения позволяет включить видеоклип в порядок перехо-

да по клавише табуляции и переносить на него фокусировку. Место видеоклипа в порядке

получения фокусировки определяется заданным числом: видеоклип с меньшим индексом та-

буляции получит фокусировку раньше, чем видеоклип с большим индексом.

Задание в документе хотя бы одного свойства tablndex приводит к отключению автома-

тического порядка перехода по клавише табуляции во всем документе.

СВОЙСТВО

Как правило, событие onRelease происходит в случае, когда пользователь нажимает и

отпускает кнопку мыши в то время, как курсор находится над какой-либо кнопкой или ви-

деоклипом кнопки. При работе с раскрывающимся меню может возникнуть ситуация, когда

пользователь должен будет щелкнуть на одной кнопке (что приведет к разворачиванию ме-

ню), а затем переместить указатель мыши к кнопке, соответствующей выбранной опции и

только потом отпустить кнопку мыши. Это поведение реализуется посредством свойства

("отслеживать как меню").

Обработчик события onPress присоединяется к кнопке или видеоклипу кнопки, ото-

бражающему раскрывающееся меню. Для остальных кнопок или видеоклипов кнопок назна-

чают событие onRelease и поведение "отслеживания как меню".

Назначить поведение "отслеживания как меню" для кнопки можно двумя способами: по-

средством панели Properties (Свойства) и а также с помощью свойства

trackAsMenu. Для видеоклипа кнопки можно использовать только ActionScript.

В файле . la для одного пункта раскрывающегося меню поведение отслежива-

ния назначено посредством ActionScript (как показано в приведенной ниже строке), а для ос-

тальных с помощью панели Properties. В файле используются

видеоклипы кнопок и ActionScript. В файле демонстрируется поведение отсле-

живания, заданное по умолчанию.

= true;

СВОЙСТВО USEHANDCURSOR

По умолчанию для видеоклипов кнопок курсор отображается в виде руки. Чтобы активи-

зировать это поведение, установите свойство useHandCursor в значение (как пока-

366 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

зано в приведенном ниже примере), а чтобы снова включить его, установите свойство

в значение true.

= false;

Пример использования свойства useHandCursor будет рассмотрен в файле

далее в этой главе, в разделе "Параметры метода

startDrag

Курсор не будет принимать вид руки и в том случае, если в значение установлено

свойство enabled или видеоклипа.

Если установить свойство useHandCursor в значение true для обычного видеоклипа,

это не будет иметь никакого эффекта. Чтобы на видеоклипе можно было щелкать мышью и

курсор мог принимать вид руки, к видеоклипу следует присоединить обработчик события,

придающий ему функциональные возможности кнопки. Затем можно будет подавить такое

отображение курсора, использовав предложение = false.

СОЗДАНИЕ и УДАЛЕНИЕ ВИДЕОКЛИПОВ

Создавать видеоклипы можно четырьмя способами, определяющими место видеоклипа в

иерархической структуре и его расположение в рабочем поле.

На Расположение определяется его точкой регистрации, помеченной

символом перекрестия при редактировании видеоклипа на панели Library

(Библиотека). По умолчанию точкой регистрации является центр видеоклипа,

которая в основной временной шкале размещена в верхнем левом углу.

Кроме того, можно удалять, замещать видеоклипы или удалять только графическое со-

держимое, не затрагивая сам объект видеоклипа.

С понятием точки регистрации мы познакомились в главе 6

экземпляры и элементы библиотек".

"Символы,

Подробная информация о визуальном порядке наложения представлена ниже,

в разделе "Управление визуальным порядком наложения видеоклипов".

Иерархическая структура с родительскими и дочерними элементами

Во Flash иерархическая структура видеоклипов, определяющая визуальный порядок наложения,

основана на принципе родительских и дочерних связей.

Родительско-дочерняя связь между двумя видеоклипами является отношением типа

"контейнер-содержимое", т.е. родительский элемент содержит дочерний. Родительский видео-

клип может иметь любое количество дочерних, но дочерний видеоклип имеет только один роди-

тельский. Два дочерних элемента, имеющие одного "родителя", являются его потомками.

СОЗДАНИЕ ВИДЕОКЛИПОВ

Ранее уже упоминалось о том, что существуют четыре способа создания видеоклипов. В

каждом из приведенных ниже примеров создается видеоклип являющийся дочерним

объектом видеоклипа В последних трех примерах clip2 имеет показатель глубины,

равный 1.

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 367

Более подробно показатели глубины будут рассмотрены ниже, в подразделе

"Визуальное наложение элементов, являющихся потомками одного

показатели

Ниже представлены четыре способа создания видеоклипов.

• Вручную. При работе в среде проектирования, если clipl и clip2 уже существуют в

библиотеке, сначала откройте clipl на панели Library, а затем перетащите clip2 в

clipl. Внутри видеоклипа clipl можно создать и выделить графическое изображе-

ние. Затем выполните команду to Symbol в

символ), в поле Name (Имя) введите установите переключатель в поле опции

Movie Clip (Видеоклип) и щелкните на кнопке ОК, чтобы преобразовать графику в ви-

деоклип с именем

• С помощью метода () класса Если во время выполнения

программы видеоклип clipl находится в рабочем поле, а видеоклип, находящийся в

библиотеке, имеет связь ID clip, то приведенное ниже предложение создаст видео-

клип с именем clip2, расположит его в рабочем поле, совместит его точку регистра-

ции с аналогичной точкой видеоклипа clipl и сделает видеоклип clip2 дочерним

объектом видеоклипа clipl.

• С помощью метода класса MovieClip или с помощью гло-

бальной функции duplicateMovieClip Если во время выполнения программы в

рабочем поле располагается объект myClip, являющийся дочерним по отношению к

видеоклипу clipl, то любое из приведенных ниже предложений создаст видеоклип

clip2, разместит его в рабочем поле, совместит его точку регистрации с аналогичной

точкой объекта myClip и сделает дочерним объектом видеоклипа clipl.

1)

1)

С помощью метода класса MovieClip. Если во время

выполнения программы в рабочем поле располагается видеоклип clipl, то приве-

денное ниже предложение создаст видеоклип с именем clip2, разместит его в рабо-

чем поле, совместит его точку регистрации с аналогичной точкой видеоклипа clipl и

сделает дочерним объектом видеоклипа clipl.

Если метод используется для создания видеоклипа в

корневом каталоге, то регистрационная точка нового видеоклипа будет совмещена с

верхним левым углом рабочего поля.

На заметку Кнопки можно присоединять с помощью метода Их нельзя

дублировать программным образом и нельзя удалять. К кнопкам не примени-

мы методы и

Методы и createEmpty-

возвращают ссылку на создаваемые ими видеоклипы. Это новая

недокументированная функция Flash

368 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Bo Flash 5 разработчики нередко создавали ссылки на часто используемые видеоклипы,

поскольку оценка ссылки задействует гораздо меньше ресурсов процессора, чем оценка стро-

ки. Например, такая ссылка создается во втором из приведенных ниже предложений:

i) // присоединение фильма

ref = // создание ссылки

Во Flash MX ту же самую задачу можно выполнить посредством одного предложения:

ref =

УДАЛЕНИЕ ВИДЕОКЛИПОВ

Метод класса MovieClip можно использовать для удаления ви-

деоклипа, созданного с помощью методов или

Если вам больше не нужна графика или код, содержащиеся в

видеоклипе, то их удаление позволит высвободить часть памяти, которую занимает видео-

клип и (особенно при удалении большого числа видеоклипов) позволит вашей программе ра-

ботать более производительно. Ниже приведен пример:

// удален

Кроме того, любой существующий видеоклип можно заменить. Для этого необходимо соз-

дать новый дочерний видеоклип, имеющий же показатель глубины, что и существующий.

С помощью метода можно удалить графическое содержимое видеокли-

па, оставив объект видеоклипа "пустым". Пустой видеоклип можно использовать в качестве

контейнера, например для присоединения видеоклипов из библиотеки или для загрузки

внешнего содержимого.

В отличие от unloadMovie метод полностью удаляет весь ви-

деоклип. Если видеоклип удален с помощью этого метода, то к нему нельзя ничего присоеди-

нить и нельзя ничего загрузить в него — видеоклип просто перестает существовать.

ЗАГРУЗКА и ВЫГРУЗКА ВНЕШНЕГО СОДЕРЖИМОГО

С появлением во Flash 5 метода attachMovie загрузка внешних SWF-файлов стала го-

раздо меньшей необходимостью. Однако в некоторых ситуациях она все же требуется.

Предположим, что Flash-приложение предоставляет доступ к нескольким и/или JPEG-

а пользователь хочет получить доступ только к небольшой части этого содержимого. Не

имеет смысла заставлять каждого пользователя загружать все содержимое, как происходит в случае,

когда оно хранится в библиотеке и загружается с помощью метода attachMovie

Кроме возможно, вы захотите создать альтернативные "оболочки" приложения, ка-

ждой из которых будет пользоваться ограниченное число пользователей.

Вас могут также попросить "создать кадр" существующего SWF-файла, добавив в него

вступление, новую музыку и заключительные титры. Самый легкий способ выполнения этой

задачи заключается в написании приложения, содержащего дополнительные элементы, и

загрузки в него существующего SWF-файла.

Еще одна причина загрузки внешних SWF-файлов заключается в том, чтобы предоставить

пользователю возможность выбора различных версий содержимого, например большого изо-

бражения с высоким разрешением или маленького — с низким.

ЗАГРУЗКА ВНЕШНИХ SWF- или JPEG-ФАйлов

Внешний SWF- или JPEG-файл можно загрузить тремя способами: с помощью глобаль-

ных функций и а также с помощью метода

класса ip. Ниже приводятся примеры каждого из способов загрузки.

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 369

// глобальная функция

// глобальная функция

метод MovieClip

При загрузке с помощью глобальной функции loadMovieNum SWF- или JPEG-файл

можно либо поместить на существующий уровень, либо создать для него новый. При загрузке

с помощью метода () класса MovieClip внешний файл загружается в сущест-

вующий видеоклип, т.е. принимает уровень этого видеоклипа.

Подробная информация об уровнях представлена ниже, в разделе

"Управление визуальным порядком наложения видеоклипов".

Глобальную функцию loadMovie можно использовать для загрузки содержимого в ви-

деоклип, как показано в предыдущем примере. Кроме того, ее можно использовать для за-

грузки в уровень, который указывается посредством строки или числа:

// строка

// число 1

Для указания уровня нельзя использовать переменную. Так, приведенный ниже код рабо-

тать не будет.

х =

// ЗАГРУЗКА НЕ ВЫПОЛНЯЕТСЯ!

Некоторые на первый взгляд разумные нестроковые значения приводят к тому, что за-

грузка с помощью глобальной функции loadMovie происходит на уровне а это означа-

ет, что полностью заменяется содержимое фильма. Ниже приведен вполне невинно выгля-

дящий пример массового разрушения.

// ЗАГРУЗКА В УРОВЕНЬ

ВИДЕОКЛИПЫ с ВНЕШНИМ СОДЕРЖИМЫМ ДУБЛИРОВАТЬ НЕЛЬЗЯ

После загрузки содержимого в фильм с помощью метода loadMovie этот фильм дуб-

лировать нельзя.

Из этого правила есть одно небольшое исключение. При выполнении метода

duplicateMovie () в том же самом блоке к которому применялся метод

loadMovie можно использовать duplicateMovie для копирования видеоклипа с ис-

ходным содержимым (не тем, которое загружалось). Например, приведенный ниже код будет

выполняться, но он не дублирует загруженное содержимое, как можно было бы ожидать.

1)

Ни приведенное выше правило, ни исключение из него не применимы к функции

ЗАГРУЖЕННЫЕ Фильмы ПРИСОЕДИНЯЮТ из их БИБЛИОТЕК

Если в видеоклип с помощью метода loadMovie загружено содержимое, то к

объекту myClip больше нельзя присоединять видеоклипы из его библиотеки. Можно при-

соединять содержимое из библиотеки, связанной с загруженным содержимым.

Предположим, что файл был загружен в объект _root посредством

такого предложения:

370 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Затем приведенную ниже строку вы помещаете в обработчик события кнопки

onRelease.

Если является идентификатором связи видеоклипа в той же библиотеке, в ко-

торой определен символ объекта то приведенное выше предложение работать не бу-

дет. С другой стороны, если является идентификатором связи видеоклипа в биб-

лиотеке файла то после щелчка на кнопке этот видеоклип будет присоединен к

объекту в результате чего будет создан объект

При возникновении проблем, связанных с присоединением фильма из библио-

теки загруженного SWF-файла или с доступом к переменной, видеоклипу или

функции загруженного SWF-файла, обратитесь к разделу "Возможные пробле-

мы" в конце этой главы.

ВЫГРУЗКА ВНЕШНЕГО SWF- или

Внешние или загруженные с помощью метода можно

выгрузить с помощью метода Для загрузки и выгрузки можно использовать

глобальную функцию либо метод или глобальную функцию для одной из опера-

ций, а метод MovieClip — для другой. Вот несколько примеров:

// загрузка в

// загрузка в

// выгрузка чего-либо, содержащегося в

// выгрузка чего-либо, содержащегося в clipl

Аналогичным образом, загрузку можно выполнять с помощью функции

loadMovieNum а выгрузку — с помощью функции unloadMovieNum

1)

После выгрузки с помощью метода unloadMovie остается пустой видеоклип, т.е. даже

после выполнения предложения () объект clipl остается, и к нему

снова можно присоединить какое-то содержимое:

Можно просто загрузить новое содержимое, не выполняя предложение

При загрузке в видеоклип нового содержимого старое содержимое

автоматически выгружается.

Метод unloadMovie можно использовать для выгрузки графического содержимого из

видеоклипа, созданного вручную, после чего останется пустой видеоклип.

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 371

Глобальная функция

Для указания фильма, метода unloadMovie О , лучше всего

использовать строку.

Глобальная функция unloadMovie О в качестве параметра может также принимать ссылку на

видеоклип, а не на строку. Например, приведенное ниже предложение является разрешенным.

выгрузка чего-либо, содержащегося в

Однако при указании ссылки на несуществующий видеоклип глобальная функция

unloadMovie выгрузит содержимое из той временной шкалы, в которой находится предло-

жение. Гораздо безопаснее в качестве параметра глобальной функции unloadMovie ис-

пользовать только строки.

УПРАВЛЕНИЕ ВИЗУАЛЬНЫМ ПОРЯДКОМ НАЛОЖЕНИЯ

ВИДЕОКЛИПОВ

Во Rash-документе видеоклипы имеют такой вид, как если бы они располагались на про-

зрачной пленке. Это означает, что при отсутствии графического содержимого на верхнем

слое будут видимыми элементы на нижних слоях. Процедура управления тем, какие фильмы

располагаются в рабочем поле впереди или позади других фильмов, называется визуальным

порядком наложения. Для того чтобы грамотно манипулировать порядком наложения, необ-

ходимо четко понимать иерархическую структуру видеоклипов во Flash-документе.

В основу иерархической структуры видеоклипов заложены два принципа: "бутерброда" и

"дерева". В частности, структура Flash-документа представляет собой уровни, наложенные

друг на друга подобно начинке многослойного бутерброда. В пределах каждого уровня видео-

клипы образуют древовидную структуру, представляющую собой иерархию с родительскими и

дочерними элементами, а визуальный порядок наложения потомков (дочерние видеоклипы

одного родительского) определяется показателями их глубины. Таким образом, общий Flash-

документ представляет собой некий "бутерброд, состоящий из деревьев". Если фильм одно-

уровневый, то дело придется иметь только с древовидной структурой.

Идентификатор означает основание каждого дерева. Каждый уровень имеет собст-

венный идентификатор _root, или основную временную шкалу. Таким образом, две ссылки

.myClipl двум совершенно разным видеоклипам, если эти обращения

возникают на двух разных уровнях. Например, один из видеоклипов может быть

а другой — Обращения к видеоклипам, начинаю-

щиеся с индикатора уровня, являются однозначными.

Первоначальная иерархическая структура видеоклипов определяется пятью факторами:

• хронологическим порядком, в котором несколько видеоклипов были вручную поме-

щены на один слой временной Шкалы;

• относительным расположением слоев временной шкалы, содержащих видеоклипы;

• взаимосвязями типа "родитель-потомок" между видеоклипами;

• был ли создан видеоклип с помощью метода

или

• на каких уровнях располагаются видеоклипы.

372 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

УРОВНИ ВИЗУАЛЬНОГО ПОРЯДКА НАЛОЖЕНИЯ

Общая структура Flash-документа представляет собой иерархию, состоящую из одного

или нескольких нумерованных уровней, начиная с уровня 0 Иерархия уровня

представляет собой простую структуру типа "бутерброд". Чем выше номер уровня, тем выше

его положение в иерархической структуре. Например, располагается на переднем

плане а — на переднем плане

Каждый документ должен иметь _levelO, кроме него он может иметь любое количество

уровней, максимальное количество которых составляет 16534. Содержимое не обязательно

располагать на соседних уровнях. Например, оно может располагаться на уровнях 0, 100 и

и между ними может не быть никакого содержимого.

При загрузке внешних или с помощью глобальной функции

или помимо уровня _levelO, можно назначить (и соз-

дать) другие уровни.

Три способа загрузки внешних файлов были описаны ранее в этой главе, в

подразделе "Загрузка внешних SWF- или JPEG-файлов".

Если при загрузке внешнего файла с помощью глобальной функции loadMovieNum О

или вы специально не создадите новый уровень, то документ будет иметь

только один уровень, _levelO.

ВИЗУАЛЬНОЕ НАЛОЖЕНИЕ ЭЛЕМЕНТОВ, НЕ являющихся ПОТОМКАМИ одного

РОДИТЕЛЯ: ИЕРАРХИЧЕСКАЯ СТРУКТУРА с РОДИТЕЛЬСКИМИ и ДОЧЕРНИМИ ЭЛЕМЕНТАМИ

В пределах каждого уровня визуальное наложение определяется двумя факторами: иерар-

хической структурой родительских и дочерних элементов и показателями глубины.

В иерархической структуре с родительскими и дочерними элементами каждый потомок

является основателем своей "семейной ветви". Если посмотреть на семейную ветвь верти-

кально, то визуальный порядок наложения родительских и дочерних элементов прост: дочер-

ний элемент всегда располагается на переднем плане относительно своего родительского.

Каждая семейная ветвь образует единый блок с целью установки визуального порядка на-

ложения, как при задании вращения, масштабирования или местоположения. При работе с

двумя видеоклипами, являющимися потомками одного родительского, не нужно думать о

том, что каждый из них тоже может иметь дочерние, видеоклипы и т.д. Способ

определения визуального порядка наложения совместим с другими операциями Flash. На-

пример, при вращении или перемещении видеоклипа поворачиваться либо перемещаться бу-

дет вся его семейная ветвь. Аналогичным образом, если в визуальном порядке наложения

один видеоклип располагается "позади" другого, то такое размещение применимо к любой из

семейных ветвей в пределах данных двух видеоклипов. Короче говоря, при работе с видео-

клипом он рассматривается как единый блок.

На этом мы закончим рассмотрение иерархии родительских и дочерних элементов, опре-

деляющей визуальный порядок наложения для дочерних элементов, не являющихся потом-

ками одного родительского.

ВИЗУАЛЬНОЕ НАЛОЖЕНИЕ ЭЛЕМЕНТОВ, являющихся ПОТОМКАМИ одного

РОДИТЕЛЯ: ПОКАЗАТЕЛИ ГЛУБИНЫ

Еще одним фактором, определяющим визуальный порядок наложения в пределах каж-

дого уровня, является показатель глубины. Во Flash он используется для отслеживания не-

скольких факторов, которые все вместе определяют визуальный порядок наложения дочер-

них элементов, имеющих один родительский. Дочерний элемент с большим показателем глу-

бины располагается на переднем плане относительно дочернего элемента, имеющего

меньший показатель глубины.

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 373

Максимальное число показателей глубины, которые можно назначить для одной времен-

ной шкалы, составляет 16 384.

Разрешенные показатели глубины могут находиться в диапазоне от -16384 до

Ox7EFFFFFD (или 2 130 706 429). Воспользуйтесь процедурой тестирования, чтобы убедить-

ся, что вы сможете удалить видеоклипы с показателем глубины, большим 1 048 575.

Если разработчики используют очень большие показатели глубины, это наверняка явля-

ется попыткой обезопасить себя от того, что для нового видеоклипа будет использован тот же

показатель глубины, что и для существующего (что приведет к замене существующего видео-

клипа новым).

АВТОМАТИЧЕСКОЕ и ЯВНОЕ НАЗНАЧЕНИЕ ПОКАЗАТЕЛЕЙ ГЛУБИНЫ

Показатели глубины могут назначаться автоматически или явным образом.

• Flash автоматически назначает показатели глубины для видеоклипов, которые вруч-

ную помещены в рабочее поле в процессе разработки фильма. Назначение показате-

лей глубины зависит от трех факторов: хронологического порядка, в котором несколь-

ко видеоклипов помещено на один уровень временной шкалы; относительного распо-

ложения слоев временной шкалы, содержащих видеоклипы, и родительско-дочерних

взаимосвязей между видеоклипами. Автоматически назначаемые показатели глубины

всегда будут отрицательными, начиная с -16384 для корневого расположения и далее

по возрастанию, возможно, с интервалами (например, -16383, -16382, -16380).

На Во Flash 5 не предусмотрен нижний предел показателей глубины, однако во

Flash 6 он не может быть меньше Flash 6 делает исключение только

для SWF-файлов старых версий.

Для каждого видеоклипа, создаваемого с помощью методов

() или показатель глубины необходимо

назначить явным образом. С этой целью во Flash зарезервированы показатели от 1

до 16384, которые автоматически не присваиваются.

Можно явным образом "заменить" показатели глубины двух существующих видеокли-

пов или с помощью метода класса MovieClip назначить для видео-

клипа показатель глубины, который в данный момент не используется.

Например, приведенная ниже строка назначает для видеоклипа показатель

глубины, равный 1. Если этот показатель глубины уже имеет какой-то дочерний эле-

мент, то для этого элемента будет назначен текущий показатель глубины видеоклипа

myClip.

Приведенная ниже строка меняет показатели глубины видеоклипов otherClip и

myClip.

Bo Flash MX метод swapDepths является более надежным по сравнению с

Flash 5.

Если явным образом назначаются только показатели глубины, большие 0, то конфликта

между ними и автоматически назначаемыми никогда не будет, поскольку последние всегда

меньше 0.

374 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Использование метода getDepth Определить глубины любого видео-

клипа можно с помощью метода getDepth класса С помощью этой

информации можно, к примеру, сознательно назначить уже существующий показа-

тель глубины (как отрицательный, так и положительный) для нового дочернего ви-

деоклипа, что приведет к замене видеоклипа, созданного вручную или профаммным способом.

Приведенный ниже код, который подразумевает наличие в библиотеке символа со связью

ID ip, уничтожает видеоклип ipl в процессе создания видеоклипа ip2.

dep = // получить показатель глубины

// видеоклипа

// заменяет myClipl

НАЗНАЧЕНИЕ ГЛУБИНЫ _ROOT для ДИНАМИЧЕСКОГО СОЗДАНИЯ нового ФОНА

Позади любого содержимого, в том числе и авторского, можно динамически помещать

фон, задав _root нового видеоклипа, как показано ниже.

-16384);

На Для автоматически назначаемых показателей глубины термин "больший" оз-

начает "менее отрицательный". Например, -16380 больше, чем -16382.

АВТОМАТИЧЕСКОЕ НАЗНАЧЕНИЕ ПОКАЗАТЕЛЕЙ ГЛУБИНЫ

При автоматическом назначении показателей глубины Flash следует лишь двум основным

правилам.

• Дочерний видеоклип, расположенный на более высоком слое временной шкалы, по-

лучает больший показатель глубины по сравнению с дочерним видеоклипом, распо-

ложенным на более низком слое временной шкалы.

• Новый дочерний видеоклип получает более высокий показатель глубины по сравне-

нию с уже существующим. Это означает, к примеру, что если на один слой временной

шкалы вручную поместить несколько видеоклипов, то в визуальном порядке наложе-

ния видеоклипы, помещаемые позднее, будут автоматически располагаться выше.

Обратите внимание на то, что здесь ничего не говорится об относительных показателях

глубины родительских и дочерних видеоклипов. Это не имеет значения. Показатель глубины

определяет только то, как видеоклипы располагаются над своими дочерними элементами.

Фактически при создании семейной ветви без дочерних элементов все видеоклипы ветви

могут иметь один и тот же показатель глубины. Дочерние элементы, не являющиеся потом-

ками одного родителя, могут иметь один и тот же показатель глубины из-за того, что их визу-

альный порядок наложения определяется родительско-дочерней иерархией.

ЯВНОЕ НАЗНАЧЕНИЕ ПОКАЗАТЕЛЕЙ ГЛУБИНЫ

При назначении показателей глубины явным образом выполните следующие два шага,

чтобы убедиться в том, что не заменяется существующее содержимое.

• Во-первых, убедитесь, что существующие видеоклипы не будут потомками создавае-

мого видеоклипа. При использовании методов attachMovie () и

убедитесь в том, что предполагаемый родительский ви-

деоклип не имеет уже существующих дочерних. При использовании метода

убедитесь в том, видеоклип не имеет уже

существующих потомков.

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 375

• Присвойте каждому новому видеоклипу новое имя экземпляра и назначьте для него

более высокий показатель глубины по сравнению с предыдущим видеоклипом. На-

пример, приведенный ниже блок кода создает 10 копий видеоклипа

на глубине 1, myClipl на глубине 2 и т.д.

for (i = 0; I < 10; i++) {

}

Если существующие видеоклипы будут потомками создаваемого видеоклипа, вам следует

знать их показатели глубины. Для организации нужного визуального порядка наложения на-

значьте новые показатели глубины и при необходимости замените существующие дочерние

видеоклипы.

Не используйте имя экземпляра видеоклипа повторно, в противном случае су-

ществующий видеоклип станет неадресуемым.

Запомните следующее.

• Видеоклип, созданный с помощью метода становится по

отношению к видеоклипу, к которому его присоединяют. Например, приведенная

ниже строка создает видеоклип

• Видеоклип, созданный с помощью метода становится

дочерним по отношению к видеоклипу, в котором он создан. приведенная ниже

строка создает видеоклип

• Видеоклип, созданный с помощью метода становится по-

томком фильма, который он дублирует. Так, приведенная ниже строка создает

видеоклип _root

ПРИМЕНЕНИЕ УРОВНЕЙ и ГЛУБИНЫ

Загрузить внешний или JPEG-файл в уровень можно с помощью глобальной функ-

ции О или Внешние SWF-файлы можно загружать в видео-

клипы с помощью метода () класса MovieClip или с помощью глобальной

функции loadMovie

При наличии слоев временной шкалы, назначении показателей глубины, иерархии роди-

тельских и дочерних элементов и объектно-ориентированной модели, помогающих органи-

зовать содержимое, использование уровней в качестве инструмента систематизации может

показаться ненужным. Ниже перечислено несколько причин, по которым вы можете предпо-

честь использовать в качестве целевых объектов загрузки видеоклипы, а не уровни.

• Имя видеоклипа может нести смысловую нагрузку, что сделает программу более удо-

бочитаемой. Уровни всегда имеют обобщенные имена: levelO, _levell и т.д.

• Видеоклипы позволяют более детально регулировать визуальный порядок наложения

посредством слоев, родительско-дочерней иерархии и показателей глубины. При за-

грузке в видеоклип элемент _root загруженного SWF-файла становится

видеоклипом, в который он загружен. При этом ранее находившееся там содержимое

заменяется, а неизменной остается показатель глубины видеоклипа, положение слоев

376 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

и размещение в иерархической структуре родительских и дочерних элементов. (По

аналогии, загруженный в видеоклип, становится видеоклипом.)

• При загрузке в уровень нельзя указать глубину и использовать ее для контроля заме-

щаемого содержимого. Элемент _root SWF-файла, загруженного в уровень с помо-

щью глобальной функции или принимает значение

_root уровня, в который была выполнена загрузка, при этом все ранее находившееся

там содержимое замещается.

С другой стороны, уровни имеют свои преимущества.

• Иногда загрузка в уровень дает своего рода "полное изменение", которого необходимо

достичь. Например, при загрузке фильма в уровень _levelO все уровни выгружаются,

а новый фильм становится уровнем _levelO. Если после этого загрузить фильмы в

другие уровни, то фильм, расположенный в уровне будет задавать свойства

документа, такие как частоту смены кадров, фоновый цвет и размер кадров для всех

уровней. Таким образом, загрузка в 10 обеспечивает, например, согла-

сованность работы группы разработчиков.

• Свойства видеоклипов, такие как _visible и _alpha, можно применить к уровню,

не влияя при этом на остальные. Это дает возможность легко изменять свойства ви-

деоклипов, не затрачивая другие фрагменты фильма.

• При загрузке в уровень SWF-файла, содержащего звук, можно сделать так, что потоко-

вый звук будет воспроизводиться в нескольких сценах.

• При загрузке SWF-файла, использующего в предложениях идентификатор

_root, лучше всего он будет работать, будучи загруженным в уровень, потому что

_root SWF-файла принимает згачение _root уровня. В этом случае загрузка в видео-

клип может вызвать много проблем. Например, переменные _root SWF-файла могут

быть записаны поверх существующих _root с тем же именем.

ИСПОЛЬЗОВАНИЕ исходных ОБЪЕКТОВ для ЗАДАНИЯ

СВОЙСТВ НОВЫХ ВИДЕОКЛИПОВ

Оба метода класса MovieClip, и при созда-

нии видеоклипа позволяют указать исходный объект. Flash автоматически присваивает новому

видеоклипу все локальные свойства исходного объекта. Эта возможность является преиму-

ществом метода duplicateMovieClip О над одноименной глобальной функцией.

В приведенном ниже примере myClip является видеоклипом, к которому выполняется

присоединение; идентификатор связи видеоклипа в библиотеке;

— имя нового видеоклипа; 1 — глубина нового видеоклипа, a initobj — имя

объекта.

1, initObj);

В результате вновь созданный видеоклип newlnstance будет обладать всеми локальны-

ми свойствами объекта Видеоклип newlnstance не будет обладать свойствами,

которые объект наследует у объекта-прототипа своего класса.

Исходный объект можно представить в виде функционального литерала, например, сле-

дующим образом:

1, y:200 }

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 377

Кроме того, новый исходный объект можно создать путем использования оператора new с

функцией-конструктором.

Знакомство с принципами объектно-ориентированного программирования со-

стоялось в главе 11 "Знакомство с и в главе 15 "Объединение

предложений в функции". Подробная информация по этой теме приведена в

главе 21 "Упаковка данных и функций с помощью пользовательских объектов".

Использование оператора new с функцией-конструктором для создания нового исходного

объекта позволяет задать для нового видеоклипа локальные свойства, обычно назначаемые

для экземпляров класса, без назначения нового видеоклипа к этому классу. Как обычно, при

использовании оператора new ключевое слово this в пределах функции-конструктора отно-

сится к созданному объекту. В этом случае им является исходный объект.

В приведенном ниже примере в качестве исходного объекта используется новый аноним-

ный (безымянный) экземпляр функции-конструктора myClass. В результате новый видео-

клип instance получает локальное свойство класса instanceVar, но не свойство прототи-

па prototypeVar.

MyClass = {

=

}

=

depth = 1;

"instance", depth, new

for (a in instance) trace (a); // instanceVar

//

Видеоклип instance получает локальные свойства, которыми обычно обладают экземп-

ляры класса MyClass, но при этом объект instance остается видеоклипом, а не членом

класса MyClass.

Таким образом, исходный объект предоставляет способ частичного сопряжения двух

классов в пределах определенного экземпляра. В более строгом объектно-ориентированном

языке, таком как Java, для видеоклипа instance нужно было бы создать новый подкласс.

Благодаря созданию нового подкласса вместо наличия членов того же класса с различными

типами свойств система классов становится более управляемой.

Функцией исходного объекта можно воспользоваться, если вы хотите создать подкласс

для нового видеоклипа. Этот вопрос будет рассмотрен в следующем подразделе.

ИСПОЛЬЗОВАНИЕ МЕТОДА OBJECT.REGISTERCLASS() для

ВЫДЕЛЕНИЯ НОВОГО ВИДЕОКЛИПА В ПОДКЛАСС

Несмотря на то что registerClass официально является методом класса Ob j он

используется только применительно к видеоклипам. Этот метод нельзя применять к другим

типам объектов, таким как, например, кнопки.

Метод registerClass является удобным способом выделения новых видеоклипов в

подклассы. Эта методика, которая используется для компонентов Macromedia, позволяет

"предварительно зарегистрировать" видеоклип как член определенного класса.

Предположим, что в библиотеке имеется символ с именем clip, который вы хотите ис-

пользовать для создания нового видеоклипа принадлежащего к подклассу myClass.

Для символа clip задайте идентификатор связи, например а затем воспользуй-

тесь методом registerClass

378 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Когда символ clip реализован, Flash вызывает функцию myClass без аргументов, но с

переменной this, указывающей на создаваемый объект нового видеоклипа, в данном слу-

чае — на (Реализация происходит, когда символ помещают в рабочее поле, как

вручную при разработке фильма, так и программным образом во время выполнения про-

граммы, с помощью метода либо метода или глобальной функции

В результате обращения к функции myClass объект myClip

становится членом класса myClass без потери присущих ему методов или свойств, в том чис-

ле и графического содержимого.

ЗНАКОМСТВО с МЕТОДОМ REGISTERCLASS()

Чтобы понять, насколько важен метод что видеоклип яв-

ляется специальным типом объектов Flash. Его базовые свойства (которыми он обладал в

предыдущих версиях Flash) являются "зашитыми" в интерпретирующую программу, и их

можно запросить только в процессе создания видеоклипа вручную либо с помощью методов

или Даже несмот-

ря на наличие класса MovieClip, эти базовые свойства никак с ним не связаны. Базовыми

свойствами, без которых видеоклип не может существовать, являются _х, _у, _height,

_xscale, yscale

С стороны, все методы видеоклипа (такие как play gotoAndPlay и

prevFrame наследуются у класса и, следовательно, присущи только членам

этого класса.

В результате, если вы хотите, чтобы видеоклип принадлежал также пользовательскому

классу, такому как myClass, то столкнетесь с дилеммой. Например, ведет "в никуда" на пер-

вый взгляд кажущийся очень обнадеживающий подход, заключающийся в том, что пользова-

тельский класс наследует свойства класса = new

MovieClip О), а для создания нового объекта в этом классе используется оператор new

(myClip = new MyClass). При этом подходе объект myClip наследует методы и свойства,

присущие классу MovieCl ip, и становится полноправным членом класса MyClass, наследуя

свойства объекта-прототипа этого класса. Однако объект myClip теряет базовые свойства

видеоклипа, без которых видеоклипы не могут функционировать.

С другой стороны, если функция-конструктор используется как исходный объект, для того,

чтобы задать видеоклипу свойства пользовательского класса (см. предыдущий подраздел), то

объект останется полноценным функционирующим видеоклипом, но не станет членом класса

myClass. В частности, он не будет наследовать свойства прототипа класса myClass.

Метод registerClass позволяет сделать объект myClip полноценным членом класса

myClass (наследующим свойства его объекта-прототипа) и при этом сохранить базовые

свойства видеоклипа объекта myClip. Затем можно сделать так, что пользовательский класс

myClass будет наследовать свойства класса MovieClip, и в результате мы получим полно-

функциональный подкласс видеоклипа, которому будут присущи все методы и свойства,

предлагаемые классом myClass, а также все свойства, которыми должен обладать видеоклип.

СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ МЕТОДОВ

И

Легче всего использовать метод registerClass () вместе с методом attachMovie

В приведенном ниже примере — идентификатор связи видеоклипа в библиотеке,

a myClass — имя функции-конструктора.

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 379

= new

1)

Теперь мы имеем полнофункциональный видеоклип членом класса

который, в свою очередь, наследует свойства

ИСПОЛЬЗОВАНИЕ МЕТОДА с ВИДЕОКЛИПОМ,

СОЗДАННЫМ ВРУЧНУЮ

Чтобы использовать метод registerClass с видеоклипом, созданным вручную, необ-

ходимо прибегнуть к небольшой хитрости. Дело в том, что в предложении

registerClass нельзя использовать имя экземпляра видеоклипа вместо его идентифи-

катора связи.

В фильме la приведено решение, согласующееся со способом реализации

компонентов Macromedia. Для видеоклипа задается идентификатор связи, а код инициализа-

ции, аналогичный приведенному ниже, помещают во временную шкалу видеоклипа.

ttinitclip

function MyClass

is

}

= new MovieClipO;

=

is

ttendinitclip

Задание идентификатора связи для видеоклипа, который уже находится в рабочем поле,

кажется алогичным, но эта методика работает.

При исполнении SWF-файла в выходном окне вы увидите фразу constructor is

executing (конструктор выполняется).

Если созданным вручную видеоклипом является _root то функцию myFunc

можно выполнить следующим образом:

В этом случае в окне вы увидите фразу myFunc is executing (myFunc выполняется).

ИСПОЛЬЗОВАНИЕ _PROTO_ ВМЕСТО МЕТОДА

В некоторых ситуациях метод registerClass неприменим. Например, не существует

очевидного способа применения этого метода к видеоклипам, созданным с помощью метода

createEmptyMovieClip О . Чтобы обойти эту проблему и сделать видеоклип членом под-

класса MovieCl ip, воспользуйтесь свойством экземпляра видеоклипа.

Подробная информация о свойстве представлена в главе 21

"Упаковка данных и функций с помощью пользовательских объектов".

При использовании того же подкласса, что и в предыдущем примере (myClass), файл

создает новый пустой видеоклип myHighlight и делает его членом класса

myClass, не влияя на присущие ему свойства видеоклипа. Ниже приведены основные строки

380 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью

кода. Строка 1 создает видеоклип, строка 2 делает его членом класса Строка 3 ис-

полняет myClass, а ключевое слово this относится к объекту myHighlight. (Если классу

myClass присваиваются локальные свойства, то данная процедура должна быть выполнена в

этом месте.) Строка 4 подтверждает, что объект myHighlight действительно является чле-

ном класса myClass.

2: myHighlight. proto =

3: // отображается "constructor is

// executing"

4: // отображается is executing"

Подробная о методе apply () приведена в главе 15 "Объединение

предложений в функции".

КАК РЕШИТЬ ПРОБЛЕМУ ПЕРЕДАЧИ ПАРАМЕТРОВ ПРИ

ИСПОЛЬЗОВАНИИ МЕТОДА

Метод registerClass () не позволяет передавать аргументы функции-конструктору.

Для компенсации этого недостатка можно воспользоваться исходным объектом. Однако фак-

тически исходный объект тоже не передает никаких аргументов конструктору, поэтому кон-

структор нужно модифицировать так, чтобы он знал, где именно в исходном объекте следует

искать значения, которые обычно являются аргументами.

В приведенном ниже взятом из файла la, строка 1 регистри-

рует идентификатор связи clip в классе myClass. Обратите внимание на то, что идентифи-

катор связи можно зарегистрировать до существования класса.

Функция registerClass О возвращает значение, которое должно быть истинным, если

операция проходит успешно; в противном случае возвращаемое значение будет ложным. Од-

нако функция registerClass возвращает значение true даже в экстремальных случаях,

когда и видеоклип, и класс не существуют. В приведенном ниже листинге возвращаемое зна-

чение не проверяется.

Строки определяют функцию-конструктор myClass. Если argO является неопреде-

ленным, то функция ищет значение в объекте zero. Аналогичным образом, ес-

ли неопределенным является функция ищет значение в объекте

Помните, что ключевое слово this обозначает исходный объект внутри функции-

конструктора, т.е. в данном случае args . zero означает initOb j . zero.

Строка 11 делает класс MyClass наследником класса MovieClip. Строка создает ис-

ходный объект со свойством args, которое будет использоваться для передачи значений

функции myClass. (Имя initObj является произвольным.) Строка 13 присоединяет фильм

библиотеки, используя initObj в качестве исходного объекта.

На этом функциональная часть программы завершается. Строка 14 показывает, что объ-

ект myClip является видеоклипом. Строка 15 демонстрирует, что объект имеет дос-

туп к основным свойствам видеоклипа. Строка 16 показывает, что объект myClip имеет дос-

туп к наследуемым свойствам класса MovieClip. Строки 17 и 18 демонстрируют, чтр с по-

мощью функции-конструктора myClass по-прежнему можно создавать видеоклипы.

1:

2: function MyClass (argO, argl) {

3: if (argO == undefined)

4: = this. args.

ГЛАВА17. ДЕМОНСТРАЦИЯ мощи 381

else =

6: if (argl == undefined)

7: =

else

9: =

10: }

11: = new

initObj = : { zero : , one : }

13: 1,

trace(typeof //

15: trace(typeof // number

16: trace(typeof // function

17: myObj = new 0", "argument

18: trace(typeof • // object

ПРОВЕРКА ПЕРЕКРЫТИЯ ВИДЕОКЛИПОВ

Чтобы проверить, перекрывается ли какая-то часть видеоклипа с другим видеоклипом или

определенной точкой, можно воспользоваться методом класса

Этот метод возвращает значение true, если объекты совпадают; в противном

случае он возвращает значение Один или оба видеоклипа либо любой дочерний ви-

деоклип могут обладать свойством _visible, установленным в значение false, что не

влияет на исполнение метода

При наличии двух видеоклипов метод hitTest накладываются ли их огра-

ничительные окошки. Ограничительное окошко — это самый маленький прямоугольник, в ко-

тором содержится вся графика видеоклипа.

Определение ограничительного окошка видеоклипа

Для определения ограничительного окошка видеоклипа воспользуйтесь методом getBounds О

класса MovieClip. Ниже приведён пример:

boundsObject =

где boundsObject — объект с четырьмя свойствами, xMin, и уМах, обозначаю-

щими соответственно левую, правую, верхнюю и нижнюю координаты объекта myClip относи-

тельно точки регистрации временной шкалы с именем coordinateSpace. Таким образом,

boundobject определяет верхнюю координату myClip.

Если не указывать значение координатной плоскости, то в этом качестве будет использоваться

сам видеоклип (в нашем примере — Если не задавать значение самого видеоклипа, то

будет временная шкала. Таким образом, два приведенных ниже выра-

жения являются эквивалентными.

Если необходимо получить только одно из четырех свойств, это можно сделать следующим образом:

topOfMyClip =

Метод можно использовать для определения перекрытия. По сравне-

нию с hitTest метод getBounds является более гибким, поскольку он позволяет проверить

отдельно каждую из четырех границ видеоклипа, а также свободно подстраивать точку тестирова-

ния. Например, вместо координаты yMin можно использовать

Применение метода продемонстрировано в фильме содержа-

щемся на прилагаемом к книге компакт-диске.

382 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Процедура проверки перекрытия двух видеоклипов имеет формат

При проверке наложения видеоклипа и точки можно использовать либо координаты ог-

раничительного окошка видеоклипа, либо области, содержащие графику. Для применения

ограничительного окошка установите булев параметр в значение а для

использования только графики — в значение true. Процедура имеет такой формат:

у, shapeFlag)

Данный подход можно использовать для того, чтобы проверить, находится ли указатель

мыши над видеоклипом:

true)

Эту же методику можно использовать для того, чтобы проверить, перекрывает ли видео-

клип точку регистрации другого видеоклипа.

Если при использовании данной методики возникнут проблемы, для того, чтобы

проверить, перекрывает ли видеоклип точку регистрации видеоклипа, создан-

ного с помощью метода обратитесь к разделу

"Возможные проблемы" в конце этой главы.

Как правило, метод hitTest О используется при наличии оператора if. Кроме того,

проверку на наличие конфликтов следует выполнять неоднократно. Это означает, что код

проверки необходимо поместить в обработчик события. Приведенный ниже блок кода про-

веряет в каждом кадре, не перекрывает ли какая-то часть графики объекта myClip точку

200) временной шкалы, в котором находится данный блок кода.

= function () {

if 200, {

// выполните какие-то действия

Использующиеся в данной проверке значения х и у интерпретируются как точки х и у

основного рабочего поля. Если вы хотите проверить, не перекрывается ли один видеоклип

какой-либо точкой другого, воспользуйтесь методом localToGlobal класса MovieClip,

чтобы преобразовать координаты точки в координаты основного рабочего поля.

МЕТОДЫ ВИДЕОКЛИПОВ И

Началом отсчета локальных координат видеоклипа является его точка регистрации. Нача-

лом отсчета глобальных координат является верхний левый угол основного рабочего поля.

Чтобы преобразовать локальные координаты в глобальные и наоборот, сначала необходимо

создать объект с двумя свойствами, х и у:

myObj = new О;

= 100;

=

Затем этот объект используется в качестве параметра метода localToGlobal или

класса MovieClip. При использовании метода localToGlobal зна-

чения х и у интерпретируются как локальные координаты, которые затем преобразовывают-

ся в глобальные. При использовании метода globalToLocal значения х и у интерпрети-

руются как глобальные координаты, которые затем преобразовываются в локальные.

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 383

Данные методы не возвращают никаких значений. Вместо этого они преобразуют факти-

ческие значения х и у объекта. Например, приведенное ниже предложение преобразует

myOb j . х и j . у из локальных координат объекта ip в глобальные.

УМЕНЬШЕНИЕ "ПРОПУСКОВ" ПЕРЕКРЫВАЮЩИХСЯ ОБЛАСТЕЙ ПРИ

ТЕСТИРОВАНИИ С ПОМОЩЬЮ НЕВИДИМЫХ ДОЧЕРНИХ ВИДЕОКЛИПОВ

Если проверка на перекрытие выполняется только один раз в каждом кадре, то видеокли-

пы, которые имеют малые размеры по сравнению с их относительной скоростью, могут легко

пройти сквозь друг друга без обнаружения перекрывающихся областей. Например, предпо-

ложим, что есть два видеоклипа, представляющих собой квадраты размером 10 пикселей, ко-

торые движутся навстречу друг другу со скоростью 20 пикселей в кадр. Если в кадре

3 видеоклипы находятся на расстоянии 10 пикселей друг от друга, то к кадру 4 они пройдут

сквозь друг друга. При этом перекрытие обнаружено не будет.

Один из способов уменьшения числа "пропусков" заключается в создании невидимого

дочернего видеоклипа (свойство _visible которого установлено в значение внутри

одного обоих видеоклипов, вовлеченных в проверку перекрывающихся областей. Если

дочерние видеоклипы будут больше родительских, то ограничивающими окошками роди-

тельских видеоклипов будут окошки их невидимых дочерних объектов. Если родительские

видеоклипы движутся с постоянной скоростью относительно друг друга, то можно подобрать

такой размер дочерних видеоклипов, при котором перекрывающиеся области пропущены не

будут. Если скорость родительских видеоклипов относительно друг друга является перемен-

ной, то дочерние объекты можно масштабировать в сторону увеличения при возрастании от-

носительной скорости.

СОЗДАНИЕ иллюзии ИДЕАЛЬНОГО СОВПАДЕНИЯ

Когда невидимый дочерний видеоклип больше видимой графики, программа может об-

наружить перекрытие еще до наложения видимых графических элементов. Если видеоклипы

двигаются достаточно быстро, то невооруженным глазом можно не заметить, что графиче-

ские элементы фактически не соприкасаются. С другой стороны, обычно существует предел

насколько большим может быть невидимый дочерний видеоклип до того, как иллюзия

столкновения графических элементов друг с другом перестанет быть убедительной.

Эту проблему можно решить, переместив видеоклипы в нужное место сразу же после об-

наружения перекрытия. Такую методику иллюстрирует функция paddle взятая из файла

Функция paddle подобна методу hitTest в том, что она проверяет расстояния х и

у между точками регистрации двух видеоклипов. Когда расстояния достаточно малы, это счи-

тается областью совпадения. При ускорении видеоклипов размеры областей совпадения уве-

личиваются. Этот подход задействует меньше ресурсов процессора и менее подвержен

"пропускам" по сравнению с методом hitTest

Функция paddle описывает отскок мяча от биты. Строка 4 функции гарантирует, что об-

ласти совпадения будут обнаружены только в случае, когда экземпляр ecoballi двигается

справа налево, т.е. когда его скорость является отрицательной vx < 0).

В строке 6 функции paddle регулируется размер области совпадения. Величина hitDx

увеличивается по мере увеличения скорости биты, paddleVx, и скорости мяча,

ecobal vx. При этом уменьшается вероятность их прохождения сквозь друг друга.

384 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Функция () в строке 2 гарантирует, что скорость объекта paddle (биты) ни-

когда не будет меньше "константы совпадения" НС. Таким образом, всегда бу-

дет больше или равно 1. Поэтому в строке 6 умножение на величину paddleVx/HC может

только увеличить (и никогда не уменьшит) величину области совпадения.

function {

paddleVx = HO;

oldPaddlex =

4: if < 0) {

5: // hitDx но никогда не превышает 100

6 :

7: if ( - < hitDx)

- < hitDy) ) {

// бита ударяет по мячу - создается иллюзия точного совпадения

10

11

12

13

14

15

=

// отскок обратно

= -

ВЫПОЛНЕНИЕ НЕСКОЛЬКИХ ПРОВЕРОК НА НАЛИЧИЕ СОВПАДЕНИЙ

В КАЖДОМ КАДРЕ

В некоторых приложениях можно поместить код проверки в обработчик события, связан-

ный с мышью, например в onMouseMove. Эти обработчики событий могут активизироваться

в каждом кадре несколько раз.

Выполнение нескольких проверок в каждом кадре поглощает много ресурсов

процессора и вызывает риск замедления работы приложения до недопустимо-

го уровня.

Еще одной возможностью является использование для движения видеоклипов и выпол-

нения нескольких проверок в каждом кадре глобальной функции set Interval Ес-

тественно, выполнение новой проверки будет бесполезным, если со времени последней

видеоклип не был перемещен. Кроме того, для обновления экрана следует использовать

функцию

Глобальная функция рассмотрена в следующем подразделе.

ПОВТОРНЫЙ ВЫЗОВ ФУНКЦИИ С ПОМОЩЬЮ

ГЛОБАЛЬНОЙ ФУНКЦИИ

Глобальная функция setlnterval О вызывает функцию или метод неодно-

кратно, через определенные интервалы времени в процессе воспроизведения ви-

деоклипа. Вам необходимо задать параметр, указывающий интервал в миллисе-

кундах. Ниже приведены два формата этой функции.

Set . . . , )

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 385

Например:

Данная функция выглядит достаточно просто. Однако в реальности, как показывают два

следующих примера, взаимосвязь между указанным и фактическим интервалом исполнения

является совсем не очевидной.

• Если указанный интервал меньше длины кадра (времени, требующегося на воспроиз-

ведение одного кадра), то вызов функции или метода происходит в какой-то точке по

истечении интервала. Фактический интервал часто бывает в 10 раз больше указанного.

Например, частота смены кадров в 1 кадр в секунду эквивалентна продолжительности

кадра в 1000 миллисекунд (1 секунда). Если при частоте смены кадров 1 кадр в секунду

задать интервал в 10 миллисекунд, то фактический интервал будет равен

100 миллисекундам, что в 10 раз превышает указанный интервал.

• Кроме интервал может варьироваться в зависимости от того, насколько интен-

сивной работы процессора требует функция или метод, какие еще процессы происхо-

дят параллельно с данным и насколько мощным является компьютер.

• Если указать интервал, больший продолжительности кадра, то функция будет выполняться

при переходе к следующему кадру. если при частоте 1 кадр в секунду указать ин-

тервал 1500 миллисекунд кадра), то функция будет выполняться через кадр.

ОПРЕДЕЛЕНИЕ ФАКТИЧЕСКОГО ИНТЕРВАЛА

Приведенную ниже функцию можно использовать для определения фактического интер-

вала, образующегося на основе любого заданного. Просто измените значение interval в

первой строке.

interval =

clearVal =

function measurelnterval () {

if (restart == undefined) restart = 0;

else restart = start;

start =

var elapsed = start - restart;

Обратите внимание на функцию updateAf terEvent в последней строке, использую-

щуюся для обновления экрана.

Функция setlnterval О может ухудшить скорость воспроизведения фильма.

Чем больше интервалов выполняется одновременно, тем меньше производи-

тельность при воспроизведении фильма.

ОСТАНОВКА и "СБРОС" ПОВТОРЯЮЩЕГОСЯ ВЫЗОВА ФУНКЦИИ

Функция setlnterval возвращает идентификатор интервала, который можно передать

в метод clearlnterval чтобы остановить исполнение функции. Например, в приведенном

в предыдущем подразделе коде идентификатор интервала clearVal указан во второй строке.

Таким образом, следующая строка отменит выполнение функции measurelnterval

386 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ПЕРЕТАСКИВАНИЕ ВИДЕОКЛИПОВ

При разработке графических пользовательских интерфейсов и игр очень полезной будет

возможность подобрать графику на экране, переместить ее в другое место и отпустить там, где

необходимо.

Во Rash 5 создать поведение перетаскивания было очень просто. Во Flash MX это

сделать еще проще благодаря появлению видеоклипов кнопок — видеоклипов с

обработчиками событий, присущих кнопкам, таких как onPress и onRelease.

Подробная информация о видеоклипах кнопок и обработчиках событий содержится

в главе 16 "Взаимодействие, события и установление последовательности".

ПРЕДЛОЖЕНИЯ STARTDRAG() и

Во Flash 5 поведение перетаскивания реализовывалось путем помещения внутри видео-

клипа невидимой кнопки и присоединения к ней двух обработчиков событий: on

содержащего предложение и on содержащего предложение

stopDrag Такая же базовая стратегия применяется и во Flash MX, за исключением

что теперь обработчики событий onPress и onRelease можно присоединять непосредст-

венно к видеоклипу.

В обоих случаях результат с точки зрения пользователя будет одинаковым: при нажатии

кнопки мыши видеоклип, указанный в предложении startDrag (внутри обработчика со-

бытий onPress), "прикрепляется" к указателю мыши и перемещается вместе с ним. Когда

пользователь отпускает кнопку мыши, в обработчике событий onRelease выполняется

предложение stopDrag и любой перетаскиваемый в данный момент видеоклип перестает

быть таковым, т.е. видеоклип больше не привязан к указателю мыши и при дальнейшем пе-

редвижении мыши вместе с ней не перемещается.

Обратите внимание на то, что метод stopDrag применяется не только к видеоклипу,

указанному в одноименном предложении. Он отключает процедуру перетаскивания для лю-

бого видеоклипа, который можно перетаскивать в текущий момент. Таким образом, он явля-

ется точным эквивалентом глобальной функции Имя видеоклипа подобно

комментарию, напоминающему о том, какой видеоклип в данный момент должен быть дос-

тупным для перетаскивания.

Метод stopDrag не принимает никаких параметров. Например, ниже приведена часть

кода, соответствующая блоку stopDrag типовой реализации процедуры перетаскивания.

= function 0 {

Ниже приведен блок кода startDrag типовой реализации процедуры перетаскивания.

= function () {

Дополнительные параметры метода startDrag рассматриваются в следующем подразделе.

ПАРАМЕТРЫ МЕТОДА

Метод startDrag имеет ряд вспомогательных параметров, предназначенных для вы-

полнения двух следующих задач.

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 387

• Привязка точки регистрации видеоклипа к указателю мыши. Это происходит, если

вспомогательный параметр lock установлен в значение true. Если он установлен в

значение то видеоклип и указатель мыши остаются в том пространственном

отношении, в котором они пребывали, когда пользователь первоначально нажал

кнопку мыши. Например, в приведенном ниже предложении точка регистрации ви-

деоклипа привязывается к указателю мыши.

• Если аргумент lock не указан, он трактуется как установленный в значение

• Ограничение области, в пределах которой можно перетаскивать видеоклип. Эта об-

ласть задается четырьмя параметрами: top, right и bottom. Например, приве-

денное ниже предложение ограничивает область перетаскивания видеоклипа

прямоугольником, начинающимся в левом верхнем углу рабочего поля и простираю-

щимся на 100 пикселей вправо и 200 пикселей вниз.

О, 100,

Интересный пример реализации перетаскивания приведен в файле f la от

Flash-разработчика Энди Холла (Andy Hall), содержащемся на прилагаемом к книге компакт-

диске. В строке 1 создается пустой видеоклип, а в строках 2-8 с помощью методов рисования

ему ставится в соответствие графический символ квадрата. Видеоклипу ставится в соответст-

вие функциональность кнопки путем присоединения обработчика событий onRelease, a

возможность завершения процедуры перетаскивания видеоклипа реализуется за счет поме-

щения в этот обработчик событий предложения stopDrag (строки

Для плавной реализации перетаскивания теперь следовало бы определить обработчик со-

бытия onPress и поместить в него предложение startDrag как показано в предыдущем

подразделе. Однако вместо этого в файле f la отключается отображение кур-

сора в виде руки (строка 12) и "скрывается" предложение startDrag находящееся внутри

обработчика события (строки который предназначен для того, чтобы

"наблюдать" за нажатием пользователя клавиши <Пробел>. И только когда пользователь на-

жмет эту клавишу, будет отображен курсор в виде руки (строка 16) и определен обработчик

события onPress, содержащий предложение startDrag

В данном коде также содержится обработчик события onKeyDown, который, когда пользо-

ватель отпустит клавишу, повторно отключает отображение курсора в виде руки (строка 24), а

также обработчик события onPress, устанавливая его в значение null (строка 25).

В результате перетаскивание можно выполнить только в том случае, если нажата клавиша

>.

9

10

11

12

13

14

15

= {

}

= false;

spaceListen = new

= function () {

if == Key. SPACE) {

388 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

11: }

= false;

= new

= function () {

15: if == {

= true;

17: = function () {

18:

19: }

20: }

21: }

22: = function () {

23: if == {

= false;

a.onPress = null;

}

27: }

28:

СВОЙСТВО

Когда пользователь перетаскивает какой-либо объект, очень важно, где он его отпускает.

Перетаскивание файла в корзину совершенно другие в программе по

сравнению с перетаскиванием файла в папку. Предназначенное только для чтения свойство

видеоклипа _droptarget позволяет легко проверить, где пользователь отпустил или должен

отпустить перетаскиваемый видеоклип.

Если точка регистрации перетаскиваемого видеоклипа располагается поверх любой части

другого видеоклипа (независимо от того, была ли отпущена кнопка мыши), то свойство

_droptarget содержит путь к этому видеоклипу. Если перетаскиваемый видеоклип не рас-

положен над другим видеоклипом, то свойство _droptarget будет установлено в значение

Основы свойства _droptarget заложены еще во Flash 4. Возвращаемый им путь к видео-

клипу указывается в виде строки с использованием принятого во Flash 4 "представления с ис-

пользованием символов косой черты", как показано в следующих примерах:

ДИНАМИЧЕСКИЕ МАСКИ

Можно вручную создать слой маски, который будет отображать нижние слои, распола-

гающиеся под графикой слоя маски. Если слои маски не содержат графику, то содержимое

расположенных под ним слоев будет скрыто.

Маски рассматривались в главе 3 "Рисование во Flash".

Во Flash 5 маску можно было задать только с помощью графического пользователь-

ского интерфейса, но не Кроме того, посредством невозмож-

но было управлять видеоклипом, находящимся в слое маски. Если вы хотели аними-

маску, необходимо было создать промежуточные отображения формы или

движения. С ActionScript можно было работать в видеоклипах, содержащихся в маскированных сло-

ях, и в видеоклипах, содержащих внутренние маски. Все эти функции поддерживаются и во

Flash MX.

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 389

Новым во Flash MX является метод класса MovieClip, позволяющий про-

граммным образом назначить один видеоклип маской другого. Например, в приведенном

ниже предложении является именем экземпляра видеоклипа, подлежащего

маскированию, a — именем экземпляра видеоклипа, являющегося маской.

Маска и маскируемый объект образуют единую "моногамную" пару: можно иметь только

одну маску на каждый маскируемый объект и только один маскируемый объект на каждую

маску. При задании новой маски для видеоклипа все предыдущие маски в этом качестве

функционировать не будут. Как правило, это ограничение не строгое, поскольку и маска, и

маскируемые видеоклипы могут содержать несколько кадров, несколько слоев и несколько

дочерних видеоклипов, работающих по сценарию.

Если вы хотите отключить маскирование определенного видеоклипа без назначения но-

вой маски, то в качестве параметра видеоклипа-маски задайте значение null:

// myMaskedClip больше не является маскированным

Вот что нужно помнить при динамическом маскировании.

• Маски всегда невидимы, пока они являются масками. Если видеоклип-маска перестает

использоваться в этом качестве, он становится видимым, а это не всегда нужно поль-

зователю. Следовательно, перед отключением маску следует сделать невидимой, как

показано ниже:

= false;

• Для создания масок можно использовать прикладной программный интерфейс рисо-

вания. Однако, так же, как не дают никакого эффекта штрихи (линии) в масках, соз-

данных вручную, являются совершенно бесполезными и линии, созданные в масках с

помощью прикладного программного интерфейса рисования. Масками могут служить

только те части видеоклипа, которые имеют заливку.

Прикладной программный интерфейс рисования рассматривается в главе 18

"Процедура рисования с помощью

• Системные шрифты в маскированных видеоклипах отображаются, но не маскируются.

Это означает, что они будут видны, даже будучи расположенными под маской! Чтобы

обойти эту проблему, необходимо внедрить шрифты следующим образом:

= true;

• Для компонентов пользовательского интерфейса Flash свойство можно

задать глобально:

= true;

• Задание видеоклипа для самой маски не играет никакой роли, как в этом примере:

// ничего не происходит

Видеоклипы и аудио: метод

Недокументированный метод класса MovieClip позволяет присоединять к

видеоклипу потоковое аудио. По своей функциональности он аналогичен методу

класса video. (Класс MovieClip имеет также недокументированный метод

но я не смог получить о нем никакой информации.)

390 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

С помощью Flash MX Flash-плейер позволяет сделать локальное потоковое видео и аудио

доступным для локального просмотра и прослушивания. Эту возможность можно использо-

вать, например, если вы хотите посмотреть и послушать себя при подготовке публичного вы-

ступления. При присоединении локального потокового видео и/или аудио Flash-плейер не

публикует и не записывает видео и аудио; он просто позволяет посмотреть и послушать то,

что происходит в текущий момент.

Приведенный ниже пример демонстрирует присоединение потокового аудио из локального

микрофона.

= // захват потокового аудио

// громкости

// присоединение потокового аудио к ви-

деоклипу

Возможность присоединения потокового аудио и видео становится более интересной при

работе с приложением Flash Communication Server, которое позволяет Flash-плейеру пуб-

ликовать видео и аудио для удаленной аудитории по сети. Таким образом, к примеру, мо-

гут реализоваться видеоконференции. Кроме Flash-плейер может записывать видео и

аудио для последующего воспроизведения.

Подробная информация о функции get и о классе Video

представлена в главе 20 "Использование встроенных объектов фильмов".

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему я могу получить доступ к данным в загруженном SWF-файле?

Вы должны уметь присоединить фильм из библиотеки загруженного SWF-файла и

получить доступ к переменным, видеоклипам и определенным в SWF-файле.

Если вы не можете этого сделать, то, вероятно, некорректно ссылаетесь на соответствую-

щие элементы. Для просмотра путей и идентификаторов, связанных с теми или иными эле-

ментами, выполните следующие действия.

• Выполните команду Movie фильма). Для пере-

числения переменных в открывшемся окне Debugger (Отладчик) выполните команду

Variables переменные) либо нажмите клавиши

<Cmd+Option+V> (Macintosh) или (Windows).

• Для перечисления объектов в окне Debugger выполните команду Objects

объекты) либо нажмите клавиши <Cmd+L> (Macintosh) или

<Ctrl+L> (Windows).

Если вы обращаетесь к элементам правильно, то, вероятно, пытаетесь получить к ним

доступ до того, как SWF-файл был полностью загружен. Чтобы убедиться в том, что файл за-

гружен полностью, выполните следующие действия.

• Установите соответствующую задержку. Например, код, предоставляющий доступ к

элементам, можно поместить через несколько кадров после кода, загружающего SWF-

файл. Однако это предполагает необходимость предусмотреть время загрузки.

• Используйте событие data функции О в комбинации либо с методами

и getBytesTotal О класса MovieClip, либо со свойствами

видеоклипов _framesloaded и либо с исключенной функцией

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 391

Подробная информация о событии data функции О была приведена

в главе 16 "Взаимодействие, события и установление последовательности".

Я использую метод чтобы проверить, накладывается ли видеоклип на

точку регистрации фильма, созданного с помощью метода

Почему проверка не выполняется ?

Когда видеоклипы создаются вручную, то вполне естественно создавать графику вокруг

точки регистрации и затем позиционировать видеоклип в рабочем поле. При этом вы привы-

каете, что точка регистрации располагается в центре графического изображения.

При использовании метода createEmptyMovieClip для создания графики использу-

ется прикладной программный интерфейс рисования, и графика может быть создана и раз-

мещена без изменения точки регистрации. Например, с помощью функции

makeTriangle приведенной в файле la главы 16

"Взаимодействие, события и установление последовательности", можно создать и разместить

треугольник, написав всего одну строку кода, без изменения точки регистрации. Если изме-

нять точку регистрации, то для достижения того же самого визуального эффекта понадобятся

уже три строки кода. Например, в приведенном ниже листинге результат будет выглядеть

одинаково как при исполнении строк так и при исполнении только строки 15.

1

2

3

4

5

6

7

8

9

11

12

13

14

15

function x2, zdepth) {

("triangle",

with

beginFill (OxOOOOFF, 50);

lineTo

lineTo (xl,

}

/* 0, 60, -50,

= 200;

triangle._y = 200; */

200, 260, 330, 250, 1)

При использовании более эффективного синтаксиса легко забыть о том, что точка регист-

рации не находится около графики. Тогда при выполнении каких-либо операций, для кото-

рых важна точка регистрации, можно получить удивительные результаты. Например, приве-

денная ниже проверка сообщит о наложении видеоклипа на точку регистрации тре-

угольника. Однако в это время видеоклип не будет находиться рядом с графическим

изображением треугольника:

200, 260, 330, 250, 1)

FLASH ЗА РАБОТОЙ: ИГРА "СЧАСТЛИВЫЙ СЛУЧАЙ"

В содержащемся на компакт-диске файле la от разработчика Питера Холла

(Peter Hall) для создания игры "счастливый случай" используются прикладной программный

интерфейс рисования и динамическое маскирование.

В файле f la за четырьмя закрытыми окнами случайным образом скрыты неко-

торые символы: яблоко, колокольчик, лимон и звезда. Игрок стирает покрытие и открывает

окна в надежде найти совпадение. Стирая покрытие, игрок фактически создает маску с по-

мощью прикладного программного интерфейса рисования. Когда игрок заполняет маску, под

392 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

ней появляется символ, поскольку части маски, содержащие графику, являются частями,

отображающими расположенное под ними содержимое.

Видеоклип, содержащий символы, называется symbols. Именем экземпляра видеокли-

па-маски является wax (покрытие). Каждое стирание создает дочерний видеоклип внутри

wax с именами 2 и т.д.

Приведенная ниже строка задает видеоклип wax в качестве маски видеоклипа

Следующая строка создает видеоклип wax:

Методы startScratch и определены в прототипе класса поэтому

доступ ним имеют все видеоклипы. методы вызывают в обработчиках событий onMouseDown

и Таким образом, обработчик событий onMouseDown (нажатие кнопки мыши)

начинает процесс стирания, onMouseUp (отпускание кнопки мыши) его останавливает.

Таким образом, основу программы f la составляют следующие элементы.

• Два метода прототипа класса MovieClip: startScratch () и endScratch

doScratch является вспомогательной для метода startScratch

• Два обработчика событий видеоклипа wax: onMouseDown и onMouseUp.

Имеется также функция startAgain позволяющая начать игру сначала.

Ниже приведена функциональная схема программы.

• =

Создает пустой видеоклип (такой как и рисует один

"стирающий штрих" с помощью функции doScratch

• doScratch

Использует прикладной программный интерфейс рисования для рисования в текущем

видеоклипе маски (таком как Рисование выполняется заливкой, поскольку

линии в качестве масок не используются.

• =

Удаляет свойства в видеоклипе маски (таком как Свойства были заданы в

функции startScratch К удаляемым свойствам относится и обработчик события

onEnterFrame, созданный в функции startScratch

• =

Начинает новую операцию стирания при каждом нажатии кнопки мыши.

• = functionO [this . i] . endScratch

Завершает операцию стирания при отпускании кнопки мыши.

• startAgain = functionO

Вытирает все рисунки из маски (wax).

На По причинам, которые я не смог определить, файл f la не работает в

версии плейера Flash 6 для Macintosh.

ГЛАВА 17. ДЕМОНСТРАЦИЯ мощи ВИДЕОКЛИПОВ 393

ГЛАВА

ПРОЦЕДУРА РИСОВАНИЯ с помощью

ACTIONSCRIPT

В ЭТОЙ ГЛАВЕ...

Знакомство с методиками рисования во Flash MX 395

Использование объектов для отслеживания операций рисования 398

Рисование линий и кривых 399

Оптимизация функций рисования кривых 405

Использование сплошной заливки 406

Работа с градиентной заливкой 407

Возможные проблемы 414

Flash за работой: рисование круга, состоящего из восьми сегментов 415

ЗНАКОМСТВО с МЕТОДИКАМИ РИСОВАНИЯ во FLASH MX

Программное управление процедурами рисования является новой функцией Macromedia

Flash реализуемой посредством методов рисования класса методы,

позволяющие рисовать с помощью имеют очень простой формат. Они доста-

вят вам огромное удовольствие. (Попробуйте поработать с содержащимися на компакт-

диске файлами play.pla, от разработчика Кита Питерса (Keith Peters), la, a

также api_f f la и f la от разработчика Милли (Millie С помо-

щью методов рисования можно выполнять такие задачи, которые ранее требовали больших усилий.

К примеру, во Flash 5 можно было создать программу для рисования, но во Flash MX сде-

лать это гораздо проще. Так, в содержащемся на компакт-диске файле ос-

новная функция рисования реализована всего лишь пятью строками кода!

С другой стороны, не всегда легко добиться того, чтобы с помощью методов рисования

точно выполнялись необходимые операции. В частности, чтобы с высокой точностью управ-

лять нарисованной кривой, потребуется либо знание тригонометрии, либо использование

"метода проб и ошибок".

В целом с помощью методов рисования можно выполнить следующее:

• нарисовать линии и кривые; ,

• заполнить замкнутые области.

На Все методы рисования называются прикладным программным интерфейсом

рисования.

Сохранение рисунков

Во Flash не существует средств создания программным образом графических файлов (таких как

GIF, PNG или BMP). Однако связанные с рисунком данные можно легко сохранить с помощью

локального объекта коллективного использования. После этого данные можно перенести об-

ратно во Flash-приложение и перерисовать графическое изображение, что продемонстрирова-

но в содержащемся на компакт-диске файле f la от разработчика Питера Холла. Этот

файл, реализованный менее чем в 75 строках кода, представляет собой простую программу для

рисования, которая может сохранять и извлекать данные рисунков.

Подробная информация об объектах коллективного использования представ-

лена в главе 26 "Локальная связь".

В табл. перечислены восемь методов прикладного программного интерфейса рисова-

ния, их форматы и предназначение.

ТАБЛИЦА 18.1. МЕТОДЫ ПРИКЛАДНОГО ПРОГРАММНОГО ИНТЕРФЕЙСА РИСОВАНИЯ

Метод ПРИМЕРЫ ОПИСАНИЕ

(OxFFOOOO ,

Fill

Если есть траектория, замыкает

ее с помощью линии и применяет заливку к

области. Заливка последующих

траекторий не выполняется

Если есть разомкнутая траектория, замы-

кает ее с помощью линии и применяет за-

ливку к замкнутой области. Заливка по-

следующих замкнутых траекторий выпол-

няется сплошным зеленым цветом

Если есть разомкнутая траектория, замыкает

ее с помощью линии и применяет заливку к

области. Заливка последующих

замкнутых траекторий выполняется красным

цветом с прозрачностью 80%

Если есть разомкнутая траектория, замы-

кает ее с помощью линии и применяет за-

ливку к замкнутой области. Заливка по-

следующих замкнутых траекторий не вы-

полняется

Если есть траектория, замыкает

ее с помощью линии и применяет заливку к

ЧАСТЬ III. РАСШИРЕНИЕ с помощью ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 18.1

МЕТОД ПРИМЕРЫ ОПИСАНИЕ

clear

("linear", colorArray,

alphaArray,

ratioArray,

(controlX, controlY,

anchorX,

OxFFOOOO,

(100, 50)

(200,

250)

Заливка последующих замк-

нутых траекторий не выполняется

Если есть разомкнутая траектория, замыкает

ее с помощью линии и применяет заливку к

замкнутой области. Выполняет линейную гра-

диентную заливку последующих замкнутых

траекторий, переходя от цвета к цвету, ука-

занных в массиве (color-Array), с уровня-

ми прозрачности, в массиве

(alphaArray), коэффициентами, указанны-

ми в массиве (ratioArray), и преобразуе-

мыми в соответствии с матрицей преобразо-

вания transformationMatrix

Удаляет из клипа все созданные программ-

ным образом рисунки и отменяет текущий

стиль линии и текущую заливку

Рисует кривую, используя текущее положения пе-

ра, координаты (anchorX, anchorY) и

контрольных точек controlY)

Завершает и защищает от последующих изме-

нений заливку, созданную с момента преды-

дущего исполнения предложения begin-

или beginGradientFill (). Не вы-

полняет заливку замкнутых областей до тех

пор, пока не встретится другое предложение

ИЛИ

Прекращает рисование линий

Рисует сплошные черные линии толщиной

6 пикселей

Рисует сплошные красные линии толщиной

6 пикселей

Рисует сплошные красные линии толщиной

6 пикселей и прозрачностью 50%

Рисует линию текущего стиля. Начинает рисо-

вание с текущего положения пера и заканчи-

вает в точке, расположенной на расстоянии

100 пикселей вправо и 50 пикселей вниз от-

носительно точки регистрации клипа myClip

Устанавливает текущее положение пера в точ-

ке, расположенной на расстоянии

200 пикселей вправо и 250 пикселей вниз от-

носительно точки регистрации клипа myClip

ГЛАВА 18. ПРОЦЕДУРА РИСОВАНИЯ с помощью ACTIONSCRIPT 397

Часть прикладного программного интерфейса рисования, касающаяся рисования линий,

в основном имитирует инструмент Реп (Перо). Однако (если знать, как это сделать) можно

дублировать все операции, которые выполняются с помощью обычных инструментов рисо-

вания Flash: рисовать круги, прямоугольники, треугольники, прямые или волнистые линии,

выполнять сплошную и градиентную заливку и т.п.

Все функции рисования являются методами класса Это имеет смысл, по-

скольку во Flash видеоклипы являются контейнерами графики. Все операции прикладного

программного интерфейса рисования относятся к одному видеоклипу. Например, если вы

указываете стиль линии, он применяется только к графике, программным образом созданной

внутри одного клипа.

ИСПОЛЬЗОВАНИЕ ОБЪЕКТОВ для ОТСЛЕЖИВАНИЯ

ОПЕРАЦИЙ РИСОВАНИЯ

Для того чтобы сгруппировать создаваемые графические изображения и присвоить им

имена, несущие смысловую нагрузку, можно использовать объекты. Систематизированные

имена гораздо более понятны, чем просто числа.

Предположим, к примеру, что вы рисуете окружность. Необходимо указать ее централь-

ную точку (координаты х и у) и радиус.

Для группирования и присвоения имен данным можно использовать классы Point и

Circle. Как всегда во Flash, классы реализуются в виде функций, а новые члены класса соз-

даются с помощью оператора new.

Знакомство с классами и оператором new состоялось в главе 15 "Объединение

предложений в функции".

Для создания центральной точки воспользуйтесь классом Point:

function Point (x , у) {

= х;

=

myCenter = new Point(100,

Ниже показано, как координаты х и у этой точки назначаются параметрами метода

Эта строка кода гораздо понятнее, чем строка

moveTo (100, 100)

С помощью класса Circle центральная точка создается как свойство окружности. Для

определения задать еще одно свойство — радиус:

function Circle (centerX, centerY, radius) {

= new

= radius;

398 ЧАСТЬ РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

РИСОВАНИЕ линий и КРИВЫХ

"Рабочими лошадками" прикладного программного интерфейса рисования является ме-

тод посредством которого рисуются прямые линии, и метод curveTo с помо-

щью которого рисуются кривые. К обоим методам применимы следующие положения.

• Графические изображения, создаваемые с помощью прикладного программного ин-

терфейса рисования, располагаются под графическими изображениями, созданными в

том же видеоклипе вручную.

• Методы рисования предполагают наличие начальной точки (текущее положение рисо-

вания или текущее перо).

• Если какие-то параметры пропущены, метод не выполняется и текущее положение

рисования не изменяется.

• Точка назначается путем задания координат х и у. Эта точка расположена на расстоя-

нии х и у относительно точки регистрации видеоклипа, в котором выполняется рисо-

вание. В основной временной шкале точкой регистрации является левый верхний

угол, в других случаях ею по умолчанию является середина видеоклипа.

РИСОВАНИЕ линий

Чтобы нарисовать линию, необходимо выполнить две операции:

• указать стиль линии;

• сообщить Flash координаты начальной и конечной точки.

Flash рисует линию, начиная с указанной начальной точки и до конечной точки. Затем

конечная точка становится текущим положением пера, которое используется для рисования

другой линии без обращения к методу moveTo

УКАЗАНИЕ стиля линии

Перед тем как рисовать линию, необходимо указать ее стиль. Для этого используется ме-

тод Стиль будет поддерживаться до тех пор, пока вы не укажете новый. Стили

линии можно изменять в пределах траектории, после завершения одной линии и перед нача-

лом следующей.

На Непрерывный ряд линий или кривых, образованных "без отрыва пера от бума-

ги", называется траекторией.

Метод имеет три опциональных параметра, определяющих толщину, цвет

и прозрачность линии.

• Толщина измеряется в пикселях. Значение 0 означает волосяную линию.

• Цвет указывается в виде числа; наиболее удобочитаемым является

представление.

• Прозрачность указывается в виде числа в диапазоне от 0 (невидимый) до 100

(сплошной). Если этот параметр опущен или указано число больше 100, Flash исполь-

зует значение 100. Если указано отрицательное число, Flash использует значение 0.

Подробная информация об использовании объекта Color и о представлении цве-

тов в виде значений приведена в главе 20 "Использование

встроенных объектов фильмов".

ГЛАВА 18. ПРОЦЕДУРА РИСОВАНИЯ с помощью ACTIONSCRIPT 399

На заиетку Цвета, назначаемые для видеоклипа с помощью объекта Color, замещают цвета,

назначенные с помощью прикладного программного интерфейса рисования.

Несмотря на то что все три параметра не являются обязательными, для наличия следую-

щего необходимо наличие предыдущего. Нельзя указать цвет, если не указана толщина, и

нельзя указать прозрачность, если не указан цвет.

Метод имеет такой формат:

цвет,

Если опустить все параметры, то Flash прекратит рисовать линии в видеоклипе.

Примеры метода lineStyle () см. выше, в табл. 18.1.

НАЗНАЧЕНИЕ НАЧАЛЬНОЙ и КОНЕЧНОЙ ТОЧЕК

Если только что была нарисована линия, Flash предполагает, что ее конечная точка будет

начальной для следующей линии. Flash никогда "не отрывает пера от бумаги", если не приве-

дено никаких специальных распоряжений сделать это.

Если линия еще не нарисована или если вы не хотите, чтобы конечная точка последней линии

была начальной для следующей, необходимо сообщить Flash, где следует начать рисовать линию.

Для этого используется метод moveTo задающий текущее положение пера. функция одно-

временно выполняет "начать здесь" и "оторвать перо от бумаги и перенести его сюда".

Пример использования метода () при изменении заливки приведен

ниже, в разделе "Использование сплошной заливки".

Пример применения метода moveTo см. выше, в табл. 18.1.

При вызове метода рисования без обращения к методу moveTo начальной точкой по

умолчанию будет точка регистрации (О,

Координаты конечной точки задаются с помощью метода lineTo О . Пример его приме-

нения см. в табл. 18.1.

НЕПРЕРЫВНОЕ РИСОВАНИЕ с помощью мыши

Основные функции рисования легко реализуются с помощью прикладного программного

интерфейса рисования. Рассмотрим, к примеру, файл la. Написав несколько

строк кода, мы заставляем мышь непрерывно рисовать черную линию толщиной 6 пикселей.

Ниже приведен такой код.

= {

}

Наличие предложения updateAf terEvent не является абсолютной необходимостью,

но оно делает линию более плавной.

РИСОВАНИЕ КВАДРАТА

Методы рисования линий проиллюстрируем на примере создания квадрата. Ниже приве-

ден код.

1: function Point (x, у) {

= X;

= у;

4:

400 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

5: function Square (centerX, centerY, side) {

6: = new

= side;

8: top = +

9: = -

10: = -

11: = +

12:

= new

15: with (mySquareClip) {

with (mySquare) {

17:

18: top)

19:

20: lineTo(right,

21:

22: lineTodeft,

23: }

Теперь построчно рассмотрим, какие операции выполняет программа.

• Создаются класс Point (строки и класс Square (строки Класс Square

принимает три параметра. Первые два указывают координаты х и у центра квадрата,

третий указывает длину стороны квадрата. Исходя из этих значений, функция Square

вычисляет значения top, bottom, и right, каждое из которых составляет поло-

вину длины стороны, начиная от центра квадрата.

• Создается видеоклип, в котором выполняется рисование (строка 13).

• Создается член класса Square с именем mySquare (строка 14).

• Указывается стиль линии (строка 17). Для задания толщины линии используется

обычное число. Для сохранения значений толщины, цвета и прозрачности линии

можно создать свойство класса Square, подобно тому как для сохранения значений х

и у центра квадрата используется свойство center. Например, можно определить

класс следующим образом:

function LStyle lineColor, lineTransparency) {

=

= lineColor;

= lineTransparency;

Затем к классу Square в качестве параметров можно добавить свойства

lineThickness, lineColor и и создать член класса Lstyle

внутри класса Square, аналогично примеру со свойством center, являющимся чле-

ном класса Point. Например, приведенная ниже строка внутри функции Square бу-

дет создавать свойство в каждом объекте, образованном классом Square.

= new lineTransparency)

Тогда предложение new в строке 14 будет выглядеть следующим образом:

= new

А строка будет такой:

ГЛАВА 18. ПРОЦЕДУРА РИСОВАНИЯ с помощью ACTIONSCRIPT 401

Однако существующее предложение lineStyle короче и легче для восприятия.

Назначается начальная точка (строка 18).

Рисуется квадрат (строки 17-22). Чтобы избежать повторения имени видеоклипа

и имени объекта квадрата программа использует вло-

женные операторы with. Когда необходимо описать переменную или выполнить ме-

тод, Flash сначала выполнит поиск свойства или метода с этим именем в объекте

mySquare, а затем в объекте

Подробная информация об операторе with приведена в главе 14 "Работа с

данными: использование предложений".

Обратите внимание на то, насколько удобочитаемой является часть кода, выполняющая ри-

сование квадрата. Вы можете отчетливо представить себе, что рисование начинается с левой

верхней точки, потом рисуется линия к нижней левой точке, затем — линия к правой нижней

точке и так до тех пор, пока квадрат не будет завершен. В этом и заключается преимущество реа-

лизации функций рисования в рамках объектно-ориентированного программирования.

РИСОВАНИЕ КРИВЫХ

Кривые рисуют с помощью метода Вначале бывает тяжело понять, каким об-

разом ведет себя эта функция. Даже после того, как вы это поймете, создавать сложные кон-

туры и формы с математической точностью будет непросто. Тем не менее, когда вы осознае-

те, как работает метод curveTo и немного поэкспериментируете, можно будет добиться

восхитительных результатов.

К счастью, основные подготовительные операции за вас уже сделаны. Рассмотрим содер-

жащийся на компакт-диске файл la от разработчика Рика

В нем содержатся функции, создающие как основные контуры, например дуги (до

полных окружностей), овалы, квадраты, прямоугольники и правильные многоугольники с

любым количеством сторон, так и более сложные контуры, например звезды, "вспышки" и

круги с вырезанными сегментами. Эти функции можно модифицировать для выполнения

самых сложных, невероятных и даже полезных задач.

Глядя на код, вы обнаружите, что все кривые фигуры требуют использования тригономет-

рических функций. Эта глава ограничивается лишь рассмотрением двух примеров, в которых

требуется применение тригонометрии. Если вы хотите лучше разобраться с тригонометрией,

то в некоторых примерах главы 19 "Использование встроенных базовых объектов" этот пред-

мет рассматривается более подробно.

Подробная информация о тригонометрических функциях приведена в главе 19

Использование встроенных базовых объектов".

ЗНАКОМСТВО с МЕТОДОМ

Если вы еще этого не сделали, потратьте немного времени и поработайте с инструментом Реп

(Перо). В целом метод curveTo дублирует функциональные возможности этого инструмента.

Инструмент описан в главе 2 "Интерфейс Flash", а приемы работы с ним

рассматриваются в главе 3 "Рисование во Flash".

При работе и с инструментом Реп, и с методом curveTo используются кривые Безье,

которые определяют кривые на основе анкерных и контрольных точек. Две анкерные точки

402 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

определяют концы каждой кривой, а контрольные точки (на маркеров) действуют по-

добно магнитам, вытягивая кривую в направлении контрольной точки.

На заметку Если вы хотите подробнее ознакомиться с кривыми Безье, обратитесь к узлу

http://www.macromedia.com и найдите ссылку, ведущую к информации об

инструменте Реп во Flash.

На рис. изображены два типа кривых Безье: второго и третьего порядка. Кривые Бе-

зье второго порядка имеют одну контрольную точку, а третьего порядка — две контрольные

точки. При редактировании с помощью инструмента используются кривые Безье

третьего порядка, но затем они преобразовываются в кривые второго порядка сохраняются

в SWF-файле, поскольку таким образом занимают меньше места. В методе curveTo с са-

мого начала используются кривые Безье второго порядка.

Кривая Безье второго порядка Кривая Безье третьего порядка

Рис. Кривые Безье второго и третьего порядка

Поскольку в инструменте Реп для редактирования используются кривые Безье третьего

порядка, то знакомство с этим инструментом, будучи достаточно неплохой стартовой пло-

щадкой, все же будет недостаточным для использования кривых Безье второго порядка в ме-

тоде curveTo Попробуйте поработать с содержащимся на компакт-диске файлом

f la от разработчика Энди Холла (Andy Он даст наглядное представление о

том, как в кривых Безье второго порядка две анкерные точки и контрольная точка использу-

ются для определения кривой.

АППРОКСИМАЦИЯ КРИВЫХ ПОСРЕДСТВОМ ТРИАНГУЛЯЦИИ

Чтобы аппроксимировать любую кривую, задайте анкерные точки, а затем выберите кон-

трольную точку, образующую вместе с ними прямоугольный треугольник. Для контрольной

точки задайте координату х одной анкерной точки и координату у другой. Направление кри-

вой будет определяться тем, какая анкерная точка используется для задания той или иной ко-

ординаты. Если такая аппроксимированная кривая недостаточно приближается к желаемому

результату, немного сдвиньте контрольную точку и посмотрите, что у вас получилось. Вы-

полняйте эту операцию до тех пор, пока не достигнете нужного результата.

Методику триангуляции можно использовать, к примеру, для создания окружности, со-

стоящей из четырех сегментов.

С помощью кривых Безье практически невозможно нарисовать идеальную окружность.

Однако с разделением на все большее количество сегментов, можно аппроксимировать ее с

точности. Rash аппроксимирует окружности с помощью вось-

ми сегментов.

С помощью метода curveTo и триангуляции можете нарисовать аппроксимированную

окружность, состоящую из четырех сегментов. При этом используются простые математические

операции сложения и вычитания. Такая окружность изображена на рис. 18.2. (Эта фигура взята

из файла f f la, содержащегося на прилагаемом к книге компакт-диске.)

ГЛАВА 18. ПРОЦЕДУРА РИСОВАНИЯ с помощью 403

Рис. 18.2. Состоящая из четырех

сегментов окружность, созданная с

помощью метода и

Чтобы увидеть, как выполняется триангуляция, рас-

смотрим окружность, вписанную в квадрат (рис. 18.3). Ок-

ружность касается квадрата в четырех точках. Примем эти

точки за местоположения анкерных точек, являющихся

конечными для четырех дуг, образующих окружность.

Теперь все, что нужно сделать, — это выяснить, где

следует указать контрольную точку для каждой дуги.

Каждый угол квадрата вместе с двумя анкерными точ-

ками образует прямоугольный треугольник, так что уг-

лы квадрата можно использовать для триангуляции.

Начните с задания четырех свойств (top, bottom,

и right) класса Circle, определенного ранее в этой главе.

Эти свойства облегчат указание верхней, нижней, левой и

крайней правой точек воображаемого квадрата, описан-

ного вокруг окружности. Эти точки можно легко вычис-

лить, поскольку верхняя точка круга лежит на расстоянии

одного радиуса вверх, крайняя правая точка — на расстоя-

нии одного радиуса вправо от центра и т.д.

function Circle (centerX, centerY, radius)

= new

= radius;

= centerY - radius;

= centerY +

= centerX -

= centerX +

При использовании класса Circle рисование аппроксимации круга аналогично рисова-

нию квадрата. Разница заключается в том, что вместо прямых рисуются кривые линии. Для

каждой кривой необходимо указать вторую анкерную точку (первой всегда является текущее

положение пера) и контрольную точку.

х у контрольной точки являются первыми двумя параметрами метода

CurveTo В приведенном ниже листинге можно увидеть, что они являются углами вооб-

ражаемого квадрата, описанного круг

1: 1

2: = new

with ( ) {

with (fourSegmentCircle) 4 :

5:

6:

7:

8:

9 :

10:

11: }

6

bottom

right, bottom, right,

right, top, top

left, top, left,

bottom, bottom

Координаты х и у второй анкерной точки являются вторыми двумя параметрами метода

Рассмотрим первую дугу, являющуюся нижним правым квадрантом окружности.

Первая дуга начинается в точке, в которой нижняя часть окружности касается квадрата:

(center Метод moveTo в строке 6 сообщает о том, что начинать сле-

дует отсюда.

404 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Радиус

Вторая анкерная точка

Первая контрольная точка

Первая анкерная точка

Рис. 18.3. При рисовании дуг с помощью триангуляции начните с пред-

ставления окружности, вписанной в квадрат

Вторая анкерная точка первой дуги находится в точке, в которой правая часть круга каса-

ется квадрата: (right, center Это указывает метод curveTo () в строке 7.

Контрольной точкой первой дуги является правый нижний угол воображаемого квадрата:

(right, На это также указывает метод curveTo () в строке 7.

Остальные три дуги следуют той же самой стратегии триангуляции.

При желании после расчета точек триангуляции можно переместить их так, чтобы добиться

наилучшей формы. Например, в содержащемся на компакт-диске файле la от

разработчика Рика Ewing) для создания более идеальной формы окружности, со-

стоящей из четырех сегментов, используется простой поправочный множитель.

ОПТИМИЗАЦИЯ ФУНКЦИЙ РИСОВАНИЯ КРИВЫХ

Если вы собираетесь рисовать несколько аналогичных кривых, подумайте об оптимиза-

ции функций рисования кривых. Существуют две схемы решения этой задачи.

• Сокращение методов общего назначения для устранения всего, что не требуется для

определенной кривой, которую вы рисуете.

• Устранение расчетов путем замены констант.

Например, рассмотрим метод DrawArc в файле . la. Если вы рисуете

только полные окружности, а не дуги, то для arc можно заменить константу 360. Можно

также заменить О для startAngle, поскольку не имеет значения, в каком месте вы начинае-

те рисовать окружность. И наконец, если вы рисуете окружности, а не овалы, можно устра-

нить переменную там, где это возможно, заменив ее на radius.

Программа будет работать быстрее, если заранее рассчитать математические функции.

Например, в приведенной ниже функции рисования кривых все математические функции

предварительно вычислены. Поскольку код оптимизирован, radius заменен на

ГЛАВА 18. ПРОЦЕДУРА РИСОВАНИЯ с помощью ACTIONSCRIPT 405

function х, у) {

r+y, x,

0.9991*r+y,

-r+x,

-0.4151*r+y, -0.7071*r+X,

-r+y, x,

-0.9991*r+y,

-0.4142*r+y, r+x,

}

Когда Flash компилирует SWF-файлы, автоматически заменяются константы для матема-

тических функций, параметрами которых являются константы. Таким образом, если вы

предпочитаете вместо выражения PI/180) использовать констан-

ту 0 то знайте, что в результат будет точно таким же.

Если программа выполняет много операций рисования в одном видеоклипе и

вы обнаружили, что она работает очень медленно, обратитесь к разделу

"Возможные проблемы" в конце этой главы.

ИСПОЛЬЗОВАНИЕ сплошной ЗАЛИВКИ

С понятием заливки мы познакомились в главе 3 "Рисование во Flash".

Замкнутые контуры можно заполнять либо сплошной, либо градиентной заливкой точно

так же, как и при работе с обычными инструментами рисования. Для применения сплошной

заливки используются методы beginFill и endFill класса Примеры ис-

пользования этих методов см. в табл.

Предложение beginFill О будет действовать применительно ко всем элементам, кото-

рые вы рисуете в определенном видеоклипе, до тех пор, пока не будет выполнено предложе-

ние endFill

Поскольку метод beginFill О или beginGradientFill замыкает любой текущий

незамкнутый контур, то предложение endFill О часто оказывается ненужным. Во многих

случаях результаты будут одинаковыми как при использовании метода endFill так и без

него. Например, если во время применения заливки вы нарисуете отдельную кривую, то Flash

автоматически замкнет ее и применит заливку к замкнутому контуру, независимо от наличия

или отсутствия предложения endFill

Однако в некоторых случаях наличие предложения endFill вызывает существенные

отличия. Например, при создании двух перекрывающихся контуров без применения метода

endFill () между методами () или использующимися для создания

этих контуров, в области наложения заливка будет отменена и будет виден фон, как в двух на-

кладывающихся треугольниках, изображенных на рис. 18.4, слева. Если же предложение

endFill () помещено между двумя методами рисования (и методом beginFill О , обеспе-

чивающим заливку второго то оба контура будут полностью заполнены и второй

контур будет расположен поверх первого, как показано на рис. 18.4, справа (этот рисунок

взят из файла f la, содержащегося на к книге компакт-диске). Для

фигуры, расположенной предложение endFill О применено после создания одного

треугольника и перед началом создания следующего. Оба контура являются полностью за-

406 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

На рисунке слева метод не применяется. В области наложения за-

ливка отменена и виден фон.

Графическое изображение, представленное рис. 18.4, слева, было создано посредством

приведенного ниже кода, без применения метода endFill О, прерывающего методы

создающие два треугольника.

one.y);

two.y);

one.y);

two.y);

Использующиеся здесь точки являются членами класса Point, определенного ранее в

этой главе. Точка 1 на рис. 18.4 имеет имя one, точка 2 — two и т.д.

Графическое изображение, представленное на рис. 18.4, справа, было создано посредст-

вом приведенного ниже кода, с использованием методов endFill О, и

moveTo прерывающих методы создающие два треугольника.

() ,-

()

РАБОТА с ГРАДИЕНТНОЙ ЗАЛИВКОЙ

3 7

Градиентная заливка, представляющая со-

бой полосы цветов, переходящих друг в друга,

до сих пор является самой сложной функцией

прикладного программного интерфейса рисо-

вания. Если вы до сих пор этого не

начните знакомство с градиентной заливкой с

процедур ее создания вручную. Тогда вы лучше

поймете, чего следует добиваться при работе с

программным эквивалентом этой операции.

Для реализации заливки

пользуются методы beginGradientFill и с заливкой

endFill () класса Примеры ис-

пользования этих методов см. в табл. 18.1.

Метод beginGradientFill будет действовать применительно ко всем элементам, ко-

торые вы рисуете в определенном видеоклипе, до тех пор, пока не будет выполнен метод

, либо или

Градиентная заливка может быть линейной (параллельные полосы) или радиальной

(концентрические круги). Пример линейной градиентной заливки приведен на рис. 18.5, а

радиальной градиентной заливки — на рис.

ГЛАВА 18. ПРОЦЕДУРА РИСОВАНИЯ с помощью ACTIONSCRIPT 407

Рис. 18.5. Линейная градиентная заливка

Рис. 18.6. Радиальная градиентная заливка

РАБОТА с ТРЕМЯ ГРАДИЕНТНЫМИ МАССИВАМИ

Три свойства градиентной заливки хранятся в трех различных массивах. Этими свойства-

ми являются цвета, показатели прозрачности и коэффициенты.

Первым указывается массив цветов, которые будут использоваться в заливке. Каждое зна-

чение этого массива представляет собой число от 0 до OxFFFFFF.

Вторым указывается массив показателей прозрачности. Каждое значение этого массива

представляет собой число 0 до 100 и применяется к соответствующему элементу массива.

образом, элемент [0] задает прозрачность цвета в массиве

.

Третьим указывается массив коэффициентов. Каждое число этого массива задает точку, в

которой Flash начинает заливку определенным несмешанным цветом. При движении в сто-

408 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

рону от этой точки Flash выполняет заливку цветом со все большим и большим процентом

добавления соседнего цвета.

Задание этих чисел является программным эквивалентом перемещения маркеров полосы оп-

ределения градиентной заливки на панели Color Mixer (Цветовой микшер) с целью определения

ширины каждой цветовой полосы (для линейной заливки) или кольца (для радиальной заливки).

Каждое значение массива является числом от 0 до 255. Чтобы понять, как функционируют

эти числа, представьте себе линейку с 255 метками, простирающуюся вдоль полосы опреде-

ления градиентной заливки. Каждое число в массиве коэффициентов соответствует одной из

этих меток, сообщая Flash о необходимости установления маркера соответствующего цвета в

этом месте. Если задать число больше 255, то функция перестанет работать.

Flash считывает значения слева направо, в результате чего цвета, указанные в массиве

раньше, будут предшествовать цветам, указанным позже. Например, если поместить на одной

виртуальной "метке" несколько виртуальных "маркеров", то Flash отобразит только цвет, со-

ответствующий первому маркеру. (Может немного проявиться смесь скрытых цветов.)

Flash всегда применяет заливку ко всей области, для которой она была назначена. Эта

операция выполняется путем задания последнего цвета массива для любой необъявленной

области. Таким образом, при задании нулевого коэффициента для всех цветов вся область бу-

дет залита сплошным цветом, являющимся последним в массиве.

Число элементов во всех массивах должно быть одинаковым, иначе функция работать не

будет. На практике число элементов в массивах должно быть не меньше 2 и не больше 8. Фак-

тически число элементов в массивах может быть любым, лишь бы оно было одинаковым во

всех массивах, но для создания градиента требуются минимум два цвета. Если бы в каждом

массиве было по одному элементу, получилась бы сплошная, а не градиентная заливка. Кро-

ме того, цвета после восьмого не отображаются. Таким образом, Flash отобразит цвета, соот-

ветствующие элементам массива, начиная с colorArray [0] и до colorArray а цвет,

соответствующий элементу colorArray отображен не будет.

МАТРИЦА ПРЕОБРАЗОВАНИЯ

Матрица преобразования позволяет выполнять некоторые стандартные преобразования

градиентной заливки: трансляцию (указание центральной точки заливки), масштабирование

(изменение размера смешанной части заливки) и вращение. Вращение изменяет ориентацию

всей заливки. Например, поворот на 90 градусов изменяет заданные по умолчанию верти-

кальные полосы линейной заливки на горизонтальные.

Матрица представляет собой объект, который можно указать с помощью литерала объекта

либо создать с помощью пользовательского класса и оператора new.

Подробная информация о литералах объектов приведена в главе 12

"Управление переменными, данными и типами данных".

Матрицу определяют путем создания объекта, свойства которого становятся элементами

матрицы. Этот объект используется в качестве последнего параметра, переданного методу

Создаваемый объект матрицы может содержать следующие свойства.

• Девять свойств, определяющих матрицу 3x3, как в обычной математике. Для реализации

методов трансляции, вращения и масштабирования обычного объекта матрицы предна-

значен файл с расширением (файл "включения"). Это делает традиционные опера-

ции с матрицей интуитивно понятными, но для каждого преобразования (трансляции,

вращения, масштабирования) требуется отдельное обращение к функции.

• Шесть свойств, представляющих параметры трансляции, /вращения и масштабирова-

ния. При каждом обращении вы можете выполнять одну, две или три операции. Этот

формат более краток и интуитивно понятен.

ГЛАВА 18. ПРОЦЕДУРА РИСОВАНИЯ с помощью ACTIONSCRIPT 409

Если вы хотите выполнить только трансляцию, вращение и масштабирование, то оба формата

выполняют эту задачу совершенно одинаково. Матрица 3x3 более эффективна при управлении по-

рядком операций масштабирования, трансляции и вращения, поскольку ее можно преобразовы-

раз, О — только один раз.

Одни и те же операции, выполненные в разном порядке, дадут различные результаты.

Выполнение их в порядке не является аналогич-

ным последовательности

При одновременном выполнении нескольких операций в кратком формате порядок все-

гда будет таким: масштабирование-вращение-трансляция. Операции можно выполнять и по

одной, меняя таким образом их порядок, но при этом каждый раз придется вызывать метод

Традиционный формат матрицы используется в случае, если вы не хотите ограничиться

только операциями трансляции, вращения и масштабирования. К примеру, можно создать

свои собственные функции матриц.

КРАТКИЙ ФОРМАТ МАТРИЦЫ ПРЕОБРАЗОВАНИЯ

Приведенное ниже предложение создает объект матрицы с именем m (имя является обяза-

тельным), используя краткий формат.

m = { X:100, у:100,

Первым свойством всегда является строка Свойства х у используются для вы-

полнения трансляции, w и h — для масштабирования, а — для реализации вращения.

Трансляция означает перемещение градиента. По умолчанию Flash размещает центр гра-

диента в верхнем левом углу клипа, в котором расположена заливка. При трансляции каждая

точка градиента перемещается по горизонтали на величину х и по вертикали на величину у.

Ниже приведено несколько примеров трансляции.

• Для линейной градиентной заливки, которая не была повернута и таким образом

представляет собой ряд вертикальных цветовых полос, смещение по вертикали не

влияет на внешний вид градиента.

• Смещение неразвернутой линейной градиентной заливки по горизонтали аналогично

перемещению цветовых маркеров полосы определения градиентной заливки на пане-

ли Color Mixer (Цветовой микшер) на указанную величину.

• Если линейную градиентную заливку повернуть на 90 градусов, мы получим ряд гори-

зонтальных цветовых полос, для которых смещение по горизонтали не имеет никакого

значения. Смещение по вертикали аналогично перемещению цветовых маркеров.

Об операции масштабирования стоит сказать только то, что масштабируется смешанная

часть заливки. При увеличении значений w и h все большая часть заливки становится сме-

шанной. При уменьшении этих значений мы все больше приближаемся к чистому насыщен-

ному цвету.

Имейте в виду, что величина указывается в радианах. В приведенном выше примере

поворот на 45 градусов преобразован в радианы путем деления на 180 и умножения я.

Подробная информация о радианах представлена в главе 19 "Использование

встроенных базовых объектов".

ИСПОЛЬЗОВАНИЕ ТРАДИЦИОННОЙ МАТРИЦЫ ПРЕОБРАЗОВАНИЯ 3x3

Традиционная матрица преобразования 3x3 является основой всех операций с матрицами

во Flash.

410 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

Матрица преобразования 3x3 часто используется для выполнения двух- или трехмерных

преобразований. Матрица имеет такой формат:

а с

e f

g h i

В табл. 18.2 представлены девять элементов матрицы преобразования 3x3 и описан каж-

дый из них.

ТАБЛИЦА 18.2. ЭЛЕМЕНТЫ МАТРИЦЫ ПРЕОБРАЗОВАНИЯ 3x3

ЭЛЕМЕНТ ОПИСАНИЕ

Задает свойство xscale градиентной заливки

Ь Наклон и масштабирование х (используется при вращении)

Всегда равен о при двухмерных преобразованиях

Наклон и масштабирование у (используется при вращении)

Задает свойство yscale градиентной

Всегда равен о при двухмерных преобразованиях

Задает координату х центра градиентной заливки

h Задает координату у центра градиентной заливки

i Всегда равен 1 при двухмерных преобразованиях

При выполнении двухмерных преобразований элементы с и f всегда равны 0, а элемент i

всегда равен Эти значения можно изменять только при выполнении трехмерных преобра-

зований, однако с градиентной заливкой Flash такие преобразования не выполняются.

Объект обычной матрицы 3x3 можно создать следующим образом:

matrix = 200, Ь:0 , d:0, е:200, f:0 , g:0, h:0 ,

Используя файл включения, начать создание матрицы преобразования можно так:

ttinclude

= new

Продолжая предыдущий пример с использованием файла включения, операции масшта-

бирования, вращения и трансляция выполняются следующим образом:

Вот и все, что нужно знать для успешного применения объекта традиционной матрицы с

методом beginGradientFill

В приведенном ниже листинге сведено все, что вы узнали о градиентной заливке и матри-

це преобразования 3x3.

ttinclude

= new

RED =

ГЛАВА 18. ПРОЦЕДУРА РИСОВАНИЯ с помощью ACTIONSCRIPT 411

8: YELLOW =

GREEN =

10 8)

11

12

13

15

16

17

20

23

with {

colors = [RED, YELLOW,

alphas = [100, 100, 90]

ratios = [0, 127,

beginGradientFill ("linear", colors, ratios,

На Очень важно оставить пустую строку между предложением включения и сле-

дующей строкой. Отделение предложения включения от остального кода пустой

строкой считается признаком хорошего тона.

В строке 1 содержится файл включения Macromedia. Строка 3 содержит матрицу. Стро-

ки 4-6 преобразуют матрицу. В строках создаются константы, которые делают цветовые

массивы более удобочитаемыми. Строка 10 создает новый видеоклип, в котором выполняется

рисование. Строки создают массивы, а строка 15 — градиентную заливку. Остальная

часть программы предназначена для рисования контуров и завершения заливки.

Получили неожиданные результаты заливки? Обратитесь к разделу

"Возможные проблемы" в конце этой главы.

ПОНИМАНИЕ ОПЕРАЦИЙ с МАТРИЦОЙ 3x3

В данном подразделе операции преобразования матрицы 3x3 будут рассмотрены детально.

Вы получите более точное представление о том, что означают операции трансляции, враще-

ния и масштабирования применительно к градиентной заливке. Кроме того, немного позна-

комившись с файлом включения Macromedia, вы получите представление о тех действиях,

которые нужно выполнить для создания собственных функций матрицы. К ним относятся

некоторые математические операции, в том числе и тригонометрические.

Матрица 3x3 используется для точки с координатами (х, у) в точку с ко-

ординатами (х2, у2) посредством следующих уравнений (написанных на языке

х2 = + d*y +

у2 = b*x + e*y +

Таким образом Flash преобразует каждую отдельную точку в градиент.

В следующих подразделах кратко описано, как Flash использует приведенные выше урав-

нения для выполнения операций трансляции, масштабирования и вращения. Примеры реа-

лизации этих функций в ActionScript приведены в файле матрицы преобразования от

компании Macromedia.

МАСШТАБИРОВАНИЕ

Для выполнения масштабирования с помощью матрицы 3x3 параметр а задают равным

значению масштабного коэффициента координаты х, а параметр е — равным значению мас-

412 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

штабного коэффициента координаты у. Параметры g, Ь и h устанавливаются равными ну-

лю. В результате каждая координата х и у умножается на соответствующий масштабный ко-

эффициент. Кроме этого больше ничего не происходит.

Обратите внимание на то, что масштабирование относится к смешанной части заливки.

При увеличении параметров а и е все большая часть заливки становится смешанной, а при их

уменьшении цвет становится все более чистым и насыщенным.

ТРАНСЛЯЦИЯ

Для выполнения трансляции с помощью матрицы 3x3 параметры а и е задают равными 1,

т.е. а*х равно х, а е*у равно у. Затем параметры g и h задают равными коэффициентам

трансляции координат х и у. Каждая координата х становится равной х+g, а координата у —

y+h. В результате каждая точка градиентной заливки смещается на соответствующую вели-

чину трансляции.

ВРАЩЕНИЕ

Выполнение вращения (поворота) требует познаний в тригонометрии.

• Параметр а устанавливается равным косинусу угла поворота.

• Параметр b устанавливается равным синусу угла поворота.

• Параметр d устанавливается равным величине, противоположной по знаку синусу угла

поворота.

• Параметр е устанавливается равным косинусу угла поворота.

• Параметры а и Ь устанавливаются равными нулю.

Подставим эти значения в два уравнения, приведенных выше, и получим следующее вы-

ражение:

х2 = cos *х -

у2 = +

Чтобы получить наглядное представление о том, какую роль играют уравнения

матрицы преобразования и как они соотносятся с тригонометрическими функ-

циями, обратитесь к файлу который описывается в главе 19

"Использование встроенных базовых объектов". В этом файле показано, как по-

добно часовой стрелке, но в обратном направлении, вращается зеленая линия.

Каждая точка градиентной заливки поворачивается подобно стрелке часов. Flash всегда

трактует положительное вращение как направление по часовой стрелке, хотя традиционной

положительным считается вращение против часовой стрелки.

ОБЪЕДИНЕНИЕ ОПЕРАЦИЙ МАТРИЦЫ

Если вы хотите скомбинировать операции матрицы, например, создать одну матрицу, ко-

торая выполняет и трансляцию, и масштабирование, примените процедуру,

умножением, или сочленением. В файле матрицы преобразования от Macromedia

содержится функция сочленения. Фактически функции масштабирования, вращения и

трансляции матрицы 3x3 представляют собой замаскированные функции сочленения. Если

вы посмотрите на них в файле то увидите, что каждая из них создает новую матрицу

(инициализируемую для каждой из операций так, как описано в предыдущих подразделах), а

затем сочленяет ее с матрицей, использующейся при вызове функции.

ГЛАВА 18. ПРОЦЕДУРА РИСОВАНИЯ с помощью ACTIONSCRIPT 413

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему моя программа рисования стала работать с прерываниями и замедлилась?

Если ваша программа выполняет много операций рисования в одном видеоклипе, она может

замедлиться и начать работать рывками. Если распределить то же количество рисунков по не-

скольким видеоклипам, вы обнаружите, что программа будет работать лучше. Эта методика ис-

пользуется, к примеру, в содержащемся на компакт-диске файле fla от разработчика

Питера Холла (Peter Hall) (описанного в главе 17 "Демонстрация мощи видеоклипов").

Что делать, если при выполнении заливки я получаю не те результаты, на которые

рассчитывал?

При вставке предложений О и beginFill О неплохо было бы использовать и

метод moveTo чтобы перейти к следующему контуру, даже если этот метод не изменяет

текущее положение пера и на первый взгляд кажется бесполезным. Если этого не сделать, то

иногда можно получить неожиданные результаты.

Еще одна возможная причина получения нежелательных результатов может заключаться в

применении слишком малых коэффициентов масштабирования. Масштабирование "почти

один к одному" может привести к аномальным результатам, и чем ближе к 1 коэффициент

масштабирования, тем хуже будет "вести себя" заливка, особенно при выполнении операции

вращения.

Естественно, нет никаких оснований для того, чтобы выполнять масштабирование с ко-

эффициентом поскольку при этом нет никакого градиента. По этой причине такое поведе-

ние официально называется FOL (Fact of Life — факт из жизни), и оно не является дефектом

программы.

В приведенном ниже коде, взятом из содержащегося на компакт-диске файла

показано, каких операций следует избегать. Мы получаем цветовой пере-

ход "красный/зеленый/красный", тогда как ожидаем перехода "красный/желтый/зеленый".

(Нужные результаты продемонстрированы в содержащемся на компакт-диске файле

fla.)

// w:l, == непредсказуемые результаты !!

_root.m = { x:100, y:100, w:l,

RED =

YELLOW =

GREEN =

with {

colors = [RED, YELLOW,

alphas = [100,

ratios = [0, 12, 255]

beginGradientFill ( "linear", colors, alphas,

414 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

FLASH ЗА РАБОТОЙ: РИСОВАНИЕ КРУГА, СОСТОЯЩЕГО из

ВОСЬМИ СЕГМЕНТОВ

Концептуально рисование круга, состоящего из восьми сегментов, не слишком отличает-

ся от аналогичной процедуры для круга, состоящего из четырех сегментов. Исключение со-

ставляет всего один шаг. В данном случае круг нужно вписать в восьмиугольник, как

но на рис. 18.7, и выяснить, где находятся "углы" восьмиугольника, которые будут использо-

ваться в качестве контрольных точек. (Данный рисунок основан на коде из содержащегося на

компакт-диске файла la.)

Определение координат углов требует применения тригонометрии. В целом, когда необ-

ходимо нарисовать кривые, вписанные в правильные многоугольники, легче всего это сде-

лать с помощью тригонометрических функций. Альтернативным способом является экспе-

риментирование с контуром до тех пор, пока не будет найдена форма, близкая к желаемой

(как в файле la).

Рассмотрим, как можно определить координаты на примере одной контрольной точки

для круга, состоящего из восьми сегментов. Взгляните на контрольную точку с правой сторо-

ны круга (см. рис. 18.7), помеченную как (сх, Она является одной из вершин тре-

угольника внутри круга. (Отметки на рисунке соответствуют переменным метода drawArc

файла f la, содержащегося на компакт-диске.)

ОПРЕДЕЛЕНИЕ КООРДИНАТЫ х КОНТРОЛЬНОЙ точки

Координату х точки су) легко определить прямо из рисунка, т.е. для ее определе-

ния тригонометрические функции применять не нужно. Эта точка располагается прямо над

точкой находящейся на расстоянии одного радиуса от центра круга. Все, что нужно

сделать, — это прибавить радиус к значению координаты х центра круга ах. Например, если

ах равно о, а радиус равен 150, то равно 550.

ОПРЕДЕЛЕНИЕ КООРДИНАТЫ Y КОНТРОЛЬНОЙ точки

Чтобы выяснить, насколько далеко контрольная точка располагается от центра круга по

вертикали (т.е. координата у точки су, изображенной рис. 18.7), необходимо применить

Рис. Чтобы понять процедуру создания круга, со-

стоящего из восьми сегментов, сначала представьте

себе, что вы вписываете круг в восьмиугольник

ГЛАВА 18. ПРОЦЕДУРА РИСОВАНИЯ с помощью ACTIONSCRIPT 415

тригонометрические функции. Расчет проходит в три этапа. Исходя из рис. 18.7, эти этапы

заключаются в следующем:

• определение величины угла theta / 2;

• определение длины h — гипотенузы треугольника;

• использование этих двух чисел для определения су.

ОПРЕДЕЛЕНИЕ ВЕЛИЧИНЫ УГЛА ТНЕТА / 2

При делении круга на восемь частей каждая часть равна 45 градусам (360/8). Именем пе-

ременной, назначенной для угла в методе является theta (греческая буква, тра-

диционно использующаяся для обозначения углов). Угол, который на рис. 18.7 обозначен как

theta / 2, является половиной из частей, на которые разделен круг. Следовательно,

theta / 2 равно 22,5 градуса.

ОПРЕДЕЛЕНИЕ длины н — ГИПОТЕНУЗЫ ТРЕУГОЛЬНИКА

Вот и наступил черед тригонометрии. По определению косинус угла theta / 2 на

рис. 18.7 равен величине radius, деленной на сторону h треугольника (его гипотенузу). На

(theta / 2) равно radius / h.

Умножим обе части равенства на h и разделим на cos / В результате h

равно radius/

CY

По определению синус theta / 2 равен су, деленному на h. На языке ActionScript

/ равно су / h.

Умножим обе части равенства на h. В результате получим, что су равно

(theta * h.

Мы знаем, что h равно radius / cos (theta / 2). Следовательно, су равно

/ 2) * radius /

В конце метода drawArc в содержащемся на компакт-диске файле

la вы обнаружите выражение, похожее на то, что использовалось для

расчета су. Значение сх рассчитывается по похожей формуле (в данном примере его можно

получить по аналогии).

В методе drawArc используется несколько других переменных. Например, этот метод

наряду с кругами работает и с овалами, следовательно, он имеет переменные radius и

yRadius, о которых при работе с кругами беспокоиться не нужно.

416 ЧАСТЬ III. РАСШИРЕНИЕ ИНТЕРАКТИВНОСТИ с помощью ACTIONSCRIPT

РАСШИРЕННЫЕ СЦЕНАРИИ

ACTIONSCRIPT

этой

Глава 19. Использование встроенных базовых объектов

Глава 20. Использование встроенных объектов фильмов

Глава 21. Упаковка данных и функций с помощью пользовательских объектов

Глава 22. Компоненты

Глава 23. Использование обучающих взаимодействий

Глава 24. Коллективное использование

Глава 25. Тестирование, отладка и устранение проблем

ГЛАВА

ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ

БАЗОВЫХ ОБЪЕКТОВ

В ЭТОЙ ГЛАВЕ...

Знакомство со встроенными объектами 419

Базовые объекты 420

Возможные проблемы , 464

Flash за работой: удивительные массивы 465

ЗНАКОМСТВО со ВСТРОЕННЫМИ ОБЪЕКТАМИ

Встроенные объекты являются самым распространенным средством отображения функ-

циональных возможностей Flash для программиста, работающего на языке

Встроенные объекты, являющиеся "рабочими лошадками" ActionScript, используются для

выполнения основных рутинных задач, таких как управление графикой, звуками,

нажатием клавиш и другими элементами Flash-фильма.

Во Flash MX встроенные объекты стали всеобъемлющими. Теперь в программе есть объ-

ектно-ориентированная основа для текстовых полей и функций форматирования текста,

кнопок, рабочего поля, специальных добавлений к пользовательскому интерфейсу Flash

переменных, хранящихся в файлах на локальном диске в качестве

"объектов коллективного использования", видео, переменных, загружаемых с серверов

локальных каналов взаимосвязи с другими SWF-файлами (LocalConnection)

и соединений с серверами связи и серверами приложений

Встроенные объекты подразделяются на две основные категории: функции-конструкторы

(или классы) и глобальные объекты. Основное отличие между ними заключается в том, что с

функций-конструкторов можно создавать новые экземпляры, тогда как с помощью

глобальных объектов этого делать нельзя.

Глобальный объект называют одноэлементным множеством, поскольку он является

экземпляром класса, разрешающего только один экземпляр. Например, можно иметь только

одно рабочее поле, одну клавиатуру, одну мышь и одно выделенное в данный момент тексто-

вое поле. Одноэлементные множества являются экземплярами, в которых функции-

конструкторы не функционируют.

С помощью глобальных объектов нельзя выполнять три важные операции.

• Создавать новые экземпляры этих объектов.

• Выполнять их функции-конструкторы.

• Изменять значения существующих свойств, в том числе и методов.

Подробная информация о функциях-конструкторах и их роли в создании объек-

тов приведена в главе 15 "Объединение предложений в функции".

Как правило, для создания новых экземпляров функция-конструктор выполняется вместе

с ключевым словом new. Однако существуют четыре "неконструктивных" (моя терминоло-

гия) функции-конструктора: Button, Function, MovieClip и Video, которые не могут

создавать пригодные к употреблению новые экземпляры, но имеют другие области примене-

ния. Что касается этих классов, то их экземпляры создаются другими способами.

Так, объект Video создается на панели Library (Библиотека) путем выбора из меню ее па-

раметров опции New Video (Новое видео). (Для открытия меню параметров щелкните на

кнопке, расположенной в правом верхнем углу панели.)

Видеоклипы создаются как вручную, так и программным образом с помощью

методик, описанных в главе 17 "Демонстрация мощи видеоклипов".

Кнопки создаются одним из двух способов: либо вручную (по той же методике, что и ви-

деоклипы), либо с помощью метода attachMovie

Функции создаются вручную с помощью методик, описанных в главе 15

"Объединение предложений в функции".

БАЗОВЫЕ ОБЪЕКТЫ

Восемь встроенных объектов Flash MX определены стандартом ЕСМА-262 и внедрены в

JavaScript. (Однако иногда Flash MX немного отличается от стандарта и от JavaScript.) В дан-

ной главе рассматриваются эти восемь объектов, которые в средствах разработки Flash назы-

ваются базовыми.

С помощью базовых объектов реализуются основные функции управления данными, ис-

пользующиеся для выполнения самых разных задач программирования, в том числе и для соз-

дания Web-анимации. Однако базовые объекты не имеют никаких особенностей, являющихся

специфическими для Web-анимации. Восемь базовых объектов перечислены в табл.

КЛАСС ARRAY

Массив представляет собой упорядоченную пронумерованную совокупность элементов дан-

ных. Массив можно использовать в качестве "картотеки" данных. Каждый элемент массива подо-

бен ящику картотеки, на котором проставлен индекс (порядковый номер). Индексы начинаются с

нуля и отсчитываются как положительные целые числа. Весь массив также должен содержаться в

элементе данных, чтобы к нему можно было обращаться как к единому объекту.

420 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ТАБЛИЦА 19.1. БАЗОВЫЕ ОБЪЕКТЫ

ОБЪЕКТ ПРЕДСТАВЛЯЕТ ОДНОЭЛЕМЕНТНОЕ

МНОЖЕСТВО или КОНСТРУКТОР

Array (Массив)

Boolean

(Булева величина)

Date (Дата)

(Функция)

Math (Математический)

Number (Число)

Object (Объект)

String (Строка)

Упорядоченный список

Значение типа true/false или

другая двойственность

Календарная дата/время

Функция

Математические функции и константы

Числа

Неупорядоченная совокупность

Буквенно-цифровые данные

Конструктор

Конструктор

Конструктор

Одноэлементное множество

Конструктор

Конструктор

Конструктор

конструктор: с помощью ключевого слова new нельзя создавать пригодные к

употреблению новые экземпляры.

Примеры операций с массивами приведены в конце этой главы, в разделе

"Flash за работой: удивительные массивы".

В табл. 19.2 сведены три типа данных, требующихся для работы с массивами: элементы,

индексы и контейнер данных всего массива.

ТАБЛИЦА 19.2. Типы ДАННЫХ, НЕОБХОДИМЫЕ для РАБОТЫ с МАССИВАМИ

ТИП ДАННЫХ АНАЛОГИЯ С КАРТОТЕКОЙ ДОПУСТИМЫЕ ЗНАЧЕНИЯ

Элементы массива

Индекс каждого элемента

Каждый элемент подобен со-

держимому одного ящика кар-

тотеки

Числовая надпись на каждом

картотеки

Контейнер данных для всего Надпись на всей картотеке

массива

Любое допустимое выраже-

ние

Любое выражение, преобра-

зующееся в целое число, на-

чиная с 0 и до

включи-

тельно

Переменная, элемент массива

или свойство объекта, относя-

щиеся к массиву

Элемент массива может содержать любой тип данных, существующий в число,

строку, булеву величину, функцию, объект, массив, т.е. любой простой или сложный элемент дан-

ных. Для определения элемента массива может использоваться любое допустимое выражение.

На заметку Выражение — это фраза ActionScript, преобразующаяся в элемент данных.

В одном массиве могут содержаться данные разных типов.

Индексом может быть любое неотрицательное целое число или любое выражение, преоб-

разующееся в неотрицательное целое число. Максимальным разрешенным индексом являет-

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 421

ся значение При указании значения, превышающего его, в качестве

индекса Flash все равно будет использовать

На заметку — это самое большое число, которое можно представить

в ActionScript (l,79769313486231e+308).

Контейнером данных, позволяющим обращаться ко всему массиву как к единому объек-

ту, может быть переменная, элемент массива или свойство объекта.

СОЗДАНИЕ МАССИВОВ

Массивы можно создавать двумя способами: с помощью литерала массива или функции-

конструктора вместе с ключевым словом new.

При создании массива посредством литерала массива используется такой формат:

контейнер =

где контейнер — это переменная, элемент массива или свойство объекта, относящиеся

ко всему объекту, а выражения внутри квадратных скобок определяют элементы массива.

Приведем несколько примеров:

= "Mary", "Peter", // контейнером пере-

менная

students = new Object О;

= [98, 95, 87, // контейнером является свойство

объекта

= 98, "Mary", // массив данных разных типов

С помощью функции-конструктора Array массив можно создать тремя способами.

• Вызвать конструктор без аргументов:

myArray = new

При таком подходе создается пустой массив, т.е. не содержащий элементов.

• Вызвать функцию-конструктор Array с одним числовым аргументом:

myArray = new

Единственное, что здесь происходит, — это установка в указанное значение свойства

length (длина) массива. При таком подходе создается массив с указанным числом

элементов, каждый из которых имеет значение Однако при обращении к

любому из элементов пустого массива также будет возвращено значение

поэтому свойство length массива является единственным способом отличить пустой

массив (без элементов) от массива с пустыми (неопределенными) элементами.

• Вызвать функцию-конструктор Array с аргументами, являющимися значениями

элементов массива. Первый аргумент становится значением первого элемента масси-

ва, второй аргумент — значением второго элемента массива и т.д. Например:

myArray = new Array(8, 10,

myArray = new Array "Matt", "Mary", myArray,

Если функция-конструктор Array видит только один числовой аргумент, она предпо-

лагает, что массив создается вторым способом, и назначает свойство length. Если конструк-

тор видит один нечисловой аргумент или несколько аргументов, то аргументы используются

в качестве значений элементов массива (способ 3).

422 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ОБРАЩЕНИЕ к ЭЛЕМЕНТАМ МАССИВА

Для обращения к элементам массива используются индексы. Формат обращения следующий:

Таким образом, первым элементом массива myArray будет myArray вторым эле-

ментом — myArray и т.д. Этот формат используется как для считывания, так и для запи-

си элементов массива. Ниже приведено несколько примеров считывания.

MyVar = // считывание элемента в переменную

= // считывание элемента в свойство объекта

Далее следует несколько примеров записи:

= // запись переменной в элемент

myArray[6] = // запись свойства объекта в элемент

А вот пример считывания из одного массива записи в другой:

=

Тот факт, что к элементам массива можно обращаться с помощью чисел, является основ-

ным показателем мощи массивов. Наиболее распространенной методикой является исполь-

зование индексной переменной и свойства массива length для задания цикла for. Этот

цикл выполняет поиск всех элементов в массиве, тестирует тем или иным способом каждый

из них и на основе полученных результатов предпринимает какое-либо действие. В приве-

денном ниже примере выполняются поиск в массиве имен и тестирование каждого имени для

того, чтобы проверить, равно ли оно заданному значению, а затем — замена на другое в слу-

чае выполнения условия.

NameArray = new Array ("John "Mary Peterson", "Michael

for (i = 0; i < i++) { // задание

if == "Mary Peterson") { // тестирование

= "Mary // действие на основе

Обратите внимание на то, что необходимо использовать выражение

i < nameArray а не i <= nameAr ray. length, поскольку последний индекс

массива на единицу меньше значения свойства length.

Если определенную операцию массива необходимо выполнить несколько раз, ее можно

сократить до функции. Например, показанную в предыдущем примере операцию поиска и

замены можно преобразовать в такую функцию:

function {

for (var i = 0; i < i++) { // задание

if (inThisArray [i] == findThis) { // тестирование

= replaceWithThis; // действие на основе

тестирования

,

Как вы заметили, в выражение var i = добавлено ключевое слово var. Это делает i

локальной переменной функции searchAndReplace и предотвращает ее взаимодействие

с другими случаями использования i в качестве переменной в иных местах программы.

Подробная информация о ключевом слове var приведена в главе 15

"Объединение предложений в функции".

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 423

ДОБАВЛЕНИЕ ЭЛЕМЕНТОВ МАССИВА

Добавить новые элементы в массив можно путем присвоения им значений. В приведен-

ном ниже примере создается пустой массив, а затем в него добавляется элемент с индексом 4.

MyArray = new

= «testing»;

Этот код также задает свойство равным 5.

Приведенный пример иллюстрирует создание разреженного массива, в котором элементы,

имеющие значения, "разбросаны" среди элементов, которым значения не присвоены. Во

Flash выделяется память только для элементов с назначенными значениями, таким образом,

использование разреженных массивов в ней не запрещается.

В предыдущем подразделе было показано, что для добавления элемента в массив и для замены

существующего элемента с определенным индексом применяется один и же синтаксис.

УДАЛЕНИЕ ЭЛЕМЕНТОВ МАССИВА

При удалении элементов, находящихся в середине массива, программист стремится вы-

полнить следующие задачи:

• изменить значение элемента на

• перераспределить память, ранее использовавшуюся для хранения значения в элементе.

За выполнение обеих задач отвечает оператор delete. Например:

delete

При удалении последнего элемента массива программист попытается выполнить обе пре-

дыдущие задачи и, вероятно, уменьшить на единицу значение свойства length данного мас-

сива. Все три задачи можно выполнить с помощью метода pop класса Array:

О; // удаляется последний элемент, уменьшается длина

Метод pop также возвращает значение удаленного элемента.

Подробная информация о методе О приводится далее, в подразделе

"Методы pop и push

Если вы хотите удалить последний элемент вручную и уменьшить значение свойства

length, то это можно также выполнить следующим образом:

myArray = new Array ("John", "Matt", "Joe")

delete // удаление элемента "Joe", перераспределение памяти

// undefined

// длина была равна 3, ее уменьшили на 1

Если просто задать для элемента значение перераспределение памяти не про-

изойдет. Например, приведенный ниже код будет вызывать постепенное увеличение объема

задействованной памяти компьютера. Если убрать комментарий, содержащийся в строке 4, то

объем использованной памяти увеличиваться не будет. (В обоих случаях Flash-плейер отобра-

зит предупреждение, в котором будет говориться о том, что сценарий замедлил производи-

тельность плейера, и спросит, хотите ли вы прервать этот сценарий. Это обычная практика

при использовании слишком длинных циклов подобных приведенному ниже.)

1: for (i=0 i <

= new

3: =

// delete

}

424 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ИМЕНОВАННЫЕ ЭЛЕМЕНТЫ МАССИВА: АССОЦИАТИВНЫЕ МАССИВЫ

Фактически массив является слабо замаскированным объектом. Результатом является тот

факт, что массивы, как и объекты, могут иметь именованные свойства. Массив с именован-

ными свойствами является ассоциативным.

Назначить или извлечь именованные свойства массива можно двумя способами: с помо-

щью строки в квадратных скобках или оператора "точка", использующегося в качестве иден-

тификатора. Два приведенных ниже примера демонстрируют процедуру определения свойст-

ва с именем массива

MyPhones = "555-555-1212";

= "555-555-1212";

Аналогичным образом, используя TOT же синтаксис, свойство можно извлечь:

trace( // 555-555-1212

trace( myPhones.Mary // 555-555-1212

Эти два подхода для достижения оптимальных результатов можно комбинировать. На-

пример, свойство, заданное в виде строки, можно извлечь с помощью оператора "точка". При

обоих подходах имя свойства должно быть разрешенным идентификатором или выражением,

которое дает в результате выполнения разрешенный идентификатор. В первом случае иден-

тификатор указывается в виде строки, а во втором — просто как идентификатор.

Удалить именованные свойства можно с помощью оператора delete. Например, любое

из приведенных ниже предложений удаляет свойство и перераспределяет связанную

с ним память.

Delete myPhones

e

Свойство length массива не отражает никаких именованных свойств. Массив, в который

добавлено 100 именованных свойств, но не имеющий индексов, все равно будет иметь значе-

ние length, равное 0. Кроме того, к именованным свойствам массива не применяются мето-

ды массивов, такие как pop и push речь о которых пойдет в следующем подразделе.

Доступ к именованным свойствам массива осуществляется точно так же, как и к свойст-

вам любого объекта, — с помощью цикла in.

Цикл for-in рассматривался в главе 14 "Работа с данными: использование

предложений".

Для объекта можно задать нумерованные свойства, как показано в следующем примере:

= new О;

= "hello world";

Однако назначение нумерованных свойств не делает объект j массивом. Так, объект

myObj все равно не имеет свойства length и не работает с методами класса Array.

МЕТОДЫ МАССИВОВ

Класс Array имеет 12 документированных методов: О,

reverse sort , concat slice splice shift unshift и

toString (табл. 19.3). Кроме того, класс Array наследует документированные и недоку-

ментированные методы класса Ob j ect.

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 425

ТАБЛИЦА 19.3. МЕТОДЫ и СВОЙСТВА МАССИВОВ

Имя

pop

push

reverse

shift

slice

sort

sortOn

splice

МЕТОД

СТВО

Метод

Метод

Метод

Метод

Метод

Метод

Метод

Метод

Метод

Метод

СИНТАКСИС

)

rayArray

)

)

число_удаля-

ОПИСАНИЕ

Соединяет аргументы и возвра-

щает их как новый массив

Объединяет все элементы масси-

ва в строку

Удаляет последний элемент мас-

сива и возвращает его значение

Добавляет один или несколько

элементов в конец массива и

возвращает новую длину массива

Меняет направление массива на

противоположное

Удаляет первый элемент массива

и возвращает его значение

Извлекает участок массива и воз-

вращает его как новый массив

Сортирует массив

Сортирует массив в алфавитном

порядке на основе поля в массиве

Добавляет и/или удаляет элемен-

ты массива

toString Метод ()

unshift Метод

length Свой-

ство

Возвращает строковое значение,

представляющее собой элементы

объекта Array

Добавляет один или несколько

элементов в начало массива и

возвращает новую длину массива

Возвращает число элементов

массива с учетом пустых или не-

определенных элементов

Подробная информация о методах класса Object будет приведена ниже, в

подразделе "Класс

МЕТОДЫ И

Метод преобразует все элементы массива в строки и соединяет их. Практически

точно так же ведет себя и метод Array. toString О . Однако с помощью метода О

можно указать символ или символы использующиеся для разделения строк, то-

гда как с помощью метода toString этого сделать нельзя.

Метод j oin имеет следующий формат:

426 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Если при использовании метода разделитель не указан, то в его качестве Flash ав-

томатически использует символ запятой и тогда метод в точности повторяет метод

Например:

myArray = new Array "Matt", "Joe")

names = // names =

Я заключил выходную информацию комментария в кавычки для того, чтобы подчеркнуть,

что итоговое значение является строкой. Однако на практике итоговое значение в кавычки не

заключается.

Задание символа разделителя дает возможность форматировать выходные данные. На-

пример, если необходимо, чтобы после запятой следовал символ пробела, то в качестве разде-

лителя можно указать два символа: запятую и пробел:

myArray = new Array "Joe")

names = // names = "John, Matt, Joe"

Любые вложенные массивы (массивы внутри массива) преобразовываются в строки с по-

мощью метода toString Следовательно, при этих преобразованиях в качестве разделите-

ля используется запятая, а не символ, указанный пользователем. Например:

myArray = new Array ("John", "Matt", "Mary", , "Joe")

names = join // names =

Метод j in не изменяет массива, к которому он применяется.

МЕТОДЫ РОР() и

Методы pop и push трактуют массив как стек, а точнее, стек, в котором добавление

и удаление элементов осуществляется по принципу LIFO ("последним пришел — первым об-

служен"). Представьте себе, что вы печете блинчики, по очереди снимаете со сковороды и

кладете друг на друга на тарелку. Каждый раз, когда повар кладет один или несколько блин-

чиков в стопку, он выполняет метод push Когда вы съедаете верхний блинчик, выполня-

ется метод pop В данном случае верхний из блинчиков "стека" является концом массива.

Оба этих метода модифицируют существующий массив.

Метод push добавляет один или несколько элементов в конец массива и возвращает

новую длину массива, как в приведенном ниже примере.

MyArray = new Array ("John", "Joe")

newLength = "Sue")

//

// 6

При вызове без аргументов метод push добавляет к массиву пустой элемент (значением

которого является Эта операция эквивалентна приращению свойства length

массива (myArray. length++).

Для определения значения, добавляемого в массив, можно использовать любое выражение.

Выражение выполняется до того, как значение присваивается элементу, т.е. если х равно 3, а

у — 4, то два следующих предложения приведут к совершенно одинаковому результату:

( х + у )

( 7

Метод pop удаляет последний элемент массива и возвращает значение удаленного эле-

мента. Кроме того, он на единицу уменьшает свойство length данного массива.

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 427

МЕТОД

Метод reverse обращает порядок элементов в массиве на противоположный. Этот

метод выполняет обращение на месте, т.е. модифицирует существующий массив. Кроме того,

он возвращает обращенный массив, как показано в приведенном ниже примере.

= new Array

= // теперь такой: [1,2,3]

trace // 1,2,3

МЕТОДЫ SORT() и SORTON()

Метод sort на месте сортирует элементы существующего массива. Он возвращает от-

сортированный массив. При вызове без аргументов метод sort сортирует элементы мас-

сива в алфавитном порядке, при необходимости временно преобразовывая их в строки. Любые

неопределенные элементы отсортировываются в конец массива.

Чтобы выполнить сортировку по какому-то другому принципу, в качестве аргумента метода

sort необходимо указать функцию сравнения. Она имеет два аргумента, представляющие собой

любые два элемента массива. Это сродни вопросу о том, какой из двух заданных элементов массива

должен быть указан первым. Ответить на этот вопрос нужно с помощью функции сравнения.

Функция должна вернуть отрицательное значение, если сначала в отсортированном мас-

сиве должен быть указан первый элемент. Если же сначала должен быть указан второй эле-

мент, то функция сравнения должна вернуть положительное число. Если функция сравнения

возвращает 0, это говорит о что порядок указания элементов не имеет значения.

В приведенном ниже примере функция сравнения byVotes сортирует массив объектов

candidates (кандидаты). Первыми будут указаны объекты, обладающие большим значением

свойства votes (голоса). Функция сравнения возвращает положительное число, если второй объ-

ект получил больше голосов, чем первый. Фактически функция говорит: "Сначала следует указать

объект с большим количеством голосов". Того же результата можно достичь путем возврата отрица-

тельного значения в случае, если первый объект получил больше голосов, чем второй.

Abbey = "Abbey", votes:

Bob = votes:

Charles = "Charles", votes:

Dave = "Dave",

candidates = [Abbey, Bob,

function byVotes (a, b) {

return -

}

for (i = 0; i < i++) {

}

/* результат

Dave

Charles

Abbey

Bob

*/

Метод реализует более краткое представление сортировки объектов в

массиве на основе значения свойства каждого объекта. Однако в предыдущем при-

мере этот метод работать не будет, поскольку он выполняет сортировку только в ал-

фавитном порядке. Если же вы хотите выполнить сортировку в алфавитном порядке

по имени кандидатов, то можете воспользоваться методом sorton

// возвращает [Abbey, Bob, Charles, Dave]

428 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Возникли проблемы при сортировке массива чисел? Обратитесь к разделу

"Возможные проблемы" в конце этой главы.

Метод concat добавляет в массив один или несколько элементов. Он, скорее, возвращает

новый массив, чем модифицирует существующий. Пользователь должен указать значения, ко-

торые будут добавлены в качестве аргументов к методу concat как в следующем примере:

myArray = new Array 1}

// возвращает

Если один из аргументов является массивом, он будет "развернут" и затем добавлен. Сле-

довательно, указанный ниже код приведет к такому же результату, что и предыдущий.

MyArray = new Array

4, [5,6] ) // возвращает

Однако вложенные массивы не "развертываются":

[5,6] ] // возвращает ]

МЕТОД

Метод slice возвращает новый массив, являющийся "срезом" (субмассивом) исход-

ного. Он не меняет исходного массива. Метод slice О принимает два аргумента. Первый

аргумент определяет индекс первого возвращаемого элемента, а второй — индекс, на единицу

больший, чем индекс последнего возвращаемого элемента. Если указать только один аргу-

мент, то срез будет содержать все элементы массива, начиная с элемента, соответствующего

индексу, указанному в виде аргумента. Отрицательный аргумент определяет индекс относи-

тельно конца массива, начиная с для последнего аргумента массива. Ниже приведено не-

сколько примеров.

MyArray =

2

//

// 1,2,3

Метод можно использовать для добавления или удаления элементов из масси-

ва. Он может в одной операции и добавлять, и удалять элементы. Данный метод, скорее, мо-

дифицирует существующий массив, чем возвращает новый. Метод splice О имеет такой

формат:

Все аргументы, кроме первого, являются опциональными. При вызове метода splice О

только с аргументом будут удалены все элементы массива, начиная с

элемента, имеющего этот индекс, и до конца массива. Метод возвращает удаленные элемен-

ты. Например:

myArray

// возвращает: 2,3,4,5,6 - удаленные элементы

// 1 - все, что осталось

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 429

Второй аргумент сообщает методу splice сколько элементов подлежит удалению. Ос-

тавшиеся элементы массива смещаются назад (в направлении к меньшим номерам индек-

сов), заполняя образовавшиеся ниши. Например:

myArray =

// 2,3 - удалены только два элемента

// - оставшиеся четыре элемента массива

Остальные аргументы являются значениями элементов, вставке в массив, начиная

с следующего за элементом с начальным индексом. Существующие элементы массива

сдвигаются вперед так, чтобы в массив были вставлены новые элементы. Например:

myArray =

// 2,3

//

МЕТОДЫ И

Методы и похожи на методы push и pop за исключением то-

го, что они вставляют и удаляют элементы в начале массива, а не в его конце.

Метод unshif t вставляет один или несколько элементов в начало массива и возвраща-

ет новую длину массива. Существующие элементы массива сдвигаются вперед. Например:

myArray =

trace (myArray. t // 8 - новая длина

// - новый массив

Метод () удаляет первый элемент массива. Существующие элементы массива

сдвигаются назад, заполняя образовавшуюся нишу. Метод возвращает удаленный элемент.

Например:

myArray

0) ; // 1 - возвращает удаленный элемент

// 2,3,4,5, 6 - все, что осталось

СВОЙСТВО LENGTH

Свойство length является единственным свойством класса Array. Оно всегда на единицу

больше индекса последнего элемента массива. Свойство length может не соответствовать числу

элементов, содержащихся в массиве, поскольку массивы могут иметь неопределенные элементы.

Чаще всего свойство length используется в циклах, в которых необходимо пройти все

элементы массива.

Использование свойства length в цикле было описано в подразделе

"Методы sort ()

ИНТЕРФЕЙСНЫЕ КЛАССЫ: BOOLEAN, NUMBER и STRING

Классы Boolean, Number и String являются "интерфейсными" классами соответствующих

элементарных типов данных. Экземпляр интерфейсного класса содержит элементарную величину

данных в недоступном внутреннем свойстве. Разница между элементарной величиной данных и

экземпляром класса заключается в том, что экземпляр может иметь свойства и методы; и те и дру-

гие являются локальными и наследуемыми. В трех базовых интерфейсных классах все встроенные

методы и свойства, за исключением одного, являются наследуемыми из объекта-прототипа класса.

Единственным исключением является свойство length класса string: очевидно, что каждая

строка должна иметь свое собственное свойство length.

В табл. 19.4 представлены методы и свойства интерфейсных классов.

430 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ТАБЛИЦА 19.4. МЕТОДЫ и СВОЙСТВА ИНТЕРФЕЙСНЫХ КЛАССОВ: BOOLEAN, NUMBER, STRING

Имя

свойство

ФОРМАТ ОПИСАНИЕ

toString

Метод

Метод

Метод

Свойство

Свойство

Свойство NaN

Свойство

INFINITY

СВОЙСТВО

INFINITY NFINITY

String. charAt Метод (индекс)

Метод

At (индекс)

Возвращает строковое

представление или

(false) объекта

Возвращает значение эле-

ментарного типа объекта

myBoolean

Возвращает строковое

представление объекта

myNumber

Возвращает элементарное

значение объекта

myNumber

Константа, максимальное

число, которое можно

представить в ActionScript:

1.79769313486231е+308

Константа, наименьшее

положительное число, ко-

торое можно представить в

ActionScript: 5e-324

"Не число"; константа,

представляющая значение,

не являющееся числом, но

которое используется там,

где ожидается число

Константа, представляю-

щая собой значение,

меньшее, чем -

Константа, представляю-

щая собой значение, боль-

шее, чем

VALUE. (To же самое, что и

глобальная константа

Infinity.)

Возвращает символ в оп-

ределенном месте строки

myString

Возвращает кодировку

Unicode символа в объекте

в ви-

де це-

лого числа в диапазоне

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 431

ПРОДОЛЖЕНИЕ ТАБЛ. 19.4

Имя

свойство

ФОРМАТ ОПИСАНИЕ

Метод

Метод

Code

Метод

Метод

Of

Метод

[начальный индекс] )

(подстрока,

[начальный индекс] )

[конечный

Метод

( ,

Возвращает новую строку, об-

разованную в результате слия-

ния (объединения) строки

и строк, указанных в

аргументах

(значение

Возвращает новую строку, со-

ставленную из символов, коды

которых указаны в качестве ар-

гументов

Выполняет поиск строки, начиная

с начального индекса, и возвра-

щает индекс первого экземпляра

если

подстрока не найдена

Выполняет поиск строки, начи-

ная с начального индекса, и

возвращает индекс последнего

экземпляра подстроки. Возвра-

если подстрока не най-

дена

Возвращает подстроку исходной

строки, начиная с символа, рас-

положение которого в строке

myString соответствует началь-

ному индексу, и до (но не вклю-

чая) символа, расположение ко-

торого в строке myString соот-

ветствует конечному индексу.

(Индексом первого символа

строки является О.)

Разделяет строку на подстроки,

разбивая ее в местах располо-

жения разделителя, и воз-

вращает подстроки в виде мас-

сива. Если в качестве раздели-

теля используется пустая

строка то каждый символ

строки будет элементом воз-

вращенного массива. Если

разделитель не определен, то

первым и единственным эле-

ментом возвращенного масси-

ва будет целая строка. Опцио-

нальный аргумент limit опре-

деляет максимальное число

подстрок, которые могут быть

возвращены

432 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 19.4

Имя ФОРМАТ

свойство

ОПИСАНИЕ

Метод

Метод

конечный индекс)

Метод

Case

Метод

Case

Метод ()

Свойство

Возвращает подстроку, ко-

торая начинается с началь-

ного индекса и включает в

себя число символов, ука-

занных в аргументе длина,

или остальные символы

строки (если аргумент дли-

на отсутствует). Если на-

чальный индекс отрица-

тельный, то начальное по-

ложение определяется от

конца строки, при этом -1

обозначает последний

символ, -2 — предпослед-

ний символ и т.д.

Возвращает подстроку, на-

чиная с начального индек-

са и заканчивая символом

перед конечным индексом.

Если аргумент

опущен, то

возвращаемая подстрока

будет длиться до конца

строки. Если начальный

индекс равен конечному, то

метод возвращает пустую

строку. Если начальный ин-

декс больше конечного, то

интерпретирующая про-

грамма Flash должна по-

менять их местами перед

выполнением функции; на

практике иногда возвра-

щается пустая строка

Возвращает копию строки

myString, все символы

которой являются строч-

ными. Исходное значение

не изменяется

Возвращает копию строки

myString, все символы

которой являются пропис-

ными. Исходное значение

не изменяется

Возвращает элементарное

значение указанного объек-

та String

Длина строки

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 433

КЛАСС BOOLEAN

Класс Boolean (булевы величины) — самый простой в Он имеет только два

свойства, и constructor, которыми обладает каждый создаваемый объект. (Мы не

будем тратить время и упоминать эти свойства при рассмотрении объектов других классов.)

Со свойством мы познакомились в главе 15 "Объединение в

функции", а свойство constructor будет рассмотрено далее в этой главе, в подразделе

"Класс Object". Подробная информация об обоих свойствах будет представлена в

главе 21 "Упаковка данных и функций с помощью пользовательских

Класс Boolean имеет всего два метода, которые также присущи всем объектам.

• Метод toString возвращает в виде строки булево значение (true или

• Метод valueOf возвращает элементарную булеву величину, позволяющую срав-

нить значения, содержащиеся в объектах.

Для сравнения булевых объектов в версии Flash 5 метод valueOf был не ну-

жен, поскольку сравнение самих объектов было эквивалентно сравнению их зна-

чений. В версии Flash MX эта методика больше не работает.

Подробная информация о сравнении объектов представлена в приведенной

ниже врезке.

Сравнение

Во Flash MX два объекта нельзя оценивать как равные только потому, что они

имеют одинаковые свойства с одинаковыми значениями. По умолчанию, два об-

ращения к объектам считаются равными только в случае, если они относятся к

одному и же

В этом смысле версия Flash 5 вела себя непоследовательно, a Flash MX более строго следует

стандарту ЕСМА-262, выполняя сравнение объектов по ссылке, а не по значению. В приве-

денном ниже примере во Flash MX выполняется сравнение по ссылке, тогда как во Flash 5

оно выполняется по значению. В итоге мы получим разные результаты сравнения:

а = new

b = new

a == // ложно во Flash истинно во Flash 5

Для сравнения содержимого объектов классов Boolean, Number и string во Flash MX не-

обходимо использовать метод valueOf О :

== // истинно

При работе с другими объектами для получения значения при сравнении может понадобиться

другой метод. Например, для сравнения цветов, хранящихся в двух экземплярах класса

Color, необходимо использовать метод getRGB

Подробно о свойстве valueOf и сравнениях рассказывается в главе 13

"Использование операторов".

Подробная информация об отличиях между способами сравнения "по и "по

значению" приведена в главе 15 "Объединение предложений в функции".

434 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Необходимость в использовании метода возникает достаточно редко, посколь-

ку обычно, если это нужно, в выполняется автоматическое преобразование данных

в строку. Этот метод можно применить для принудительного использования строк или для того,

чтобы быть абсолютно уверенным в том, что вы имеете дело со строками. Однако ту же самую

задачу выполняет и глобальная функция преобразования string которая к тому же позво-

ляет использовать один и же формат как для объектов, так и для элементарных данных.

О методах tostring О и () рассказывается ниже, в подразделе

"Класс object".

Подробная информация о глобальных функциях преобразования string

Number () и () приведена в главе 12 "Управление переменными,

данными и типами

КЛАСС NUMBER

Класс Number имеет методы и valueof которые соответственно воз-

вращают строковый эквивалент числа и элементарную числовую величину.

Кроме того, класс Number имеет пять констант: NaN ("не число"),

INFINITY И INFINITY.

Константы класса Number рассматривались в главе 12 "Управление

переменными, данными и типами данных".

КЛАСС STRING

Класс String имеет метод который возвращает строковый Каждый

член класса string имеет локальное свойство length (длина), предназначенное только для чте-

ния. Кроме того, класс String имеет множество методов управления строкой, которые являются

наиболее распространенными в ActionScript. Наряду с этим они больше всего задействуют ресурсы

процессора, что побуждает программистов писать альтернативные оптимизированные методы.

В целом строковые методы во Rash MX работают быстрее, чем во Flash 5.

Строковые методы можно разделить на четыре категории: поиск символа или последова-

тельности символов, извлечение части или частей строки, преобразование в строчные или

прописные символы и генерация символов из их кодов и наоборот.

Метод split разбивающий строки на подстроки, во Flash MX был

приведен в соответствие стандарту ЕСМА-262 путем добавления опционального

второго аргумента limit, указывающего максимальное число подстрок. Кроме

того, когда первый аргумент, является пустой строкой, метод

() будет возвращать массив, каждый элемент которого будет строкой.

Во Flash 5 в такой же ситуации возвращался массив, в котором содержался только один эле-

мент, представляющий собой целую строку.

Приведенный ниже код демонстрирует отличие применения данного метода во Flash MX

и во Flash

= "Joe";

i = myString. split

trace // во Flash Joe во Flash 5

trace // 3 во Flash MX, 1 во Flash 5

Метод возвращает подстроку, начиная с символа, соответствующего

начальному индексу и заканчивая символом, находящимся перед конечным индексом. В плейере

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 435

Rash 6 при выполнении этого метода обнаружились сбои. Так, если начальный индекс больше ко-

нечного, то интерпретирующая программа Flash перед выполнением функции должна поменять их

местами. Однако в реальности иногда возвращается пустая строка. Это может происходить и по-

стоянно, например, в случае, когда начальный индекс равен длине строки. В приведенном ниже

примере subs должно быть равно а фактически возвращается пустая строка.

Str =

subs =

Этот дефект можно компенсировать, вставив в программу приведенный ниже код в точке,

предшествующей методу substring

=

var temp = from;

if (to == undefined) to =

if (from == to) return

if (from >

from = to;

to = temp - from;

to){

else to -= from;

return

Описанный выше дефект в последующих версиях Rash-плейера может быть исправлен.

КЛАСС DATE

Класс Date позволяет определить текущее время и дату и хранить полученные значения в

объектах. Все значения времени и дат в хранятся в виде одного числа: количества

миллисекунд до или после полуночи 1 января 1970 года универсального синхронизирован-

ного времени (среднего времени по Гринвичу). Это число возвращается при выполнении ме-

тода

Методы класса Date можно использовать для получения и установки даты/времени в ви-

де одного объекта либо для получения и установки года, даты, дня, часа, минуты, се-

кунды и миллисекунды независимо, в виде локального или универсального синхронизиро-

ванного времени (UTC). Разницу (в минутах) между универсальным синхронизированным и

локальным временем можно получить с помощью метода set

Класс Date имеет также метод toString который возвращает полную информацию о

дате в удобном для считывания формате, например Sun Jun 16 18:04:58 GMT -0600

2003. Ту же самую задачу можно выполнить с помощью глобальной функции Date Таким

образом, выражение О даст тот же самый результат, что и

Date Ни то ни другое выражение в связи с автоматическим преобразованием ти-

пов данных не применяются слишком часто.

Методы класса Date представлены в табл. 19.5.

ТАБЛИЦА 19.5. МЕТОДЫ КЛАССА DATE

Имя ФОРМАТ ОПИСАНИЕ

Возвращает день месяца от 1

до 31 в соответствии с локальным

временем

Возвращает день недели О

(воскресенье) до 6 (суббота) в со-

ответствии с локальным временем

436 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ПРОДОЛЖЕНИЕТАБЛ. 19.5

Имя ФОРМАТ ОПИСАНИЕ

{)

seconds

Offset

Year

iseconds

Minutes

myDate

Возвращает год, представленный

в виде четырех цифр, в соответ-

ствии с локальным временем

Возвращает час от О (полночь)

до 23 в соответствии с локальным

временем

Возвращает миллисекунды от О

до 999 в соответствии с локаль-

ным временем

Возвращает минуты О до 59 в со-

ответствии с локальным временем

Возвращает месяц от О (январь)

до 11 (декабрь) в соответствии с

локальным временем

Возвращает секунды О до 59 в со-

ответствии с локальным временем

Возвращает число миллисекунд,

прошедших после 1 января

1970 года универсального времени

Возвращает разницу в минутах

между локальным временем, ус-

тановленным на компьютере, и

универсальным временем

Возвращает день месяца от 1 до 31

в соответствии с универсальным

временем

Возвращает день недели от О

(воскресенье) до 6 (суббота) в со-

ответствии с универсальным

временем

Возвращает год, представленный

в виде четырех цифр в соответст-

вии с универсальным временем

Возвращает час от О (полночь)

до 23 в соответствии с универ-

сальным временем

Возвращает миллисекунды от О

до 999 в соответствии с универ-

сальным временем

Возвращает минуты от О до 59 в

соответствии с универсальным

временем

Возвращает месяц от 0 (январь)

до 11 (декабрь) в соответствии с

универсальным временем

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 437

ПРОДОЛЖЕНИЕ ТАБЛ.

Имя ФОРМАТ ОПИСАНИЕ

Seconds

(год [, месяц [, )

(час минута [, секунда

(минуты [, секунды [, мил-

лисекунды] ] )

(месяц

Возвращает секунды от О до 59 в

соответствии с универсальным

временем

Возвращает целое число, которое,

будучи добавленным к 1900, даст

полное значение года в соответст-

вии с локальным временем. На-

пример, 0 означает 1900 год

Устанавливает день месяца в

да та от О до 31 в соот-

ветствии с локальным временем.

Возвращает новое время в мил-

лисекундах

помощью четы-

рех цифр год и (опционально)

месяц, от О (январь) до 11

(декабрь), и дату — от 1 до 31

(все параметры устанавливаются

в соответствии с локальным вре-

менем). Возвращает новое время

в миллисекундах

Устанавливает час от 0 (полночь)

до 23 и (опционально) минуты —

от 0 до 59, — от О до 59

и миллисекунды — от 0 до 999

(все параметры устанавливаются

в соответствии с локальным вре-

менем). Возвращает новое время

в миллисекундах

Устанавливает миллисекунды

от 0 до 999 в соответствии с ло-

кальным временем. Возвращает

новое время в миллисекундах

ото до 59, а

также (опционально)

от О до 59 и миллисекунды — от О

до 999 (все параметры устанавли-

ваются в соответствии с локальным

временем). Возвращает новое

время в миллисекундах

Устанавливает месяц от О

(январь) до 11 (декабрь), а также

(опционально) дату — от 1 до 31

(оба параметра устанавливаются

в соответствии с локальным вре-

менем). Возвращает новое время

в миллисекундах

438 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ПРОДОЛЖЕНИЕТАБЛ. 19.5

Имя ФОРМАТ ОПИСАНИЕ

(секунды

Year (год [, месяц [, )

минуты секунды

Minutes

миллисекунды)

(минуты секунды мил-

лисекунды] ] )

Устанавливает секунды О

до 59 и (опционально)

кунды — от 0 до 999 (оба пара-

метра устанавливаются в соот-

ветствии с локальным временем).

Возвращает новое время в мил-

лисекундах

Устанавливает время в миллисе-

кундах, прошедшее после полуно-

чи 1 января 1970 года. Возвра-

щает то же значение, которое бы-

ло задано

Устанавливает в соответст-

вии с универсальным време-

нем — от 1 до 31. Возвращает

новое время в миллисекундах

Устанавливает РОД, состоящий из

четырех цифр, и (опционально)

месяц — от 0 (январь) до 11

а также — от 1

до 31 (все параметры устанавли-

ваются в соответствии с универ-

сальным временем)

Устанавливает час от О (полночь)

до 23 и (опционально) минуты —

от О до 59, секунды — от О ДО 59

и миллисекунды — от О до 999

(все параметры устанавливаются

в соответствии с универсальным

временем). Возвращает новое

время в миллисекундах

Устанавливает миллисекунды

от О до 999 в соответствии с уни-

версальным временем. Возвра-

щает новое время в миллисекун-

дах

Устанавливает минуты от О

до 59, а также (опционально) се-

кунды— от 0 до 59 и

кунды от 0 до 999 (все пара-

метры устанавливаются в соот-

ветствии с универсальным

временем). Возвращает новое

время в миллисекундах

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 439

ОКОНЧАНИЕ ТАБЛ. 19.5

Имя ФОРМАТ ОПИСАНИЕ

(месяц [,

Seconds

rayDate.setUTCSeconds

Date.UTC

(год, месяц [, дата [, час

минуты секунды

миллисекунды

Устанавливает месяц от О

(январь) до 11 (декабрь), а также

(опционально) дату — от 1 до 31

(оба параметра устанавливаются

в соответствии с универсальным

временем). Возвращает новое

время в миллисекундах

Устанавливает секунда от О

до 59 и (опционально) миллисе-

кунды — от О до 999 (оба пара-

метра устанавливаются в соот-

ветствии с универсальным вре-

менем). Возвращает новое время

в миллисекундах

Определяет

будет извлечено при выполнении

метода getYear Аргу-

мент является положитель-

ным целым числом. Если год

представлен в виде одно- или

двухзначного числа, то при вы-

полнении метода

Date. getYear О будет извле-

чено это число. Если год пред-

ставлен в виде трех- или четырех-

значного числа, то при выполне-

нии метода getYear

будет извлечена разность между

этим числом и 1900

Возвращает строку, представ-

ляющую дату и время в следую-

щем формате: Sat May 4

12:42:19 GMT-0700 2003

Возвращает число миллисекунд,

прошедших с полуночи 1 января

1970 года универсального вре-

мени, а также дату/время, опре-

деляемые аргументами месяц,

дата, час, минуты, и

миллисекунды

Конструктор Date можно использовать тремя способами.

• myDate = new () времени.

• myDate = new Date (1000000) myDate в значение даты и вре-

мени в один миллион миллисекунд после полуночи 1 января 1970 года.

• myDate = new Date 1, 2, 3, 4, 5, 6) — устанавливает myDate в

значение 2 января 2003 года, 3:04 (утра) плюс 5 секунд и 6 миллисекунд, т.е. формат

будет таким: new Date (год, месяц, дата, час, минуты, секунды, мил-

лисекунды) ;

440 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

В последнем формате все параметры, за исключением года и месяца, являются опцио-

нальными, и если они не то устанавливаются в значение 0. Часы устанав-

ливаются 0 до 23, где 0 соответствует полуночи, а 12 — полудню. Для 1900-1999 гг. значе-

ния можно устанавливать от 0 до 99, а для всех последующих годов обязательно нужно указы-

вать четыре цифры.

КЛАСС FUNCTION

Класс Function во Flash MX является новым. Он вносит функции в систему клас-

сов и открывает новые возможности, например, добавление пользовательских

функций к объекту или создание подклассов функций. По-

скольку в классы реализуются в виде функций, то, кроме того, объект

является логическим местом размещения методов, которые могут вы-

полняться в любом классе. В качестве примера можно привести метод extends который ус-

танавливает наследование между дочерним и родительским классами.

Пример создания метода extends О в объекте при-

веден в главе 21 "Упаковка данных и функций с помощью пользовательских

объектов".

Класс Function имеет всего два встроенных метода: apply и call

Класс Function является "неконструктивным" конструктором: пригодные к употребле-

нию новые экземпляры с помощью ключевого слова new создать нельзя.

Методы apply () и call а также синтаксис создания функций описаны в

главе 15 "Объединение предложений в функции".

КЛАСС OBJECT

Класс j ect в ActionScript является основой всех остальных классов. Все другие классы

наследуют класс j ect и, следовательно, имеют общие с ним свойства и методы.

Одним из скрытых достоинств Flash MX является возможность увеличения свойств класса

Object до 10. Чтобы "отобразить" и увидеть эти свойства, воспользуйтесь недокументи-

рованной функцией ASSetPropFlags класса j ect:

null, 8,

for (a in trace

Данный цикл позволяет извлечь 10 свойств: constructor, isProperty-

valueOf addProperty unwatch и watch Каждый объект, созданный с помощью

оператора new, автоматически наследует эти свойства, причем 9 последних из них являются мето-

дами. Свойства класса Ob j ect представлены в табл. 19.6.

Первые пять свойств, представленные в этой таблице, являются недокументированными.

Они определены в стандарте ЕСМА-262, хотя в нем используется не свойство

isPropertyEnumerable () , a Тем не менее необходимо

иметь в виду, что поведение любой недокументированной функции в последующих версиях

Flash может быть изменено. Теоретически они даже могут вообще не поддерживаться.

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 441

ТАБЛИЦА 19.6. МЕТОДЫ и СВОЙСТВА КЛАССА OBJECT

имя ФОРМАТ

свойство

ОПИСАНИЕ

Метод

cobstructor Свойство

hasOwnProperty Метод

isPropperty Метод

Enumerable

Метод

registerClass Метод

toLocaleString Метод

toString

unwatch

valueOf

Метод

Метод

Метод

watch Метод

объекта)

Ob j

См. табл. 19.8

См. табл. 19.8

Создает свойство получе-

ния/установки с именем

myProp

Указывает функцию-

конструктор объекта j ect

Возвращает значение true, если

имеет локаль-

ное свойство с именем myProp; в

противном случае возвращает

значение false

Возвращает значение true,

если аргумент явля-

ется локальным свойством, пе-

речисляемым в цикле or-in

Возвращает значение true, если

аргумент

использует в ка-

честве объекта-прототипа, где он

получает коллективные свойства;

в противном случае возвращает

значение false

Предварительно регистрирует

видеоклип членом класса (см.

главу 17 "Демонстрация мощи

видеоклипов")

Возвращает строку, соответст-

вующую определенной стране

или региону; по умолчанию

возвращает строку

Object]

Возвращает строку [object

Object]

Удаляет регистрацию, создан-

ную методом watch

В классе obj ect по умолчанию

возвращает сам объект. В до-

черних классах, таких как

Boolean, Date, Number И

String, могут быть определе-

ны более полезные методы

Регистрирует функцию обратно-

го вызова, которую следует ак-

тивизировать при изменении

указанного свойства объекта

442 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ

Bo Flash 5 класс Object имеет только три свойства: toString и

constructor. Если во Flash 5 их необходимо перечислить с помощью цикла то

формат отображения скрытых свойств будет таким:

Из класса Object стандартом и имеются также в

JavaScript. (И в ЕСМА-262, и в JavaScript определено свойство а

не isPropertyEnumerable Три свойства присущи только Flash:

и

СВОЙСТВО CONSTRUCTOR

Свойство constructor предназначено для того, чтобы указывать функцию-конструктор

данного объекта. Следовательно, свойство constructor можно использовать для определе-

ния класса объекта:

raySound = new

if mySound == "object") ==

// затем сделайте что-нибудь с объектом Sound

Каждый экземпляр класса обладает собственным свойством constructor. Объект-

прототип prototype класса (как и любой другой объект) также обладает свойством

constructor.

Подробная информация о свойстве constructor приведена в главе 21

"Упаковка данных и функций с помощью пользовательских объектов". В этой

же главе упоминается недокументированное свойство (с

символами подчеркивания справа и слева).

Метод toString предназначен для возвращения строки, каким-либо образом пред-

ставляющей объект. Интерпретирующая программа активизирует этот метод,

когда объект необходимо преобразовать в строку. Некоторые встроенные объекты обладают

характерным для их класса методом toString Такие объекты перечислены в табл. 19.7.

ТАБЛИЦА 19.7. ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ МЕТОДОВ TOSTRING() ВСТРОЕННЫХ ОБЪЕКТОВ

КЛАСС ЗНАЧЕНИЕ, ВОЗВРАЩАЕМОЕ МЕТОДОМ TOSTRING()

Array Разделенный запятыми перечень элементов массива, преобра-

зованных в строки

Boolean Значение true или в виде строки

Date Полная дата и время в формате Sun Jun 16 18:04:58

0600

Button, Абсолютный путь к экземпляру

TextPield

Number Число в виде строки

Object Строка [object Object]

Объект XML-узла или Исходный XML-код

XML-документ

* среднее время по Гринвичу (то же самое, что и универсальное синхронизированное время).

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 443

Подробная информация о преобразовании числа в строку приведена в

главе 12 "Управление переменными, данными и типами данных".

Классы, не обладающие характерными только для них методами toString используют ме-

тод, который они унаследовали от класса Object (возвращающий строку [object

Чтобы получить возвращаемое значение, несущее большую смысловую нагрузку, для таких классов

можно задать специальный метод toString как в приведенном ниже примере.

= function ()

При создании пользовательского класса для него можно создать и метод toString возвра-

щающий данные, которые можно использовать либо для отладки, либо просто в программе.

МЕТОД

Метод toLocaleString является альтернативой методу toString — его версией для

определенной Предназначением данного метода является обеспечение локализованной

версии строки, представляющей объект. Локализацией называется адаптация к различным стра-

нам и языкам. Метод toLocaleString прототипа класса возвращает то же самое, что

и метод Однако методы toLocaleString О можно определять для встроенных

классов. Метод toLocaleString в не документирован.

МЕТОД

Метод принимает один аргумент, являющийся свойством объек-

та, и возвращает значение true, если это свойство перечисляется в цикле Если свойство

не существует или не перечислено в цикле метод isPropertyEnumerable возвраща-

значение

Цикл for-in рассматривался в главе 14 "Работа с данными: использование

предложений".

Метод isPropertyEnumerable О не учитывает свойства в цепочке прототипа. Это может

привести к результатам, которые не будут интуитивно понятными. Например, в приведенном ни-

же коде перечисляются свойства нового экземпляра класса TextField, а затем для каждого свой-

ства вызывается метод isPropertyEnumerable Можно посчитать, что поскольку свойства

получены с помощью цикла in, то с помощью этого цикла они также должны быть перечис-

лены. На первый взгляд, вы правы, но метод isPropertyEnumerable () все равно возвращает

значение он не учитывает свойства в цепочке прототипа, а все свойства нового

экземпляра класса TextField находятся в коллективном использовании с объектом

При вызове метода isPropertyEnumerable для каждого свойства

непосредственно в объекте метод isPropertyEnumerable О возвра-

щает значение true.

myTextField = new

for (a in myTextField) {

trace (a)

}

/* Результат

true

444 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

restrict

false

true

textHeight

false

true

и т.д.

*/

В метод недокументирован. Он эквивалентен

свойству стандарта и JavaScript.

Метод isProtoOf принимает один аргумент, являющийся объектом. Формат метода

следующий:

Если экземпляр объекта instanceObject protoobject в качестве прототи-

па объекта, у которого он получает коллективные свойства, то метод isProtoOf возвра-

щает значение true. В противном случае возвращается значение false.

Метод isProtoOf зависит от свойства _proto_ экземпляра объекта для поиска прото-

типа экземпляра объекта. Например, в приведенном ниже коде используется текстовое поле

из предыдущего примера. Можно заметить, что если вы повторно укажете свойство

экземпляра объекта так, что оно больше не будет указывать на прототип класса, то метод

isProtoOf корректно работать не будет:

// true

myTextField. proto = null;

// false

По аналогии с тем, что метод представляет объект строки, метод

valueOf представляет объект как другой элементарный тип данных. По умолчанию метод

valueOf класса Ob j ect возвращает сам объект. Например:

== // true

== typeof // true

// объект

Однако в других классах метод valueOf может быть более полезным. Так, класс Date

имеет метод valueOf который возвращает число миллисекунд между временем объекта

Date и полуночью 1 января 1970 года. Если дата предшествует этому значению, возвращае-

мое число будет (Этот метод эквивалентен методу getTime

myDate = new

trace // 1024275924859

trace // Sun Jun 16 18:05:24 2002

Для классов Boolean, Number и String определен метод valueOf который возвращает

примитивный элемент данных, что позволяет выполнять сравнение элементарных значений.

Подробная информация о сравнении объектов приведена выше, во врезке

"Сравнение объектов".

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 445

МЕТОД

Недокументированный метод hasOwnProperty принимает один строковый аргумент,

указывающий имя возможного локального свойства. Метод возвращает значение true, если

объект имеет локальное свойство с этим именем. В противном случае он возвращает значение

Метод имеет такой формат:

В приведенном ниже примере создается глобальная функция в которой

метод hasOwnProperty используется для определения, имеет ли объект или любой из

прототипов, которые он наследует, метод (). Метод возвращает

число, указывающее, сколько уровней следует пройти вверх по цепочке прототипов для

чтобы найти метод valueOf Если возвращается значение 0, это значит, что метод

valueOf () имеет сам объект. Если возвращается значение 1, это означает, что метод

valueOf () имеет родительский объект, т.д. проверяет, был ли найден

valueOf () в классе Object. Если это так, то метод indValue возвращает значение -1

(отрицательное число).

Если цепочка прототипов пройдена, а метод valueOf не найден, то результат в стро-

ке 5 будет неопределенным, цикл while завершается (строка 4), функция прерывается и воз-

вращает значение (строка 15). Это может произойти, к примеру, если цепочка

прототипов была разбита прежде, чем достигнут класс Ob j

= function (obj) {

var i =

var result =

while (result != undefined) {

result =

if (result true) {

if (obj == return (-1)

else return i;

1

2

3

4

5

6

7

8

9 }

10: else {

11: obj = proto // один шаг вверх по цепочке

12:

13: }

14: }

return;

16: }

17:

18:

19: trace -1, valueOf в

20: myDate = new

21: trace // 1, valueOf в родительском классе

Метод addProperty позволяет функцию получения/задания вместо не-

посредственного изменения свойств объектов. Сначала кратко опишем преимущества функ-

ций получения/задания, а затем рассмотрим, как используется метод addProperty

Пусть создается класс s, для экземпляров которого задано свойство myProp:

function MyClass () {

=

446 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Теперь при создании экземпляра он будет иметь свойство

= new MyClass 0;

Если вы хотите изменить значение j . myProp, это можно сделать непосредственно,

как показано ниже.

= "myNewVal";

// myNewVal

Однако лучшим способом изменения значения j . myProp считается создание функ-

ции задания:

= function (newVal) =

// myNewVal

Преимущество заключается в том, что если вы решите проверить достоверность данных

или предпринять какие-то другие действия на основе представленного значения, это можно

сделать в функции задания, больше ничего не изменяя в программе. Если же где-либо ис-

пользовались прямые ссылки, придется все их изменить (или заменить на функцию задания).

Функции получения дают аналогичные преимущества при извлечении данных:

= function ()

// myNewVal

Функции получения/задания могут оказаться особенно важными при коллективной рабо-

те, поскольку они обеспечивают простое, согласованное взаимодействие всех пользователей с

объектом, одновременно позволяя вносить внутренние корректировки.

Большинство встроенных свойств, например и _у для видеоклипов, являются функ-

циями получения/задания.

Однако при работе с функциями получения/задания возникают две проблемы.

• Первая проблема касается удобочитаемости. Например, строка

• более удобочитаема, чем строка

• Вторая проблема заключается в том, что только лишь создание функций получе-

ния/задания не побуждает к их применению. При возникновении проблем все равно

необходимо выяснить, не вызваны ли они наличием прямой ссылки, позволяющей

обойти функции получения/задания.

Обе проблемы можно решить с помощью метода Он позволяет добавить

свойство и установить его соответствие с функциями получения/задания с всего

лишь одного шага. После этого прямая ссылка фактически будет вызывать функции получе-

ния/задания. Таким образом, мы получим более удобочитаемый синтаксис и будем застрахо-

ваны от обхода функций получения/задания.

Метод addProperty имеет такой формат:

getMyProp, setMyProp )

Вместо имен функций получения и задания можно использовать функциональные литералы,

как продемонстрировано в содержащемся на компакт-диске файле la.

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 447

Если указаны и функция получения, и функция задания, то обе они должны существо-

вать. Если вы хотите создать свойство, предназначенное только для чтения, то на место функ-

ции задания поместите null. В приведенном ниже примере х и у изменяют с помощью дру-

гих функций, а предназначенное только для чтения свойство dif f используется для отсле-

живания разницы между х и у.

= { X : 2 , у : 3

function getDiff () {

return -

}

rayObj.addProperty("diff", getDiff,

var difference = // -1

Если теперь попытаться задать свойство myObj то обнаружится, что код выпол-

няться не будет:

= 20;

// -1

Метод addProperty () возвращает значение true, если свойство добавлено успешно; в

противном случае возвращается значение

Обратите внимание на то, что определенная вами функция задания фактически не может

изменить свойства. Она всего лишь в виде аргумента получает новое значение и по-

зволяет на его основе предпринять определенные действия. Значение изменяется независимо

от функции задания, т.е. вне контроля программиста. В файле (листинг 19.1)

функция задания setMyProp не содержит предложений, но значение все равно устанав-

ливается — это яркая иллюстрация того, что установка значения выполняется "за кулисами".

Хотя это и не является интуитивно понятным, но свойство может изменить функция по-

лучения. Свойство будет установлено в любое значение, возвращаемое функцией. Например,

приведенная ниже функция получения присоединяет строку "addon" к свойству myProp

при любом считывании свойства.

= function () {

+= "addon";

return

Метод addProperty переписывает существующее свойство, имеющее то же имя, что и

свойство в первом аргументе. Следовательно, назначение, выполненное в строке 8, должно

происходить после предложения addProperty В противном случае свойство myProp бы-

ло бы существующим свойством и было бы уничтожено вместе со значением

ЛИСТИНГ 19.1. GETSET.FLA

function MyClass () {

var getMyProp = function () {

return this.myProp;

var = function (newVal) {

getMyProp,

this.myProp = "myVal"; // это нужно сделать после addProperty

1

2

3

4

5

6

7

8

9

10: myObj = new

11: myVal

=

13: //

448 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Тот факт, что функция установки фактически не изменяет переменную, сначала может

показаться существенным недостатком, поскольку это означает, что установленное значение

изменить невозможно. Однако установленное свойство можно рассматривать как команду

выполнить другие действия, а не как элемент данных. Посмотрим на установленное значе-

ние, а затем изменим остальные значения по своему усмотрению. Факт наличия "входных"

объектов и свойств, обеспечивающих взаимодействие с классом, и "выходных" объектов и

свойств, которые "выполняют задачу", являются частностью реализации, которую можно

скрыть внутри класса.

Обратимся к приведенному ниже листингу кода, взятому из файла f la. Если значе-

ние, переданное функции задания, отличается от "Bad то строка "okay" передается в

функцию индикатора состояния (строка 7), а значение отображается в текстовом поле (строка 8).

С другой стороны, если значением, переданным функции установки, является "Bad

то в функцию индикатора состояния передаются строки "error" и "Bad

(строка а в тестовом поле (строка 12) отображается пустая строка (т.е. ничего). Свойство

функции получения/задания успешно установлено в значение "Bad

Несмотря на это, с точки зрения пользователя (или другого программиста, пишущего код,

взаимодействующий классом) значение "Bad в качестве входного отклоня-

ется, и отображается сообщение об ошибке.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

function MyClass () {

var getMyProp = function () {

return

var setMyProp = function (newVal) {

if (newVal != "Bad Bart") {

}

else {

newVal)

getMyProp,

this.myProp = "Beautiful // сделать после addProperty

Еще одна возможность изменения установленного значения заключается в использова-

нии метода Object описываемого в следующем подразделе. Однако этот метод

может занять гораздо больше ресурсов процессора по сравнению с методом

Если вы только думаете о попытке замены свойства функции получения/задания,

обратитесь к разделу "Возможные проблемы" в конце этой главы.

МЕТОДЫ и UNWATCH()

Методы watch и соответственно регистрируют и отменяют регистрацию

функции обратного вызова, обращение к которой производится при любой попытке изме-

нить определенное свойство. Это очень мощная возможность, однако за ее использование

приходится расплачиваться: при поиске все время изменяющегося свойства будет постоянно

активизироваться функция обратного вызова, что создает чрезмерную нагрузку на процессор.

Метод watch полезен для отладки программы. Кроме того, его можно использовать в

качестве генератора событий, таких как Однако можно за-

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 449

дать только одну точку наблюдения за любым заданным свойством. При задании второй точ-

ки наблюдения она заменит предыдущую. В этом заключается отличие данного метода от

приемников: для любого заданного события можно указать сколько угодно приемников. С

помощью метода watch можно реализовать собственную модель события так, чтобы при

изменении свойства "информацию" получало бы любое количество объектов.

Подробная информация о генераторах событий приведена в главе 16

"Взаимодействие, события и установление последовательности". Соответст-

вующие ссылки приведены на узле f com.

Метод watch не рекомендуется использовать совместно со свойствами функций полу-

чения/задания. Несмотря на то что до какой-то степени он будет работать, некоторые изме-

нения могут быть пропущены, и, кроме того, существует потенциальная опасность создания

чрезмерной нагрузки на процессор. Большинство встроенных свойств являются свойствами

получения/задания.

Чтобы начать наблюдение за свойством, необходимо выполнить следующие действия: опреде-

лить функцию обратного вызова и выполнить предложение watch Форматы обоих действий, а

также форматы завершения методов watch () представлены в табл. 19.8.

ТАБЛИЦА 19.8. ФУНКЦИЯ ОБРАТНОГО ВЫЗОВА и МЕТОДЫ WATCH и UNWATCH

ФУНКЦИЯ

ФОРМАТ ПАРАМЕТРЫ

watch rayObj.watch(свойство,

обра

данные

Функция об-

ратного вызова

function

{

}

(свойство)

свойство — указывает

подлежащее наблюдению (в виде

строки).

— указывает

функцию обратного вызова (ссылку)

(опционально) — указывает данные,

подлежащие отправке в функцию

обратного вызова

свойство — содержит изменяемое

свойство.

— содержит

предыдущее значениесвойства.

— содержит но-

вое значение свойства.

— содер-

жит данные, определенные в одно-

именном параметре предложения

watch ()

свойство — указывает свойство

для остановки наблюдения

Оба метода, () и unwatch О, при успешном выполнении возвращают значение

true; в противном случае возвращается значение

Функция обратного вызова активизируется как метод объекта, содержащий наблюдаемое

свойство (как myObj в табл. 19.8). Внутри функции обратного вызова ключевое слово this

относится к объекту myOb

450 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Объект, такой как содержащий свойство, за которым проводится наблюдение,

должен существовать при задании точки наблюдения. При удалении объекта точка наблюде-

ния исчезает. Однако точка наблюдения существует независимо от свойства, за которым вы-

полняется наблюдение. Точку наблюдения можно задать для еще не существующего свойст-

ва, а в силу она вступит, когда свойство будет создано. Аналогичным образом можно удалить

свойство, для которого была задана точка наблюдения, без уничтожения этой точки. Если

позднее вы снова создадите свойство, то точка наблюдения все так же будет действовать. Для

удаления точки наблюдения без удаления объекта воспользуйтесь методом unwatch

В приведенном ниже коде файла la содержится объект statusObj со свойством

isOkay.

statusObj = new

= "okay";

Следующая строка устанавливает точку наблюдения за свойством isOkay:

Функция обратного вызова setStatusText имеет следующий вид (четвертый пара-

метр, опущен, поскольку он не используется):

function setStatusText (prop, oldval, newVal) {

= newVal;

if (newVal == "okay") {

}

else {

}

Если новым значением свойства isOkay является то формат текста в поле со-

стояния устанавливается в значение okayFormat. Если новое значение свойства isOkay от-

личается от "okay", то формат текста в поле состояния устанавливается в значение

errorFormat, а поле отображения останется пустым (путем его установления в значение

пустой

Выполнение функции обратного вызова инициируется при попытке изменения значения

свойства. Однако любым фактическим изменением этого свойства управляет функция обрат-

ного вызова. Если функция обратного вызова не возвращает значение, то значение свойства

определено не будет (undefined). В только что представленной функции

setStatusText такое происходит всегда. Данная функция никогда не возвращает значе-

ния, поэтому свойство, за которым проводится наблюдение, всегда не определено.

Если функция обратного вызова возвращает значение, то свойство устанавливается рав-

ным возвращенному значению. В связи с тем, что функция обратного вызова в качестве сво-

его второго параметра получает предыдущее значение, она может аннулировать

просто вернув предыдущее значение.

Возможность метода watch управлять значением свойства или аннулировать измене-

ния отличает его от метода addProperty Данная возможность проиллюстрирована в

файле . f la. Когда функция обратного вызова myPropHandler получает непри-

емлемое новое значение, она возвращает старое значение, аннулируя изменение (строка

1: function myPropHandler (prop, oldval, newVal) {

2: if (newVal "Bad Bart") {

myDisplayProp = newVal;

4: myStatusProp =

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 451

5 :

7:

8:

9:

10:

11:

12:

13:

}

else

return // принять изменение

= "error";

return // отклонить изменение

ОБЪЕКТ MATH

Часто для достижения нужно эффекта движения, как плавного, так и совершенно неесте-

ственного, используются математические функции. Как правило, они являются самым

"изящным" способом достижения определенной цели, т.е. они проще как концептуально, так

и в исполнении.

Кроме того, они нередко являются более гибкими по сравнению с другими походами, в

том числе и построением промежуточных отображений, т.е. с их помощью можно выполнять

гораздо более широкий диапазон задач.

На Комбинируя методы рисования и математические функции, можно добиться

восхитительных результатов. В качестве примеров обратитесь к содержащимся

на компакт-диске файлам и от разработчика Кита

Питерса (Keith Peters), а также к описанным в главе 18 "Процедура рисования

с помощью ActionScript" файлам и от раз-

работчика Милли Маруани (Millie

Объект Math имеет такое количество методов с самыми разными областями применения,

что им можно посвятить целую книгу. В этой книге приведены примеры только наиболее

распространенных методов. Полностью математические функции перечислены в табл. 19.9.

ТАБЛИЦА 19.9. МЕТОДЫ и СВОЙСТВА ОБЪЕКТА MATH

Имя

abs

Acos

As in

atan

ceil

cos

exp

log

свойство

Метод

Метод

Метод

Метод

Метод

Метод

Метод

Метод

Метод

Метод

ФОРМАТ

x)

ОПИСАНИЕ

Вычисляет абсолютное значение х

Вычисляет арккосинус х

Вычисляет арксинус х

Вычисляет арктангенс х

Вычисляет арктангенс отношения у/х, т.е.

угол между положительной осью х и точкой

(х, у)

Округляет х в сторону увеличения до бли-

жайшего целого числа

Вычисляет косинус х

Вычисляет Е в степени х

Округляетх в сторону уменьшения до бли-

жайшего целого числа

Вычисляет натуральный логарифм х

452 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 19.9

Имя

max

min

random

round

sin

sqrt

tan

E

LOG2E

LN10

PI

свойство

Метод

Метод

Метод

Метод

Метод

Метод

Метод

Метод

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Метод

ФОРМАТ

у)

у)

у)

ОПИСАНИЕ

Возвращает большее целое из х и у

Возвращает меньшее целое из х и у

Возводит х в степень у

Возвращает псевдослучайное число между

Ои1

Округляет х до ближайшего целого числа

Вычисляет синус х

Вычисляет квадратный корень из х

Вычисляет тангенс х

Константа Эйлера и основание натурально-

го логарифма (приблизительно 2,718), тра-

диционно обозначающаяся как е

Натуральный логарифм 2

(приблизительно 0,693)

Логарифм Е по основанию 2

(приблизительно 1,442)

Натуральный логарифм 10

(приблизительно 2,302)

Логарифм Е по основанию 10

0,434)

Отношение длины окружности к ее диамет-

ру (приблизительно 3,14159)

Величина, обратная квадратному корню

из

(приблизительно 0,707)

Квадратный корень из 2

(приблизительно

НАИБОЛЕЕ РАСПРОСТРАНЕННЫЕ МАТЕМАТИЧЕСКИЕ ФУНКЦИИ

Наиболее широко используемыми методами объекта Math являются random

и

МЕТОД

Метод усекает десятичное число и возвращает только его целую часть. Например:

х = (8.21) // результат: 8

х = (8.5 ) // результат: 8

х = (8.6) // результат: 8

x (-8.21) // результат: -9

x = (-8.5) // результат: -9

x = (-8.6 ) // результат: -9

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 453

МЕТОД

Метод random возвращает десятичное число, большее или равное 0 и меньшее

обычно это число представлено разрядами. Например:

х =

/*

Примеры результатов:

0.236938397510414

0.102950482211518

0.274189059284604

0.585484127786702

0.00277895387391511

0.80261959452304

*/

МЕТОД ROUND()

Метод round округляет десятичное число до ближайшего целого. Приведем несколько

примеров:

х (8.21) // результат: 8

х = (8.5) // результат: 9

х (8.6) // результат: 9

х (-8.21) // результат: -8

х = (-8.5) // результат: -8

x = (-8.6) // результат: -9

В приведенном ниже примере mcPercent — это целая процентная часть видеоклипа

ip, которая была загружена.

mcPercent = /

) *

Чтобы округлить десятичную дробь, сначала умножьте ее на число, являющееся степе-

нью округлите, а затем разделите на то же число. Используемое число определяет количе-

ство десятичных разрядов, до которых производится округление. Например, в приведенном

ниже коде у округляется до одного десятичного разряда.

у =

= // равно .1

В приведенном примере, если у — любая положительная десятичная дробь, то будет

равно ИЛИ 0.

Применение округления до одного десятичного разряда будет рассмотрено ни-

же, в подразделе тригонометрии для получения и задания на-

правления".

ГЕНЕРАЦИЯ СЛУЧАЙНОГО ЦЕЛОГО ЧИСЛА от 0 до 9 ВКЛЮЧИТЕЛЬНО

Объединив методы random и round можно получать случайные целые числа.

В данном коде операции выполняются одна за другой:

for (i = 0; i < 10; i++) {

х = О; // генерация случайного числа меньше 1

х *= 10; // умножение на 10

х = // округление

454 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Более кратким способом является следующее предложение:

ИСПОЛЬЗОВАНИЕ МЕТОДА MATH.SQRT() для ПОЛУЧЕНИЯ и ЗАДАНИЯ ОТНОСИТЕЛЬНОГО

РАСПОЛОЖЕНИЯ

Метод sqrt можно использовать и для определения, и для управления положе-

нием одного видеоклипа относительно другого либо относительно любой известной точки

рабочего поля. Например, метод sqrt можно использовать для поддержания посто-

янного расстояния между перетаскиваемым видеоклипом и точкой, привязывая таким обра-

зом перемещение клипа к определенной дуге.

Использование метода sqrt для управления местоположением основывается на

том, что положение клипа в рабочем поле полностью определяется двумя числами: положе-

нием х и положением у. Следовательно, перетаскиваемый видеоклип можно привязать к лю-

бой траектории, если вы придумаете формулу, которая при наличии одной координаты смо-

жет дать значение другой.

Рассмотрим рис. 19.1. Если указать координату х точки, находящейся на круге, то вы

сможете примерно определить, какую координату у необходимо задать для мыши, чтобы объ-

ект оставался расположенным на дуге.

Вероятно, вы не удивитесь, что существует математическое выражение, позволяющее вы-

полнить ту же самую задачу. Поместив это выражение в обработчик события входного кадра ви-

деоклипа мыши, можно заставить мышь оставаться на дуге в каждом кадре, в котором коорди-

ната х позволяет это сделать. Эта методика продемонстрирована в файле la.

i

V

Рис. 19.1. Функция 0 удерживает мышь на определенном расстоянии от цен-

тральной точки дуги

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 455

Математическое уравнение получает свойство мыши _х, а затем задает соответствующее

свойство _у. В уравнении используется тот факт, что каждая точка дуги находится на одном и

том же расстоянии от ее центра, равном половине ширины arc видеоклипа. Этим расстояни-

ем является радиус дуги, который в формуле обозначается символом Ниже приведен код

ActionScript.

{

var r = // радиус дуги

var ctr_x = 400; // положение х центра дуги

var ctr_y = 300; // положение у центра дуги

{

у = * - ( (_х - ctr_x) * (_х - ctr_x) +

Как была получена данная формула?

Начнем с того, что расстояние между двумя точками рабочего поля можно свести к разно-

сти координат х и у. На рис. видно, что, для того, чтобы добраться от мыши до центра

полукруга, не обязательно двигаться по кратчайшему Вместо этого можно под-

няться вверх (разность у), а затем переместиться влево (разность х).

По аналогии, если заданы разности х и у, то будет очевиден прямой путь. Эти три расстояния

образуют треугольник, а имея две стороны треугольника, очень легко третью.

В математическом выражении, если вы знаете расстояние по прямой от мыши до центра

дуги и разность х от мыши до центра дуги, то можете вычислить разность у.

В данном случае расстояние от мыши до центра дуги является радиусом дуги, т.е. равно

половине ширины видеоклипа дуги (arc / 2). Разностью х является _х - ctr_x,

_х — координата х мыши (при этом имя экземпляра видеоклипа мыши задавать не нуж-

но, поскольку код находится внутри обработчика события мыши), a координата х

центра дуги. Аналогичным образом, разностью у является _у - ctr_y.

Равенство, позволяющее вычислить разность у, является разновидностью теоремы Пифагора,

которая говорит о том, что = - где у — разность у, — радиус, — разность х.

На языке ActionScript данная формула выглядит следующим образом:

(у - ctr_y) * (у - ctr_y) = * - (х - ctr_x) * (х -

Извлекая квадратный корень из обеих частей равенства, получим следующее:

у - ctr_y = (r * - (х - ctr_x) * (х -

Прибавив к обеим частям равенства получим желаемую формулу:

у = * •• ( (_х - ctr_x) * (_х - ctr_x) )) +

ОСНОВНЫЕ ТРИГОНОМЕТРИЧЕСКИЕ МЕТОДЫ и

Наиболее широко используемыми тригонометрическими методами и, вероятнее всего,

самыми разносторонними методами объекта Math являются sin и cos

Их функциональные возможности будут описаны и продемонстрированы в следующих под-

разделах. Например, в файле la _rotation (вращение) видеоклипа

используется для создания эффекта падения дерева, эффект удлинения тени при этом дос-

тигается с помощью метода а для расчета того, насколько далеко находится вер-

шина дерева от земли, используется метод

В файле тригонометрия используется для того, чтобы определить, направлено

ли ружье на врага. Тот же способ можно использовать для того, чтобы рассчитать, на сколько

градусов (_rotation) чудовище должно раздвинуть свои челюсти для того, чтобы поглотить

объект заданного размера.

456 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

На рис. 19.2, слева, изображен треугольник, расположенный внутри круга, который дает

наглядное представление о функциях синуса и косинуса. Тригонометрические методы претво-

рены в жизнь в файле la от разработчика Хелен Триолоь (Helen На рисун-

ке с левой стороны функции синуса и косинуса показаны с помощью катетов треугольника в

"единичном круге", радиус которого равен одной единице длины. Радиус является гипотену-

зой (самой длинной стороной) треугольника. Радиус и горизонтальный катет образуют угол в

(theta). При вращении радиуса по кругу горизонтальный катет треугольника образует косинус,

а вертикальный катет — синус угла 6 (theta). На рис. 19.2, справа, показано, как функция си-

нуса (возрастающая и убывающая) отображает синусоидальную волну во времени.

В "единичном круге" предполагается, что вращение на нуль градусов соответ-

ствует положению "3 часа". Для видеоклипа вращением на нуль градусов будет

любое положение, в котором начинается вращение. Если видеоклип дерева

начинается с дерева, стоящего прямо, то в единичном круге дерево будет ука-

зывать на 90 градусов (12 часов), а свойство при этом составляет

нуль градусов.

Внимание! Во Flash свойство отсчитывается по часовой стрелке, а в единич-

ном круге подразумевается вращение против часовой стрелки. Чтобы естест-

венное вращение Flash лучше соответствовало тригонометрическим функциям,

его можно обратить.

По определению синусом является отношение вертикального катета к гипотенузе но если

длина гипотенузы равна единице = 1), то равно у. Аналогичным образом, косинус,

собой отношение горизонтального катета к х, = 1.

Угол

Рис. 19.2. Моментальный снимок

файла la от разра-

ботчика Хелен

Линии, представляющие синус и косинус, находятся в одном видеоклипе mcSinCos. Их

длина меняется при масштабировании размеров у (синус) и х (косинус) видеоклипа. Изме-

нение длины описывают приведенные ниже строки кода.

=

Множитель 100 необходим из-за того, что свойства _xscale и _yscale являются про-

центными величинами от 0 до 100, тогда как синус и косинус дают результаты от 0 до 1.

Изменение размеров видеоклипа с помощью масштабирования

Обычная формула для задания ширины с помощью косинуса имеет следующий вид:

width = * radius.

В файле la размеры mcSinCos изменяются посредством свойств _xscale и

_yscale, а не и _height. Такой подход требует умножения на 100. Чтобы получить

число 100, необходимо применить выражение radius * 2. Ширина mcRadius составляет

50 пикселей.

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 457

Если бы видеоклип имел размер 100x100 пикселей, то задание его свойства

_xscale было бы аналогично заданию ширины (свойства Например, поскольку 10%

равно то mcSinCos._xscale = означает то же самое, что и

= ю. В этом случае можно использовать традиционную формулу, а пра-

вильным множителем в данном случае будет длина радиуса (50).

Однако фактически клип mcSinCos имеет размеры 50x50 пикселей. Следовательно, свойство

всегда равно половине значения _xscale. mcSinCos._xscale = 10

аналогично mcSinCos = 5. Значит, для задания правильной ширины в обычную фор-

мулу необходимо внести поправку: width = * radius * 2.

Размер по горизонтали (косинус) равен 100%, когда угол составляет 0 радиан, поскольку

cos (0) равен 1. Размер по горизонтали равен 0%, когда угол равен PI/2 радиан

(90 градусов), как cos (Math. равно 0.

Вопросы измерения углов в радианах и градусах будут рассмотрены ниже, во

врезке "Радианы и градусы".

При использовании тригонометрических функций получились ошибочные ре-

зультаты? Обратитесь к разделу "Возможные проблемы" в конце этой главы.

Размер по вертикали равен 0%, когда угол составляет 0 радиан, так как sin ра-

вен Размер по вертикали равен 100%, когда угол составляет радиан

(90 градусов), поскольку sin (Math. равно 1.

Синусоидальная волна, изображенная на рис. 19.2, справа, создана путем дублирования

точки видеоклипа в положении у изменяющегося синуса. Код в обработчике события вход-

ного кадра перемещает каждую точку вправо и удаляет ее, когда достигается определенное по-

ложение

e) {

_parent._x += // перемещение точки вправо

if (_parent._x > { ли точка за указанным

х position?

да, то удалить

Выполняя визуализацию фильмов в единичном круге, вы сможете увидеть, как достига-

ются эффекты, упомянутые в начале данного подраздела.

ИСПОЛЬЗОВАНИЕ ТРИГОНОМЕТРИИ для ПОЛУЧЕНИЯ и ЗАДАНИЯ ШИРИНЫ и высоты

В файле la свойство _rotation видеоклипа используется для создания

эффекта падения дерева, показанного на рис. 19.3. Удлинение тени дерева при падении дос-

тигается за счет использования метода cos, а расстояние вершины дерева от земли

рассчитывается с помощью метода Math. sin.

Падающее дерево представляет собой вращающийся радиус (treeHeight) в программе.

Он является высотой видеоклипа tree (дерево), поскольку отсчет начинается, когда дерево в

рабочем поле расположено вертикально. Тень, которую отбрасывает дерево, является коси-

нусом. Расстояние верхушки дерева от земли при его падении является синусом.

В связи с тем, что речь идет не о единичном круге (treeHeight не равно 1), для получения

косинуса необходимо разделить горизонтальный катет треугольника на радиус (treeHeight),

т.е. когда дерево наклонено на половину расстояния до земли (45 градусов), мы получим:

shadow / treeHeight =

Умножив обе части на длину дерева, получим:

shadow = * treeHeight

458 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Z)

COS

(тень)

Distance

from lop of

to

ground: 82

tree toppler

Рис. 19.3. Использование тригонометрии для удлинения тени и измерения

расстояния от земли

В приведенной ниже строке кода, взятой из файла f la, для задания шири-

ны тени вместо абсолютной величины используется свойство Однако, в

связи с тем, что клип shadow имеет ширину 100 пикселей, задание свойства _xscale

аналогично заданию свойства _width (см. выше врезку "Изменение размеров видеоклипа с

помощью масштабирования"). Кроме того, в приведенном ниже коде величина вращения

преобразуется из градусов в радианы для функции косинуса.

Радианы и градусы

В тригонометрические функции требуют измерения углов в радианах. Если вы предпочи-

таете использовать градусы, необходимо применить функцию, преобразующую градусы в радианы:

= * pi / 180

Теперь вернемся к файлу treeshadow. Чтобы получить косинус вращения падающего

дерева, используется функция

function {

return degrees *

}

В табл. 19.10 приведено несколько примеров измерения вращения в градусах и эквивалент-

ные значения в радианах.

На Число pi (я), представляемое в ActionScript как является отношени-

ем длины окружности к ее диаметру и приблизительно равно 3,14.

Аналогичным образом, синус представляет собой расстояние по вертикали, деленное на

радиус, поэтому можно начать с формулы

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 459

расстояние от / treeHeight =

Умножив обе части на длину дерева, получим:

расстояние от земли = treeHeight *

ТАБЛИЦА 19.10. ГРАДУСЫ и РАДИАНЫ

ГРАДУСЫ РАДИАНЫ

круг (360) 2 *

Половина круга (180) PI

Четверть круга (90) / 2

Восьмая часть круга (45) PI / 4

Для облегчения отображения в файле расстояние округляется. Кроме того, с помощью метода

abs оно преобразовывается в абсолютное значение для того, чтобы компенсировать прису-

щее Flash обратное вращение. И наконец, из полученного значения вычитается что приводит к

округлению до 0 вместо округления до 1 в каждой предельной точке падения дерева.

=

ИСПОЛЬЗОВАНИЕ ТРИГОНОМЕТРИИ для ПОЛУЧЕНИЯ и ЗАДАНИЯ НАПРАВЛЕНИЯ

Чтобы определить, направлено ли оружие на врага, используйте центр вращения оружия в

качестве центра единичного круга, как показано на рис. 19.4.

Начнем с что оружие находится в горизонтальном положении. Будем вращать его,

одновременно проверяя в каждом кадре, равен ли синус вращения разности у между врагом и

оружием:

if == у)

В файле la необходимо было добавить еще несколько действий. Например,

фильм начинается с ненулевого положения оружия. Вращение "обнуляется" путем вычита-

ния исходного вращения перед тем, как вычислить синус:

angle = -

Естественно, выполняется обычное преобразование в радианы:

=

Окончательная проверка будет иметь очень простой вид:

if (sinAngle == yr)

Переменная yr в этом выражении является разностью у между оружием врагом, выра-

женная в единицах

var у = -

var yr = /

Обратите внимание на то, что разность у округляется до одного десятичного знака с по-

мощью метода round

Округление до одного десятичного знака рассматривалось выше, в подразделе

"Метод round

460 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

В файле f la метод sin используется для того, чтобы определить,

когда оружие направлено на врага

Аналогичным образом округляется синус:

И синус, и разность у необходимо округлить, иначе при проверке они из-за мельчайших

несовпадений никогда не будут оценены как равные.

УПРАВЛЕНИЕ РАСПОЛОЖЕНИЕМ с помощью МЕТОДА

С помощью метода sin можно варьировать любое свойство видеоклипа, заменяя

его на переменную у, как в приведенном ниже выражении, представляющем собой общий

формат метода sin

у =

На рис. 19.5 показан результат перемещения бабочки вправо (путем приращения свойства _х

видеоклипа) на одну и ту же величину в каждом кадре при одновременном перемещении бабочки

по вертикали (путем приращения свойства _у видеоклипа) с помощью sin

На рисунке точками показана траектория, пройденная бабочкой. Ниже

показана логика кода, управляющего перемещением бабочки (в виде псевдокода).

(enterFrame) {

if (бабочка еще не достигла цели) {

переместить бабочку на один шаг вправо;

переместить бабочку по вертикали - величина зависит от синуса

}

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 461

Функция синуса проходит один полный цикл (от пика до пика) по мере того, как аргумент х

изменяется от 0 до 360 (традиционно это визуализируется как градусы круга). В данном примере

бабочка проходит одну полную синусоидальную волну путем изменения свойства _х от 0 до 360.

В файле la описанная логика выражена на языке В файл внесены две

корректировки: добавляется переменная "поправка у" (yadj), увеличивающая амплитуду

синусоидальной волны. Без такой корректировки движение бабочки вверх и вниз будет со-

всем незначительным. Кроме здесь используется функция для преобразо-

вания градусов в радианы. Ниже приводится код.

function deg2rad (degrees) // преобразование градусов в радианы {

return degrees *

}

bfly.startx = 0; // начальная точка х

bfly.endx = 360; // конечная точка х

bfly.starty = 112;

bfly._x = // положение бабочки в начале

bfly._y = положение бабочки в начале

= 16; // приращение х для перемещения вправо в каждом кадре

= 8; // поправка у - увеличение амплитуды синусоидальной волны

}

= {

if < bfly.endx) {

+= bfly.xinc; // перемещение бабочки на один шаг вправо

// перемещение бабочки по вертикали; величина зависит от синуса х

bfly. у += * }

Рис. 19.5. С помощью метода sin () можно управлять расположением, скоростью и

вращением, добиваясь естественных, плавных преобразований и эффектов. В данном случае

метод sin управляет положением бабочки по вертикали

462 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

УПРАВЛЕНИЕ СКОРОСТЬЮ с помощью МЕТОДА MATH.SIN()

Функцию синуса можно также применить для того, чтобы добиться плавного, естественного

ускорения или замедления видеоклипа. На рис. 19.6 показано, что произойдет, если вместо пе-

ремещения бабочки вправо на одну и ту же величину в каждом кадре, варьировать приращение с

помощью функции (). Вместо _х = xinc используется выражение

_х xinc + (xadj * sin Сюда входит и поправочная перемен-

ная которая в данном случае установлена равной 8. Эта переменная изменяет величину

ускорения и замедления. При значениях 0 до 180 градусов синус будет положительным, т.е.

перемещение бабочки ускоряется при движении вниз. При значениях от до 360 градусов си-

нус будет отрицательным, т.е. перемещение бабочки замедляется при движении вверх.

Напомним, что во Flash понятие "движение вниз" означает увеличение значения свойства

_у. "Ускорение" означает увеличение величины, прибавляемой к _х в каждом кадре. Таким

образом, при положительном синусе бабочка будет двигаться вниз с ускорением. И наоборот,

при отрицательном синусе бабочка будет двигаться вверх с замедлением. Изменение скоро-

сти отображается в виде расстояний по горизонтали между точками.

Замедление означает, что бабочка находится в радиусе от 180 до 360 градусов в большем

числе кадров, чем она находится при градусах. (На рис. 19.6 каждая точка является ка-

дром. Обратите внимание на то, как много точек во половине пути бабочки.) Таким

образом выражение у += yadj * ) выполняется большее число

раз с отрицательным синусом, чем с положительным, что заставляет бабочку больше двигать-

ся вверх, а не вниз. Этот эффект можно компенсировать, начав с более низкого расположе-

ния, заменив var starty = 175 на var starty = 112. (См. файл на при-

лагаемом к книге компакт-диске.)

Рис, 19.6. Управление скоростью с помощью метода sin перемещении вправо

движение бабочки замедляется

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 463

ДРУГИЕ ТРИГОНОМЕТРИЧЕСКИЕ МЕТОДЫ

Рассмотрим другие тригонометрические методы, выраженные в показателях синуса и ко-

синуса единичного круга. Заменим на sin, а — на cos, при условии, что не рав-

но 1. Угол theta во всех случаях указан в радианах.

Метод арксинуса in) возвращает угол, заданный синусом:

theta =

theta =

Метод арккосинуса (acos) возвращает заданный косинусом:

theta =

theta =

Метод тангенса (tan) возвращает синус, деленный на косинус:

sin/cos =

у / х =

Метод арктангенса (atan) возвращает угол, заданный тангенсом:

theta =

theta =

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

массив чисел не сортируется правильно?

По умолчанию метод sort выполняет сортировку в алфавитном порядке. Если

задан массив чисел, то данный метод преобразовывает числа в строки, а затем сортирует их в

алфавитном порядке. В соответствии с этой процедурой 2 будет "больше", чем 10 000.

Чтобы отсортировать такой массив по числам, в качестве аргумента метода

sort необходимо задать функцию сравнения. Приведенный ниже пример демонст-

рирует сортировку от наименьших чисел до наибольших.

=

function (a, b) {

return a - b;

}

//

Принципы работы функций сортировки рассматривались выше, в подразделе

"Методы sort и sortOn

Почему моя тригонометрическая функция "сходит

Одна из самых распространенных причин, по которой тригонометрические дают

совершенно неожиданные результаты, заключается в том, что вы забываете преобразовать

градусы в радианы. Хотя во Flash свойство (вращение) измеряется в градусах, все

тригонометрические функции Flash чтобы углы измерялись в радианах.

Вопросы измерения углов в радианах и в градусах обсуждались ранее, во

врезке "Радианы и градусы".

464 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

FLASH ЗА РАБОТОЙ: УДИВИТЕЛЬНЫЕ МАССИВЫ

Массивы позволяют выполнять совершенно невероятные вещи. Например, в содержа-

щемся на компакт-диске файле f la показано, что вы можете разбить изо-

бражение на 64 маленьких кусочка, перемешать их на экране, а затем сложить обратно, по-

добно тому, как в идеальном порядке приземляется на землю стая птиц.

"Это одна из моих самых старых демонстраций Flash", — говорит Фотиос Бассайаннис

(Fotios Bassayiannis), Flash-разработчик греческого происхождения, живущий в Глазго

"Мой рисунок разбит на 64 маленьких кусочка. Каждому кусочку присвоен индекс от О

до 64, начиная с левого верхнего угла и заканчивая правым нижним углом фотографии. Каж-

дый раз при нажатии кнопки кусочкам задается случайное исходного размещение. Далее они

стараются достичь своих координат назначения".

Программа рассчитывает координаты назначения кусочка на основе его индекса и поло-

жения целого изображения.

В данном примере мы не будем приводить построчное объяснение кода, а только попытаемся

представить себе, как можно отслеживать все эти маленькие единицы информации без массивов!

У нас есть массив pic, содержащий 64 имени экземпляров видеоклипов.

Исходным значениям х и у каждого "среза" фотографии (т.е. каждого ее кусочка) соответ-

ствуют массивы тахХ и

Кроме того, имеются два "граничных" массива, и для ограничения пе-

ремещений каждого среза в направлениях х и у, т.е. граничные массивы содержат конечные

координаты х и у каждого среза.

Манипуляция массивом осуществляется посредством простых циклов и оператора

присваивания. Это трио является одной из наиболее мощных комбинаций

Для инициализации массивов используется следующий код:

for (i = i < 65; )

{

= +

= + 100; всех срезов в случай-

ном порядке

maxY[i] = random(340) + 100;

setProperty ( Pic[i], _x, maxX[i] }

setProperty ( y,

}

Ниже приведен код, определяющий предельные значения координат х и у каждого среза

фотографии.

for (i 1; i< 65;

= i %

= /

if (XmatrixPos == 0) XmatrixPos = 8;

if (YmatrixPos == 0) YmatrixPos =

= XmatrixPos * по оси х

= YmatrixPos * по оси у

}

Предельные значения являются координатами точки, в которой должен оказаться каждый

срез. Цикл определяет положение матрицы среза путем деления ее порядкового номера

(слева направо и для всех строк) на число срезов по осям х и у.

Приведенное ниже пояснение поможет вам еще больше расчленить программу, если вас

она заинтересовала. Фильм f la состоит из трех кадров, но первый из них

ГЛАВА 19. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ БАЗОВЫХ ОБЪЕКТОВ 465

является настроечным. После этого фильм циклически выполняется в кадрах 2 и 3, которые

содержат идентичный код.

В кадре 1 создаются все массивы, а также ряд переменных. Кроме того, программа выяс-

няет, к чему относится каждый срез ("положение матрицы среза", переменные XmatrixPos

и YmatrixPos), на основе его индекса (1-64). Этот цикл располагается внизу кадра 1.

Во время циклического выполнения фильма в кадрах 2 и 3 каждый фрагмент фотографии

должен перемещаться к своей точке назначения (и в направлении х, и в направлении у) или

оставаться на месте, если он уже достиг этой

Не все фрагменты достигают своих точек назначения в одно и то же время. Чем ближе к

точке назначения они находятся, тем медленнее они движутся. (Значения приращения х и у

изменяются для каждого из кусочков по мере его приближения к конечным координатам х

и у.) Значение приращения по оси х и у для каждого фрагмента в каждом кадре рассчитыва-

ется отдельно и временно хранится в переменных incX и

Каждый раз, когда фрагмент движется в направлении х или у, программа устанавливает

переменную change в значение true. При каждом выполнении кадра начальным значением

переменной change является Если в конце выполнения кадра ее значением останет-

ся это означает, что все фрагменты находятся на своих местах. В этом случае фильм

останавливается посредством действия stop и ожидает, когда пользователь нажмет кноп-

ку. Если переменная change установлена в значение true, это что хотя бы один

фрагмент находится не на своем месте и фильм останавливаться не должен.

466 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ГЛАВА

ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ

ОБЪЕКТОВ ФИЛЬМОВ

В ЭТОЙ

Объекты и классы, связанные с фильмами 467

Возможные проблемы

Flash за работой: полная автоматизация игры в крестики-нолики с помощью

класса Local Connect ion 512

ОБЪЕКТЫ и КЛАССЫ, СВЯЗАННЫЕ с ФИЛЬМАМИ

В определен ряд объектов, разработанных специально для создания Web-

анимации. Тринадцать таких объектов относятся к категории Movie. В инструментальном

списке панели Actions (Действия) программы Flash MX (в левой части панели) они находятся

в папке Movie (Фильм) категории Objects (Объекты). Вот список этих 13 объектов:

Accessibility, Button, Color, Key, Mouse, MovieClip,

Selection, Sound, Stage, System, И

Это — специфические для Flash объекты, не определенные стандартом ЕСМА-262 и не

реализованные в JavaScript. Тем не менее к ним относятся наиболее распространенные клас-

сы ActionScript, такие MovieClip, TextField и TextFormat.

I Классы TextField и TextFormat рассматриваются далее в этой главе.

Кроме того, ниже рассмотрен ряд объектов, которые в первоначальной версии Flash MX

были недокументированными. Это объекты Camera, LocalConnection, Microphone,

Video, а также еще два объекта и связанные с Flash

Communication Server.

Все классы и объекты, рассмотренные в этой главе, перечислены в табл.

ТАБЛИЦА 20.1. ОБЪЕКТЫ, СВЯЗАННЫЕ с ФИЛЬМАМИ

ОБЪЕКТ ОПИСАНИЕ ОДНОЭЛЕМЕНТНОЕ МНОЖЕСТВО

или КОНСТРУКТОР

ГЛАВА

Accessibility (н)

Button (н)

Camera (н)

Color

Key (H)

(н)

Microphone (н)

Mouse

MovieClip

NetConnection (н)

Netstream (н)

Selection

Sound

Stage (н)

System (н)

Text Format (н)

Video (н)

Программа считывания с

рана

Кнопки на экране

Видеокамеры (Web-камеры)

Системные характеристики

компьютера, использующиеся

с объектом System

Цвета

Нажатия

Локальная связь между

фильмами

Микрофоны

Курсор мыши и щелчки ею

Видеоклип

Связь с Flash Communication

Server

Канал связи с Flash

Communication Server

Правка выделенного текста и

фокуса

Звук/музыка

Рабочее поле

Компьютерная система

Текстовые поля

Форматирование текста в

текстовом поле

Источник видео в реальном

времени

Одноэлементное множество 20

Конструктор {*)

Конструктор

Конструктор

Конструктор (*)

Конструктор

Конструктор

Конструктор

16,

17

Одноэлементное множество 20

Одноэлементное множество 20

20

Одноэлементное множество 16,

20

20

Одноэлементное множество 20

Одноэлементное множество 16,

20

17

20

20

Одноэлементное множество 20

Конструктор 20

Одноэлементное множество 20

Одноэлементное множество 20

Конструктор 20

Конструктор 20

20

(н) — новый во Flash MX;

— "неконструктивный конструктор; нельзя создавать новые экземпляры с помощью слова new.

468 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ОБЪЕКТ ACCESSIBILITY

Объект Accessibility (Доступность) реализует возможность Rash-плейера сделать

Flash-фильмы доступными для людей с ослабленным зрением. Эта возможность реали-

зуется за счет программы считывания информации с экрана, которая

функцию Microsoft Active Accessibility (MSAA). Эта программа интерпретирует текст и

другие определенные элементы, отображающиеся на экране, и громко зачитывает их. В настоящее

время наиболее популярной программой считывания информации с экрана, поддерживающей функ-

цию Active Accessibility, является продукт от компании GW Micro.

Объект Accessibility имеет только одно документированное метод

isActive который проверяет, является ли активной программа считывания информации

с экрана, совместимая с MSAA. На основе этой информации в фильм можно зафузить более

доступный интерфейс или перенаправить пользователя на специальный узел.

После зафузки фильма необходимо подождать несколько секунд и только затем активи-

зировать метод isActive В противном случае метод может вернуть значение даже

несмотря на то, что профамма считывания является активной.

Чтобы определить, поддерживает ли система MSAA (независимо от того, активна ли про-

фамма считывания в данный момент), можно использовать свойство

lities

Вопросы доступности будут подробно рассмотрены в приложении А.

КЛАСС BUTTON

Класс Button (Кнопка) является новым во Flash MX. Естественно, кнопки были

и в предыдущих версиях программы, но они не относились к системе классов.

Данный класс позволяет, к примеру, образом определить, является

ли объект кнопкой:

(typeof == "object" ) && ==

// сделать что-то с объектом

Подробная информация об использовании свойства конструктора для опреде-

ления класса объекта приведена в главе 19 "Использование встроенных

базовых объектов".

Еще одним нововведением Rash MX являются имена экземпляров кнопок.

Функция-конструктор Button является "неконструктивной". Кнопки создаются

вручную или с помощью метода (Однако аргумент

метода с кнопками не работает.)

Методики создания кнопок аналогичны методикам создания

которые рассматривались в главе 17 "Демонстрация мощи

видеоклипов".

Класс Button имеет только один метод, getDepth который возвращает пока-

затель глубины экземпляра кнопки.

Подробная информация о показателях глубины приведена в главе 17

"Демонстрация мощи видеоклипов".

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 469

Класс Button имеет пять свойств (enabled, tabEnabled, и

useHandCursor) и девять событий (onPress, onRelease, onReleaseOutside, onRollover,

onRollOut, И onSetFocus).

События, связанные с кнопками, были рассмотрены в главе 16 "Взаимодействие,

события и установление последовательности". Кнопки имеют такие же свойства,

как и те, что описаны в главе 17 Демонстрация мощи видеоклипов".

ОБЪЕКТ

Объект capabilities является единственным документированным свойством од-

ноэлементного множества System. Объект capabilities имеет

тированных и 7 недокументированных свойств, представляющих характеристики сис-

темы, в которой выполняется Flash-плейер. В табл. 20.2 перечислены эти свойства, на-

чиная с документированных (с language свойства являются недокументированными).

Все свойства объекта capabil ities предназначены только для чтения. Несмотря

на то что их можно задавать и/или изменять, как правило, они не выполняют никаких задач.

В свойстве serverString все системные характеристики сведены в одну строку, кото-

рую можно передать на сервер связи или приложения. Эта строка (несмотря на то, что в таб-

лице она разбита) является единой и именно в таком виде передается на сервер.

КЛАСС COLOR

Каждый экземпляр класса Color программным образом управляет цветом и прозрачно-

стью определенного видеоклипа или основного фильма. Изменения цветов можно использо-

вать для моделирования различных условий. Например, постепенное затемнение цвета всего

фильма имитирует наступление ночи, а добавив желтый и белый цвет, вы можете на темном

фоне выделить какой-то объект. Коэффициент прозрачности можно использовать для посте-

пенного появления и исчезновения изображения, а также для моделирования чего-то полу-

прозрачного, подобного вуали.

Во цвет имеет четыре компонента: красный, зеленый, синий и прозрачность.

В существуют два способа работы с цветом.

• Задание или получение нового цвета путем замены существующего цвета без измене-

ния прозрачности. С этой целью используются методы setRGB и getRGB

• Использование метода для модификации существующего цвета ли-

бо применение метода для определения, каким образом цвет пре-

образуется в данный момент. При таком подходе помимо цвета можно задавать и по-

лучать коэффициент прозрачности.

В любом случае сначала необходимо создать объект цвета для определенного видеоклипа.

Эта операция выполняется с использованием имени экземпляра целевого видеоклипа в каче-

стве строкового параметра в предложении new:

myColor new

МЕТОДЫ и

Задать цвет видеоклипа можно с помощью метода setRGB и шестиразрядного шестна-

дцатеричного числа, представляющего собой три пары разрядов для значений красного, зе-

леного и синего цветов соответственно. Ниже приведено несколько примеров.

470 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

// устанавливает красный цвет клипа

// устанавливает зеленый цвет клипа myColor

// устанавливает синий цвет клипа myColor

ТАБЛИЦА 20.2. СВОЙСТВА ОБЪЕКТА

Свойство ОПИСАНИЕ ПРИМЕР КОММЕНТАРИЙ

pixelAspectRatio

language

OS

serverString

isDebugger

version

Имеет аудио- характеристики

Может воспроизводить

Имеет аудиокодер

Имеет видеокодер

Получает разрешение экрана

по горизонтали (в пикселях)

Получает разрешение экрана

по вертикали (в пикселях)

Получает число точек на

дюйм экрана в пикселях

Получает цветовую харак-

теристику экрана: цветной,

черно-белый или серый

Получает соотношение

размеров в пикселях

Поддержка функции

доступности

Получает язык

Получает операционную

систему

Получает входное устройство

Получает в виде строки

данные о производителе

Получает строку для пере-

дачи на сервер

Является ли активным от-

ладчик

Получает версию Flash-

плейера

true

true

true

true

1024

768

72

color

false

en

Windows 2000

point

Macromedia Windows

true

WIN 6,0,21,0

Английский

Мышь

Подробная информация о шестнадцатеричном представлении приведена ниже,

во врезке "Значения RGB и шестнадцатеричное представление".

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 471

Значения RGB и шестнадцатеричное представление

В представлении (по основанию 16) используется 16 нумералов: 3,

4, 5, 6, 7, 8, А, В, С, D, E, F. Таким образом, F соответствует 15.

В десятичном представлении, т.е. по основанию 10, разряды справа налево возрастают соот-

ветственно степени числа и т.д. Каждый разряд в 10 раз больше разряда справа

от него. В системе разряды возрастают соответственно степени числа

и т.д. Каждый разряд в 16 раз больше разряда справа от него.

Значения RGB (система цветопередачи связанные с объектом

Color, можно рассматривать как три двухразрядных числа, каждое из ко-

торых представляет 256 значений, О 255. Итоговому шестиразрядному шестнадцатерич-

ному числу предшествуют символы Ох, указывающие на шестнадцатеричное представление.

Результат будет иметь такой формат:

OxRRGGBB

где RR представляет собой двухразрядное шестнадцатеричное число, обозначающее красный

цвет; GG — двухразрядное шестнадцатеричное число, обозначающее зеленый цвет; ВВ GG —

двухразрядное шестнадцатеричное число, обозначающее синий цвет.

Web-разработчики знакомы с числами по синтаксису HTML, по-

добному приведенному ниже.

<BODY

Во Flash палитра цветов заливки (обозначенная пиктограммой с изображением ковша с

краской в разделе Colors (Цвета) на панели инструментов) позволяет легко определить шест-

значения многих цветов. Щелкните на палитре цветов заливки, а затем про-

ведите инструментом Eyedropper (Пипетка) по нескольким цветам. При этом в поле ввода

данных, расположенном в верхней части панели, будет отображено шестнадцатеричное зна-

чение соответствующего цвета.

Метод getRGB возвращает текущий назначенный цвет. Например, этот метод можно

использовать для сравнения цветов, хранящихся в двух экземплярах класса Color.

Метод getRGB возвращает цвет в виде десятичного числа. Чтобы преобразовать его в

шестнадцатеричное число, воспользуйтесь методом toString класса Number, как показа-

но ниже.

hexColor =

МЕТОДЫ И

Метод позволяет преобразовывать все цвета и коэффициенты прозрачно-

сти заданного видеоклипа. Например, если есть видеоклип, в котором содержится 100 других

клипов различных цветов, то с помощью метода О одной операцией можно

удалить из всех клипов немного красного цвета и добавить немного синего. В отличие от этого

метода, с помощью метода setRGB все видеоклипы можно было бы только установить в один

цвет. Метод setTransf orm наиболее полезен для внесения изменений в растровые изобра-

жения, содержащие много цветов, которые нельзя изменять индивидуально. Метод

() позволяет вносить малейшие изменения, почти такие же, как вносятся по-

средством панели Advanced Effect (Расширенный эффект). (На панели инспектора свойств в

поле Color выберите опцию Advanced, а затем щелкните на кнопке Settings

472 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Прежде использовать методы и , необходимо

создать объект преобразования, имеющий восемь свойств, соответствующих восьми полям

ввода данных панели Advanced Effect.

И панель Advanced и объект преобразования содержат четыре пары чисел, соот-

ветствующих красному, зеленому и синему цветам и прозрачности. Первое число каждой па-

ры, процент преобразования, является целым числом в диапазоне до 100, которое слу-

жит процентным множителем существующего цвета. Второе число каждой пары, сдвиг, явля-

ется целым числом в диапазоне от до 255 и представляет собой значение цвета. Вы берете

результат процентного умножения и добавляете к нему значение сдвига цвета. В виде равен-

ства это выглядит следующим образом:

newColor = ( x transformationPercentage ) + offset

Это равенство фактически показано в каждой из четырех строк панели Advanced Effect.

Множителями процентного преобразования являются да, Ьа и аа соответственно для

красного, зеленого, синего цветов и прозрачности.

Значениями сдвига цвета являются rb, gb, bb и ab соответственно для красного, зелено-

го, синего цветов и прозрачности.

В приведенной ниже строке кода создается объект преобразования с помощью литерала

объекта:

=

После создания объекта преобразования его можно применить к любому экземпляру

класса Color следующим образом:

Цвет видеоклипа соответствует изменениям myColor.

Несколько операций не являются накопительными. Каждое преобра-

зование выполняется применительно к исходным значениям цветов, назначенных в процессе

разработки или с помощью прикладного программного интерфейса рисования.

Метод orm возвращает копию текущего объекта преобразования — набор,

использовавшийся при выполнении последнего метода setTransf orm

ОБЪЕКТ KEY

Объект Key (Клавиша) представляет ввод данных пользователем с клавиатуры. Во

Flash MX в этой области внесены существенные усовершенствования, а именно — приемни-

ки. Приемники, доступные для событий onKeyDown и onKeyUp, означают, что все нажатия

клавиш можно охватить без необходимости проверки нажатия клавиши в каждом кадре. Вме-

сто этого можно зарегистрировать объект для приема уведомления о событии при нажатии

клавиши. Эта процедура требует меньшей нагрузки на процессор. Проверка каждого кадра

посредством события кнопки или событий видеоклипов

onClipEvent (keyDown) либо onClipEvent может дать меньшее время отклика.

Объект Key имеет всего четыре метода: и

Описание четырех методов объекта Key и примеры использования методов

класса Key с приемниками и без них приведены в главе 16 "Взаимодействие,

события и установление последовательности", там же описывается событие

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 473

Восемнадцать констант, таких как Key и Key. TAB, позволяют ссылаться на

часто используемые клавиши без указания их числовых кодов. Например:

if {

// затем выполните операции

Листинги методов и константы, связанные с объектом Key, приведены в табл. 20.3.

ТАБЛИЦА 20.3. МЕТОДЫ и КОНСТАНТЫ ОБЪЕКТА KEY

Имя ФОРМАТ

свойство/

СОБЫТИЕ

ОПИСАНИЕ

Метод

Метод

Метод

Метод

Метод

символа)

(код символа)

Listener

Метод

(myObject)

СВОЙСТВО BACKS

СВОЙСТВО

СВОЙСТВО

Регистрирует объект myObj ect

для получения об ак-

тивизации методов и

onKeyUp

Возвращает значение ASCII по-

следней нажатой клавиши

Возвращает код последней нажа-

той клавиши

Возвращает значение true, если

пользователь нажимает клавишу,

кодом которой является

ола

Возвращает значение true, если

клавиша, кодом которой является

является активной.

На компьютерах PC

клавиши <Caps

клавиши <Num

— а

клавиши — Для

клавиши <Caps можно ис-

пользовать константу

Если объект ранее был

зарегистрирован с помощью мето-

да addListener, то этот

объект удаляется из списка при-

емников

Константа, соответствующая зна-

чению кода клавиши

Константа, соответствующая зна-

чению кода клавиши <Caps

Константа, соответствующая зна-

чению кода клавиши

474 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 20.3

Имя

свойство/

СОБЫТИЕ

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Свойство

Событие

Событие

ФОРМАТ

Key.DELETEKEY

myObj

= f unction ()

=

ОПИСАНИЕ

Константа, соответствующая зна-

чению кода клавиши <Delete> (46)

Константа, соответствующая зна-

чению кода клавиши (40)

Константа, соответствующая зна-

чению кода клавиши <End> (35)

Константа, соответствующая зна-

чению кода клавиши <Enter> (13)

Константа, соответствующая зна-

чению кода клавиши

<Escape> (27)

Константа, соответствующая зна-

чению кода клавиши <Ноте> (36)

Константа, соответствующая зна-

чению кода клавиши (45)

Константа, соответствующая зна-

чению кода клавиши (37)

Константа, соответствующая зна-

чению кода клавиши <Раде

Down>

Константа, соответствующая зна-

чению кода клавиши <Раде

Константа, соответствующая зна-

чению кода клавиши

Константа, соответствующая зна-

чению кода клавиши (16)

Константа, соответствующая зна-

чению кода клавиши

<Пробел> (32)

Константа, соответствующая зна-

чению кода клавиши <ТаЬ> (9)

Константа, соответствующая зна-

чению кода клавиши <Т> (40)

Запускается при нажатии клавиши

Запускается при отпускании кла-

виши

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 475

Для определения кода определенной клавиши с помощью приведенного ниже фрагмента

программы можно создать специальный тестер (он содержится на компакт-диске в файле

la).

1, 50, 100,

= "kc";

= function О {

kc = :

При нажатии клавиши ее числовой код будет отображен в текстовом поле.

Если вы хотите протестировать коды клавиш в среде разработки, то при воспроизведении

фильма выполните команду Disable Keyboard Shortcuts

комбинации клавиш). Это позволит приведенному выше коду охватывать такие клавиши, как

<Backspace> и которые обычно "захватываются" функцией комбинаций клавиш.

ОБЪЕКТ MOUSE

Объект Mouse (Мышь) представляет ввод данных пользователем посредством мыши. По-

добно объекту Key, объект Mouse во Flash MX усовершенствован благодаря приемникам

onMouseMove, onMouseDown и onMouseUp.

События и приемники, связанные с мышью, были описаны в главе 16

"Взаимодействие, события и установление последовательности".

Помимо описанных в главе 16 события и установление последовательности"

возможностей, связанных с событиями, объект Mouse имеет два метода: show О и hide Метод

hide позволяет скрыть стандартный курсор мыши и заменить его пользовательским курсором.

Предположим, что вы хотите, чтобы курсор принял вид волшебной палочки. Создайте

клип, содержащий графическое изображение волшебной палочки. Если именем экземпляра

этого клипа является magicWand, код будет выглядеть следующим образом:

= function () {

=

=

}

Чтобы вернуться к стандартному виду курсора, воспользуйтесь таким кодом:

= false;

ОБЪЕКТ SELECTION

Объект Selection (Выделение) управляет редактированием выделенного текста и фоку-

сировкой. В этой области во Flash MX внесены два усовершенствования: приемники и имена

экземпляров кнопок и текстовых полей.

Приемники и события объекта selection описаны в главе 16 "Взаимодействие,

события и установление последовательности", там же приведена подробная

информация о выборе и фокусировке.

476 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Помимо возможностей, связанных с событиями, объект Selection имеет три метода,

связанных с выделенным в данный момент текстом (с диапазоном выделения). Каждый из этих

методов возвращает в выделенный текст индекс. Индекс отсчитывается от нуля. Это означа-

ет, что первым положением будет 0, вторым положением — 1 и т.д.

Метод возвращает индекс начала диапазона выделения. Метод

возвращает индекс конца диапазона выделения.

В обоих случаях, если метод не находит достоверный индекс (например, в связи с тем, что

в данный момент нет активного диапазона выделения), он возвращает значение

Метод возвращает индекс положения мигающего курсора. Если ми-

гающий курсор не отображен, метод возвращает значение -1.

Например, чтобы выяснить, находится ли курсор в конце выделенного текстового поля,

воспользуйтесь таким кодом:

if ( == )

// выполните какие-то операции

КЛАСС SOUND

Класс Sound (Звук) представляет звуки: музыку, звуковые эффекты или речь. Звуковые

возможности можно разделить на пять основных категорий: создание звукового объекта, за-

грузка звуков, получение данных о звуке, управление звуками и использование событий, свя-

со звуком.

События, связанные со звуком, описаны в главе 16 "Взаимодействие, события

и установление последовательности". В этой главе будет рассмотрено

несколько примеров их использования.

СОЗДАНИЕ ОБЪЕКТА SOUND

Новый объект Sound можно создать двумя способами. При одном из них создается звуковой объ-

ект, который будет управлять всеми звуками фильма. При другом создается звуковой объект, который

управляет звуками определенного видеоклипа. Данные способы проиллюстрированы ниже.

allSounds = new Sound О; // управляет всеми звуками фильма

= new // управляет звуками видеоклипа

ЗАГРУЗКА и ПРИСОЕДИНЕНИЕ ЗВУКОВ

Звуки можно присоединить из библиотеки или загрузить внешние

Третья возможность заключается в присоединении звукового потока с помощью

Возможность загрузки внешних звуковых файлов является нововведением Flash MX и при-

менима только к МРЗ-файлам. Присоединение звуков из библиотеки приводит к увеличению

размеров SWF-файлов и, следовательно, к увеличению первоначальной задержки. Однако

присоединенные звуки при выполнении метода start О начнут воспроизводиться

практически немедленно. Загрузка внешних звуков затрудняет но позволяет

сэкономить на размере SWF-файла.

Flash MX поддерживает разные типы сжатия: МРЗ, Raw и Speech. Это может по-

влиять и на синхронизацию. Чтобы изменить сжатие звука или увидеть, насколько большим

будет звуковой файл, воспользуйтесь диалоговым окном Sound Properties (Свойства звука).

Диалоговое окно Sound Properties описано в главе 8 "Использование звука"

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 477

Внешние загружают с помощью метода следующим образом:

Первый параметр, которым является имя подлежащего загрузке звукового файла, указы-

вается в виде URL. Ниже приведен пример указания полного пути к локальному файлу

Указание имени файла в виде имени домена:

Указание имени файла в виде IP-адреса:

Второй параметр, передаваемый методу loadSound определяет, загружается ли звук в виде

потока (значение true или 1) или в виде события, связанного со звуком (значение или 0).

Воспроизведение потокового звука начинается, как только в буфере Flash-плейера будет

количество данных, достаточное для воспроизведения звукового файла в течение

определенного количества секунд, указанных в свойстве time (по умолчанию —

5 секунд). Это время можно изменить следующим образом:

= 15; // в буфере содержится звук, достаточный для

// воспроизведения в течение 15 секунд

Событийный звук не начнет воспроизводиться до полного завершения загрузки.

При работе с потоковым звуком не нужно указывать момент начала его воспроизведе-

ния — это происходит автоматически. Так, приведенные ниже две строки кода временной

шкалы начнут воспроизведение звука.

mySound = new

( true // потоковый звук

С другой стороны, для начала воспроизведения событийного звука требуется явное обра-

щение к методу start Поскольку событийный звук не начнет воспроизводиться до пол-

ного завершения загрузки, то обычный подход заключается в помещении метода start () в

обработчик события onLoad. Этот обработчик будет активизироваться при полной загрузке

звука, инициируя исполнение метода как показано ниже.

mySound = new

= () {

( 0 // событийный звук

Обработчик события onLoad необходимо определить до загрузки звука.

Обработчик события onLoad активизируется и в том случае, когда звук не смог загрузить-

ся. Для выполнения проверки на наличие сбоя используйте параметр, передаваемый в функ-

цию обратного вызова onLoad. Этот параметр является булевой величиной, которая при ус-

пешном выполнении имеет значение true, а при сбое — Например:

function (success) {

if (success) {

()

else {// здесь обработать ошибку

478 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Звуки из библиотеки присоединяют с помощью метода следующим образом:

Единственным параметром метода attachSound О является идентификатор связи зву-

кового файла в библиотеке. Чтобы начать воспроизведение присоединенного звука, необхо-

димо выполнить метод start

Есть еще и третий потенциальный источник который может быть связан

со звуковым объектом. Это потоковое аудио в реальном масштабе времени, происходящее

либо из локального источника, такого как микрофон, либо из Flash Communication Server.

Ниже приведен пример полной рабочей программы, в которой создается видеоклип

(строка 1), назначается поток звука из локального микрофона в переменную (строка 2), поток

звука присоединяется к видеоклипу (строка 3), создается звуковой объект, управляющий

всеми звуками видеоклипа (строка 4). Затем звуковой объект используется для установки

громкости звука в значение О, т.е. звук полностью заглушается (строка 5).

1:

2: inputMic = О; // захват потока звука

присоединение потока звука к видеоклипу

mySound = new // управление всеми звуками в видеоклипе "aud"

5: // обнуление громкости звука

Возникли проблемы при воспроизведении звука, загруженного с помощью ме-

тода ()? Обратитесь к разделу "Возможные пробле-

мы" в конце этой главы.

УПРАВЛЕНИЕ ЗВУКОМ

Вы можете управлять звуком, а именно: начинать и заканчивать его воспроизведение, ре-

гулировать звук, баланс динамиков и разделение на стереоканалы.

Перед началом воспроизведения звука можно указать точку начала воспроизведения зву-

кового файла (в секундах).

Есть еще и второй, опциональный параметр, который указывает количество циклов вос-

произведения файла.

Метод start имеет такой формат:

В приведенном ниже примере звук начинается через 1 секунду и воспроизводится раз.

Параметр сдвига не вызывает задержку — Flash-плейер просто пропускает ко-

личество звука.

Событие не будет активизировано до тех пор, пока звук не закончит

циклически воспроизводиться указанное количество раз.

Метод stop {) имеет два формата. При выполнении без параметров он останавливает все

звуки, которыми управляет определенный звуковой объект. Например:

// остановка всех звуков, которыми управляет объект mySound

Звуки, находящиеся под управлением определенного звукового объекта, определяются в

зависимости от того, как был создан этот объект. Например:

mySound = new // управляет всеми звуками фильма

// останавливает все звуки фильма

mySound = new // управляет всеми звуками видеоклипа

// останавливает все звуки видеоклипа "mcl"

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 479

Ранее в этой главе, в подразделе "Создание объекта Sound", говорилось о

том, что звуковой объект может управлять либо всеми звуками фильма, либо

только звуками определенного видеоклипа.

Для остановки всех звуков фильма можно также воспользоваться глобальной функцией

Метод stop имеет опциональный параметр, который используется только для звуков,

присоединенных с помощью метода Этим параметром является тот же

идентификатор связи, который первоначально использовался для присоединения звука:

При использовании метода stop с параметром идентификатора связи звуковой объект,

к которому применяется метод не обязательно должен быть тем же самым объектом,

к которому присоединен звук (в предыдущем примере это был объект mySound). Однако он

должен быть объектом, который управляет теми же звуками, что и объект mySound. Так, в

приведенном ниже примере объекты globalSoundl и управляют всеми зву-

ками фильма. Следовательно, объект можно использовать для остановки

звука, присоединенного к объекту

globalSoundl = new Sound О;

globalSound2 = new

= {

}

\

Та же самая схема используется и в том случае, когда оба звуковых объекта управляют

звуками одного и того же видеоклипа.

Громкость устанавливается с помощью метода который в качестве пара-

метра принимает число в диапазоне от 0 до 100 включительно. По умолчанию используется

значение 100. Например, в приведенной ниже строке устанавливается громкость звука, рав-

ная половине полной возможной громкости.

Баланс динамиков, т.е. относительная громкость каждого динамика, регулируется по-

мощью метода setPan Этот метод принимает один аргумент — число в диапазоне от -100

до 100 включительно. Если параметр отрицательный, то эта величина вычитается из значения

громкости правого динамика, тогда как громкость левого динамика остается максимально

возможной. Таким образом, выражение mySound. setPan означает, что левый дина-

мик будет работать с максимальной громкостью, а громкость правого динамика будет равна

половине максимальной. Аналогичным если параметр положительный, то соответ-

ствующее число вычитается из значения громкости левого динамика, тогда как громкость

правого динамика остается максимально возможной. Таким образом, выражение

mySound. setPan означает, что правый динамик будет работать с максимальной гром-

костью, а громкость левого будет равна 75% от максимальной.

Максимальная громкость равна либо 100, либо любому другому значению, заданному по-

средством метода setVolume Таким образом, если с помощью выражения, подобного

mySound. setVolume установить максимальное значение громкости, равное 0, то мето-

480 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

setPan и setTransf orm не будут выполнять никаких полезных действий: звук во-

обще не будет слышен. Например:

// левый динамик отключен, а правый работает с

// максимальной громкостью

При работе со стереозвуком и использовании метода setPan весь звук левого динами-

ка представляет собой левый стереоканал, а весь звук правого динамика — правый стереока-

нал. Разделением звука на стереоканалы управляют с помощью метода setTransf orm

Для применения этого метода сначала необходимо создать объект с четырьмя свойствами:

11, lr, и В каждом свойстве содержится число от 0 до 100 включительно. Первая буква

имени свойства указывает, какой динамик регулирует данное свойство. Вторая буква указы-

вает, какой стереоканал регулирует данное свойство. Таким образом, свойство 11 регулирует

левый динамик и левый канал; свойство — левый динамик и правый канал и т.д.

В приведенном ниже примере показано создание объекта преобразования звука с помощью

литерала объекта. Объект преобразования звука, будучи примененным к звуковому объекту,

полностью подавит левый динамик, а в правый динамик направит 100% звука левого и правого

каналов. Этого эффекта невозможно достичь с помощью метода setPan который никогда не

помещает левый канал в правый динамик.

= { 11 : 0 , lr : 0 , rl : 100 , : 100

Объект преобразования звука применяется к звуковому объекту следующим образом:

ПОЛУЧЕНИЕ ДАННЫХ о ЗВУКЕ

Можно контролировать ход загрузки звука, определить, когда завершилось воспроизведе-

ние звука, а также проверить баланс динамиков и разделение на стереоканалы. Кроме того,

можно выяснить, какова длительность звука и какая его часть уже была воспроизведена.

Контроль хода загрузки звука осуществляется посредством метода

Скомбинировав его с методом можно

определить, какой процент звука был загружен:

percentLoaded = / * 100;

В приведенном примере с помощью переменной percentLoaded можно определить размеры

полосы хода выполнения загрузки, обеспечивая наглядное представление об этом процессе.

Предназначенные только для чтения свойства duration и position звукового

объекта указывают соответственно длительность звука и воспроизведения (в

миллисекундах). Оба свойства являются свойствами получения/задания, поэтому

ни с одним из них нельзя использовать метод В приведенном

ниже примере переменную percentPlayed можно использовать для реализации полосы

воспроизведения звука.

percentPlayed = / * 100;

ОБЪЕКТ STAGE

Объект Stage (Рабочее поле) является новым во Flash MX Одно из его основных назначе-

ний заключается в том, чтобы разрешить другим объектам принимать

Обработчик как правило, используется для

корректировки размеров или компоновки фильма для соответствия новому размеру

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 481

Подробная информация о событии приведена в главе 16

"Взаимодействие, события и установление последовательности".

Объект Stage имеет пять свойств, два из которых предназначены только для чтения.

• height. Указывает высоту в пикселях (только для чтения).

• width. Указывает ширину в пикселях (только для чтения).

• showMenu. Определяет, располагается ли в верхней части отдельного Flash-плейера

панель меню

• align. Строковое свойство, определяющее выравнивание графического содержимого

в рабочем поле. Свойство может принимать восемь значений: по верху и левому краю

по верху (Т), по верху и правому краю (TR), по левому краю (L), по правому краю

(R), по низу и левому краю (BL), по низу (в), по низу и правому краю (BR).

Визуально значения выравнивания будут выглядеть так:

TL T TR

L R

BL В BR

Например:

= // выравнивание по низу и по середине

Интерпретирующая программа очень снисходительно относится к посто-

ронним элементам, указанным в строке. Она просто ищет первую из подходящих

строк, как в следующем примере:

= // устанавливает в значение "В"

Если в указанной пользователем строке не находится ни одного подходящего элемен-

та, то выравнивание объекта Stage задается полностью по центру (в приведенной

выше текстовой "диаграмме" это пустое место по середине схемы), а свойство

устанавливается равным пустой строке. Например:

= // выравнивание полностью по центру

• Указывает режим масштабирования Flash-фильма в пределах рабочего

поля. Это строковое свойство имеет четыре допустимых значения:

Например:

= "noScale";

В отдельном Flash-плейере (и в среде разработки) свойство scaleMode влияет на три

параметра графики Flash-фильма: будет ли графическое изображение искаженным

или останется пропорциональным; будет ли графическое изображение масштабиро-

ваться при изменении пользователем размеров окна плейера; и, если графика масшта-

бируется, будет ли она изменяться так, чтобы полностью заполнять увеличенное или

уменьшенное окно плейера.

приводит к искажению и заполнению рабочего поля, т.е. графическое

изображение не обрезается, и его размеры изменяются так, чтобы полностью запол-

нить увеличенное или уменьшенное окно.

482 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

оставляет графическое изображение пропорциональным и масштабирует

его так, чтобы не было обрезки, т.е. изображение масштабируется так, чтобы полно-

стью заполнить окно.

устраняет любую "пустую" границу по краям рабочего поля и масштаби-

рует изображение в сторону увеличения. Следовательно, при уменьшении размеров

окна графика может быть обрезана.

не масштабирует изображение, следовательно, оно может быть обрезано

при изменении размеров окна в обоих направлениях.

Если не задавать значения свойства то по умолчанию в отдельном Flash-

плейере оно будет установлено в значение а в среде разработки — в зна-

чение В броузере свойство Stage. scaleMode по умолчанию

установлено в значение showAl

Поведение броузера, вызываемое по умолчанию заданным свойством scaleMode, за-

висит от установок меню Scale (Масштаб) вкладки HTML диалогового окна Publish

Settings (Параметры публикации).

Четыре элемента раскрывающегося меню Scale диалогового окна Publish Settings со-

ответствуют значениям свойства scaleMode. Выбранный элемент влияет только на

атрибуты дескрипторов HTML-файла. Они определяют, что произойдет при редакти-

ровании HTML-файла и изменении исходных атрибутов WIDTH и HEIGHT дескрипто-

ра OBJECT. Параметры масштабирования HTML не позволяют корректировать Flash-

фильм "на лету" при изменении пользователем размеров окна броузера.

Подробная информация о диалоговом окне Publish Settings приведена в

главе 30 "Оптимизация, публикация и экспортирование фильмов".

Параметры, заданные во вкладке HTML, и значения свойства взаимо-

связаны. И те и другие могут зависеть от броузера и платформы (например, Windows и

В целом, если свойство scaleMode установлено в значение "noScale", а в рас-

крывающемся меню Scale вкладки HTML выбран элемент No scale или Default (Show All),

то вы можете изменить значения параметров WIDTH и HEIGHT дескриптора OBJECT

HTML-файла, но при этом SWF-файл при изменении размеров не исказится.

В табл. 20.4 приведено несколько параметров и показано, что произойдет в броузере

Internet Explorer работающем под Windows, при изменении атрибутов WIDTH и

HEIGHT дескриптора OBJECT HTML-файла. Например, первая строка таблицы гово-

рит о том, что если свойство scaleMode установлено в значение exactFit, a

в диалоговом окне Publish Settings из раскрывающегося меню Scale вкладки HTML

выбран элемент No scale, Exact fit или Default (Show All), то графическое изображение

будет масштабировано так, чтобы соответствовать параметрам WIDTH и HEIGHT деск-

риптора OBJECT HTML-файла и при необходимости будет искажено. С другой сторо-

ны, если из раскрывающегося меню Scale вкладки HTML выбран элемент No Border,

то графическое изображение будет масштабировано пропорционально (искажение не

допускается), чтобы оно соответствовало увеличенным значениям атрибутов WIDTH и

HEIGHT дескриптора OBJECT HTML-файла. Например, если WIDTH равно а

100, то графическое изображение будет иметь высоту Если

пропорционально измененная ширина превышает 50 пикселей, то графическое изо-

бражение будет обрезано по горизонтали.

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 483

ТАБЛИЦА 20.4. ВЗАИМОСВЯЗЬ СВОЙСТВА STAGE.SCALEMODE и ПАРАМЕТРОВ МАСШТАБИРОВАНИЯ

ВКЛАДКИ HTML

STAGE . SCALEMODE ПАРАМЕТР МАСШТАБИРОВАНИЯ

ВКЛАДКИ HTML

РЕЗУЛЬТАТ в INTERNET EXPLORER 5.5.

Нет

(по умолчанию)

No scale, Exact fit или Default

(ShowAII)

No Border

Exact fit или No Border

No scale или Default (ShowAII)

No scale или Default (ShowAII)

Exact fit

No Border

Непропорциональное масштабирование

(форма искажается так, чтобы полностью

соответствовать новой высоте и ширине

Пропорциональное масштабирование

до больших размеров с обрезкой

(при необходимости)

Пропорциональное масштабирование

до больших размеров с обрезкой

(при необходимости)

Масштабирование отсутствует

Масштабирование отсутствует

Непропорциональное масштабирование

(форма искажается так, чтобы полностью

соответствовать новой высоте и ширине

Пропорциональное масштабирование

до больших размеров с обрезкой

(при необходимости)

ОБЪЕКТ SYSTEM

Объект System представляет компьютерную систему. Он имеет всего одно доку-

ментированное свойство: capabilities.

I Обратитесь к подразделу "Объект capabilit выше в этой главе.

КЛАССЫ TEXTFIELD и

Во Flash 5 возможности управлять текстовыми полями и контролировать их

были ограниченными. Текстовые поля можно было создавать только вручную посредством

пользовательского интерфейса, и практически все свойства текстовых полей

тоже задавались вручную, посредством панели Text Options (Параметры текста). Текстовые

поля не были объектами и не имели имен экземпляров.

Во Flash MX текстовые поля были полностью интегрированы в среду ActionScript.

Все, что можно сделать с текстовыми полями вручную посредством графического

пользовательского интерфейса, теперь можно сделать и с помощью ActionScript.

Чтобы познакомиться с текстовыми полями и узнать, какие операции можно

выполнять посредством графического пользовательского интерфейса, обрати-

тесь к главе 5 "Работа с текстом".

484 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Существуют четыре возможных способа динамического создания текстового поля. Первые

два используются для любого динамически создаваемого текстового поля. Возможно, в зависи-

мости от ваших требований, вам понадобятся последние два спобоба. Итак, приступим.

1. Создайте текстовое поле.

2. Задайте одно или несколько свойств поля.

3. Создайте объект TextFormat и примените его к полю.

4. Создайте и разместите компонент полосы прокрутки так, чтобы он "приклеился" к тек-

стовому полю.

ДИНАМИЧЕСКОЕ СОЗДАНИЕ ТЕКСТОВОГО поля

Текстовое поле можно создать динамически с помощью метода клас-

са Формат будет таким:

, х,

где — это видеоклип, в котором создается новое текстовое поле; myTextField —

имя экземпляра нового текстового поля; глубина — показатель глубины текстового поля; х

у— соответствующие координаты текстового поля, измеряемые в пикселях относительно

точки регистрации видеоклипа myClip; ширина и ширина и высота текстового

поля (в пикселях).

Например:

Данной строкой кода создается новое пустое текстовое поле с именем myTextField, яв-

ляющееся дочерним для видеоклипа Это поле имеет показатель глубины 2 и распо-

ложено на расстоянии 100 пикселей вправо и 100 пикселей вниз относительно точки регист-

рации видеоклипа myClip. Тестовое поле имеет ширину 25 пикселей и высоту 12 пикселей.

Вновь созданное текстовое поле имеет ряд свойств. Например, Rash устанавливает свойства _х

и _у текстового поля равными соответствующим координатам, передаваемым методу

createTextField Аналогичным образом, и _height устанавливаются рав-

ными параметрам ширины и высоты, передаваемым методу createTextField Свойство

type устанавливается в значение dynamic. Все вновь создаваемые текстовые поля по умолчанию

будут динамическими, если свойство type явным образом не будет установлено в значение input.

Полный перечень свойств, методов и событий текстовых полей представлен в табл. 20.5.

ТАБЛИЦА 20.5. СВОЙСТВА, МЕТОДЫ и СОБЫТИЯ ТЕКСТОВЫХ ПОЛЕЙ

Имя

свойство/

СОБЫТИЕ

ФОРМАТ ОПИСАНИЕ

Метод

getDepth Метод

Метод

Регистрирует объект j ect для

получения уведомления о наступлении

событий и onScroller,

связанных с текстовым полем

текстового поля

Возвращает массив имен шрифтов.

(Заметьте, Text Field, а не

myText

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 485

ПРОДОЛЖЕНИЕ ТАБЛ. 20.5

Имя

свойство/

СОБЫТИЕ

ФОРМАТ ОПИСАНИЕ

getNewText Метод

Format

Метод

Метод

Field

setNewText Метод

Format

replaceSel

setText Метод

Format

_alpha Свойство

Свойство

background Свойство

background Свойство

Color

border

borderColor Свойство

Format)

Size

ground

groundcolor

Свойство myTextField. border

Color

Возвращает копию объекта

TextFormat, примененного к новому

тексту, вставленному в текстовое поле

myTextField вручную или с помо-

щью метода replaceSel

Удаляет ect из массива

приемников, связанных с текстовым

полем myTextField, т.е. отменяет

ject)

Удаляет текстовое поле

myTextField, если оно было создано

с помощью метода

Задает myText Format в качестве

объекта текстового формата нового

текста, вставленного в текстовое поле

myTextField вручную либо с помо-

щью метода replaceSel

Заменяет строкой лю-

бой выделенный текст

Назначает для

текста, уже находящегося в текстовом

поле myTextField

Значение прозрачности текстового поля

myTextField; целое число от О до 100

Строка, указывающая анкерную точку

текстового поля myTextField при

автоматическом изменении его раз-

меров, чтобы вместить текст

(табл. 20.6)

Булева величина, отображающая

(true) или скрывающая фо-

новую заливку

Указывает цвет фоновой заливки. Це-

лое число, часто в шестнадцатерич-

ном формате, например

Булева величина, указывающая на

наличие или отсутствие границ тек-

стового поля

Указывает цвет границы. Целое чис-

ло, часто в фор-

мате, например

486 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ПРОДОЛЖЕНИЕ ТАБЛ. 20.5

Имя

свойство/

СОБЫТИЕ

ФОРМАТ ОПИСАНИЕ

Свойство

Свойство

_focusrect Свойство

Свойство

Scroll

myTextField.

embedFonts

myTextField.

TextField._

highquality

Свойство

hscrol Свойство

html Свойство

htmText Свойство

length Свойство

Свойство

myText

Chars

Целое только

для чтения, которое указывает самую

нижнюю видимую строку текстового

Булева величина, указывающая, ис-

пользуются ли в текстовом поле кон-

туры внедренных (true) или систем-

ных (false) шрифтов

Булева величина, указывающая, об-

рамлено ли текстовое поле желтым

прямоугольником, когда оно получает

фокусировку

Ссылается на глобальную переменную

что позволяет сгла-

живать растровые изображения и

устранять неровности контуров. Целое

о означает "не применяется";

1 означает "устранять неровности и

сглаживать растровые изображения,

если в фильме нет анимации"

(значение по умолчанию); 2 означает

"сглаживать растровые изображения

и устранять неровности контуров"

Целое число, предназначенное для

чтения и записи, указывающее высоту

текстового поля myTextField в пик-

селях. Влияет только на размер огра-

ничительного окошка, но не на раз-

мер шрифта

Целое число, указывающее текущее гори-

зонтальное положение

вого поля в пикселях

Булева величина, указывающая, со-

держит ли текстовое поле

myTextField HTML-текст. Должна

предшествовать свойству

Строка, содержащая текст формата

HTML текстового поля myTextField

Целое число, предназначенное только для

чтения, которое указывает число символов

в текстовом поле myTextField

Целое число. Когда в текстовом поле

myTextField содержится данное ко-

личество символов, Flash отключает

вставку символов вручную

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 487

ПРОДОЛЖЕНИЕ ТАБЛ. 20.5

Имя

свойство/

СОБЫТИЕ

ФОРМАТ ОПИСАНИЕ

Свойство

maxhscroll

maxscroll

name

password

Свойство

Свойство

Свойство

Свойство

Свойство

maxscroll

myTextField.

multiline

password

Свойство

Целое число, предназначенное только

для чтения, которое указывает мак-

симально возможное значение в пик-

селях свойства

заданное

для текущего текста

Целое число, предназначенное только

для чтения, которое указывает мак-

симально возможное значение в пик-

свойства myTextField. scroll,

заданное для текущего текста

Булева величина, указывающая, мо-

жет ли текстовое поле myTextField

содержать несколько строк

Строка, являющаяся именем экземп-

ляра,

Ссылка на видеоклип или кнопку, яв-

ляющуюся родительской для текстово-

го поля

Булева величина, указывающая,

предназначено ли текстовое поле

myTextField для ввода пароля. Если

она имеет значение true, то символы

вводимого пароля Flash отображает в

виде звездочек

Глобальное строковое свойство, ука-

зывающее качество отображения

фильма. Принимает следующие зна-

чения: LOW (контуры графики не сгла-

жены, растровые изображения не

сглажены); MEDIUM (контуры графики

сглаживаются с помощью пиксельной

сетки 2x2, растровые изображения не

сглаживаются; подходит для фильмов

без текста); HIGH (контуры графики

сглаживаются с помощью пиксельной

сетки 4x4, растровые изображения

сглаживаются, если в фильме нет

графики; данное значение использу-

ется по умолчанию); BEST (контуры

графики сглаживаются с помощью

пиксельной сетки 4x4, растровые

изображения всегда сглаживаются)

488 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ПРОДОЛЖЕНИЕ ТАБЛ. 20.5

Имя ФОРМАТ

свойство/

СОБЫТИЕ

ОПИСАНИЕ

restrict Свойство

Restrict

rotation

scroll

selectable

time

Свойство _

rotation

Свойство

1

Свойство myTextField.

Selectable

Свойство

tabEnabled

text

textColor

Свойство myTextField.

tabEnabled

Свойство myTextField.

tablndex

Свойство

Свойство myTextField.

textColor

Строка, указывающая набор симво-

лов, которые пользователь может

ввести в текстовое поле

myTextField. Символ тире (-) ука-

зывает диапазон. Символ вставки

означает, что следующие символы ис-

ключены, а предыдущие разрешены.

В следующем примере строчные бук-

вы разрешены, однако исключена

строчная буква w:

=

Целое число, предназначенное для

чтения и записи, указывающее теку-

щее количество градусов вращения

текстового поля

Целое число, предназначенное для

чтения и записи, теку-

щее вертикальное положение про-

крутки текстового поля myTextField,

измеряемое в строках текста

Булева величина, указывающая, дос-

тупно ли текстовое поле

myTextField для выделения

Ссылается на глобальную переменную

Глобальным обра-

зом устанавливает и получает количе-

ство времени в которое звук

должен содержаться в буфере перед

началом потокового воспроизведения.

Целое число, по умолчанию равно 5

Булева величина, указывающая,

включено ли текстовое поле

myTextField в автоматический по-

рядок перехода по клавише табуля-

ции

порядок перехода по кла-

више табуляции для текстового поля

myTextField

Строка, предназначенная для чтения и

записи, определяющая текст, находящий-

ся в данный момент в текстовом поле

Целое число, предназначенное для

чтения и записи, которое указывает

цвет текущего текста в текстовом поле.

Часто указывается в шестнадцатерич-

ном формате, например OxFFoooo

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 489

ПРОДОЛЖЕНИЕ ТАБЛ. 20.5

Имя

СОБЫТИЕ

ФОРМАТ ОПИСАНИЕ

textHeight Свойство

type

variable

visible

width

Свойство

Свойство

Свойство

wordwrap Свойство

xmouse

_У

TextHeight

textWidth

СВОЙСТВО myTextField. type

Свойство

myTextField.

variable

visible

Свойство

myTextField.

wordwrap

Свойство

Свойство .

Свойство

Целое только

для которое указывает высоту

фактического текста (а не ограничи-

тельного окошка)

Целое только

для чтения, которое указывает ширину

фактического текста (а не ограничи-

тельного окошка)

Строка, предназначенная для чтения и

записи, dynamic или input, которая

указывает, является ли текстовое по-

ле myTextField полем ввода текста

или динамическим текстовым полем

только для

чтения, указывающая URL SWF-файла,

создавшего экземпляр текстового поля

Строка, предназначенная для чтения и

записи, указывающая имя перемен-

ной, связанной с текстовым полем

Булева величина, предназначенная

для чтения и записи, которая опреде-

ляет, является ли текстовое поле

myTextField или

видимым (true)

Целое число, предназначенное для

чтения и записи, которое указывает

ширину текстового поля

myTextField в пикселях. Оно влияет

только на ограничительное окошко

текстового поля и не влияет на толщи-

ну границы или размер шрифта текста

Булева величина, предназначенная

для чтения и записи, которая указы-

вает, можно ли переносить слова в

текстовом поле на новую строку

Целое число, предназначенное для чтения

и записи, которое указывает х

текстового поля myTextField

Целое только

для чтения, которое указывает коор-

динату х курсора относительно тек-

стового поля

Целое число, предназначенное для чтения

и записи, которое указывает у

текстового поля myTextField

490 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 20.5

Имя

свойство/

СОБЫТИЕ

ФОРМАТ ОПИСАНИЕ

Свойство

_yscale Свойство _yscale

Событие

onKillFocus Событие

onScroller Событие

Событие

ged = function

поля)

Focus = function

{ }

rayTextField.onScroller

function

текстового поля) {

ocus = function

Целое число, предназначенное толь-

ко для чтения, которое указывает ко-

ординату у курсора относительно

текстового поля myTextField

Целое число, предназначенное для

чтения и записи, в диапазоне от -100

до 100, которое указывает процент

масштабирования текстового поля

myTextField no вертикали

Активизируется при изменении тек-

ста в текстовом поле. См. главу 16

"Взаимодействие, события и

установление последовательности"

Активизируется при потере тексто-

вым полем фокусировки. См.

главу 16 "Взаимодействие, события

и установление последовательности"

при изменении

свойств scroll,

bottomscroll текстового поля. См.

главу 16 "Взаимодействие, события

и установление последовательности"

Активизируется при получении фоку-

сировки данным текстовым полем.

См. главу 16 "Взаимодействие,

события и установление

последовательности"

Значения приведены в табл. 20.6.

ТАБЛИЦА 20.6. ЗНАЧЕНИЯ

ЗНАЧЕНИЕ

false

или true

"center"

ОДНА СТРОКА

Размеры автоматически не изме-

няются

Расширение вправо

Расширение вправо и влево

Расширение влево

НЕСКОЛЬКО СТРОК

Размеры автоматически не изме-

няются

Расширение вниз

Расширение вниз

Расширение

ЗАДАНИЕ свойств ТЕКСТОВОГО поля

Для нового текстового поля должно быть установлено хотя бы одно свойство, а может

быть, и несколько. Как минимум, нужно выполнить одно или несколько из перечисленных

ниже действий.

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 491

Задайте для текстового поля свойство variable.

В связи с тем, что новые текстовые поля автоматически являются динамическими (в от-

личие от статических полей и полей ввода данных), то при задании свойства

variable в текстовом поле сразу же начнет отображаться значение указанной пере-

менной.

На заметку Текстовые поля статического типа нельзя создать динамически. Однако ис-

пользовать текстовые поля динамического типа можно точно так же, как и ста-

тические.

• Задайте для текстового поля свойство

Свойство text определяет, какой текст будет отображен в поле. И в динамических по-

лях, и в полях ввода данных отображается текст, содержащийся в свойстве text.

• Создайте поле для ввода данных. Для этого установите свойство type равным

С динамическим полем или полем ввода данных можно связать и свойство variable, и

свойство text, а затем отображать эти свойства попеременно.

Для текстовых полей можно задавать и другие свойства.

• border = true — для задания границы текстового поля;

• multiline = true — чтобы разрешить отображение в текстовом поле не одной, а

нескольких строк.

• wordwrap = true — слишком длинные строки текста в текстовом поле будут авто-

матически переноситься на новую нижнюю строку.

СОЗДАНИЕ и ПРИМЕНЕНИЕ ОБЪЕКТА

Свойства текстового поля, рассмотренные в предыдущем не форматируют

текст. Например, с их помощью не реализуется подчеркивание, полужирное и курсивное на-

чертание текста, а также не устанавливается шрифт, размер и цвет текста. Для выполнения

подобных операций необходимо создать объект TextFormat и применить его к текстовому

полю. TextFormat является классом или функцией-конструктором. Для создания объекта

TextFormat он используется вместе с ключевым словом new следующим образом:

= new размер, цвет, курсив,

target, align, leftMargin, indent,

Все параметры функции TextFormat являются опциональными и могут быть установле-

ны в значение null. Это говорит о том, что параметры не определены. Замыкающие пара-

метры (после последнего параметра, который вы хотите задать) могут быть полностью опу-

щены. Ниже приведен пример создания объекта TextFormat с полужирным текстом крас-

ного цвета.

myTextFormat = new

Свойства объекта TextFormat можно задать отдельно, после создания объекта, как пока-

зано ниже.

=

Хотя в этом случае код не будет столь кратким, но отдельная установка свойств делает его

более удобочитаемым.

492 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Свойства класса TextFormat и единственный метод getTextExtent О при-

ведены в табл. 20.7.

ТАБЛИЦА 20.7. СВОЙСТВА и МЕТОД КЛАССА TEXTFORMAT

Имя ФОРМАТ

свойство

ОПИСАНИЕ

getText

Extent

Метод getTextExtent

align Свойство

Свойство

bold Свойство

bullet Свойство

color Свойство

font Свойство

indent Свойство

italic Свойство

leading Свойство

Возвращает объект с двумя

свойствами, width и

height, указывающими

размеры (в пунктах) строки

текст при ее форматирова-

нии с помощью объекта

myTextFormat. (При ис-

пользовании внедренных

шрифтов ширина (width)

может быть неточной.)

Строка, указывающая вы-

равнивание текста. Прини-

мает значения null (нет),

"left" (no левому краю),

"right" (по правому краю)

и "center" (по центру)

Целое число, указывающее

величину отступа (в пунктах)

всех строк блока текста

Булева величина, указываю-

щая, применено ли к тексту

полужирное начертание

Булева величина, указываю-

щая, нужно ли форматиро-

вать текст в виде маркиро-

ванного списка

Целое число, указывающее

цвет текста. Часто имеет ше-

формат,

например OXFFOOOO

Строка, указывающая имя

шрифта, например Times

New Roman

Целое число, указывающее

величину отступа (в пунктах)

от левого поля до первого

символа каждого абзаца

Булева величина, указываю-

щая, применено тексту

курсивное начертание

Целое число, указывающее

величину междустрочного ин-

тервала (в пунктах)

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ОБЪЕКТОВ Фильмов 493

ОКОНЧАНИЕ ТАБЛ. 20.7

Имя ФОРМАТ

свойство

ОПИСАНИЕ

rightMargin

tabStops

target

Свойство

Свойство

Свойство

Свойство

size

underline

Свойство size

Свойство

Свойство

Целое число, указывающее ве-

левого поля (в пунктах)

Целое число, указывающее

величину правого (в

пунктах)

Массив положительных чи-

сел, указывающих пользова-

тельские точки перехода по

клавише табуляции

Используется вместе со свойст-

вом rayText- url.

Строка, указывающая окно бро-

узера, в котором следует ото-

бражать страницу, связанную

гиперссылкой. Значения этого

свойства соответствуют атрибу-

там HTML-дескриптора target,

например

Целое число, указывающее

размер текста (в пунктах)

Булева величина, указываю-

щая, применено ли к тексту

подчеркивание

Строка, указывающая URL, с

которым связан текст

Соответствие между объектом и текстовым полем устанавливается посред-

ством метода класса Например:

Чтобы установить связь нового объекта TextFormat только с новым текстом, введенным

в текстовое поле (например, при вводе данных пользователем), воспользуйтесь методом

класса TextField, как показано ниже.

При загрузке нового текста в текстовое поле потерялось форматирование? Об-

ратитесь к разделу "Возможные проблемы" в конце этой главы.

Дескрипторы форматирования текста, внедренные в HTML-текст

Дескрипторы форматирования текста можно внедрить в HTML-текст. Их можно использовать

дополнительно или вместо объектов TextFormat. Внедренные дескрипторы облегчают приме-

нение атрибута к какой-то отдельной части текста. Например, в приведенном ниже файле

la атрибуты и INDENT применяются к обоим абзацам HTML-текста,

тогда как атрибут применяется только ко второму абзацу. Имейте в виду, что

строка 4 является одной строкой кода.

494 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

1: 1, 50, 50, 300,

= true;

=

4: =

<P

Это первый абзац, без отступа.

>

<Р

Это второй абзац, с блочным отступом.

СОЗДАНИЕ и РАЗМЕЩЕНИЕ КОМПОНЕНТА полосы

Можно динамически создать и разместить компонент полосы прокрутки так, чтобы она

"была привязана" к текстовому полю. Эта операция, а также другие методики, рассматривае-

мые в данном подразделе, продемонстрированы на примере файла la:

1: 1, 50, 50, 100,

= true;

3: true;

4: = true;

myTextField. text = "При помещении полосы прокрутки в динамическое +

"текстовое поле ввода данных в рабочем поле полоса прокрутки

7: "автоматически привязывается к ближайшей стороне

8: 2)

9: = new

11: sc._x = 150;

12: SC._y = 50;

13:

Подробная информация о компоненте полосы прокрутки приведена в главе 12

"Управление переменными, данными и типами данных".

Чтобы предложение attachMovie указанное в строке 8, было выполнено успешно,

необходимо, чтобы компонент полосы прокрутки содержался в библиотеке с именем связи

FScrollBarSymbol. При компонента полосы прокрутки с панели Compo-

nents (Компоненты) в рабочее поле и последующем удалении экземпляра из рабочего поля

символ с соответствующей связью все равно останется в библиотеке.

ЦЕННЫЕ МУЛЬТИМЕДИЙНЫЕ ОБЪЕКТЫ: VIDEO, CAMERA

Класс video, описывающий видео-и аудиопоток, идущий с Web-камеры в режиме

реального времени, в исходной версии Rash MX был недокументированным. Наи-

более полезен он при использовании в комбинации с приложением

Communication Server MX, которое будет кратко рассмотрено в следующем подраз-

деле. Без сервера связи можно получать только локальный видеопоток, а не тот, который проис-

ходит из удаленного источника или сети.

Для получения локального видеопотока создайте новый объект video, выбрав соответст-

вующий элемент из меню параметров (в правом верхнем углу) панели Library (Библиотека), а

затем поместите экземпляр объекта в рабочее поле. На панели инспектора свойств задайте

имя экземпляра, например vid. Тогда приведенный ниже код, помещенный во

шкалу, определяет видеопоток, идущий с заданной по умолчанию локальной камеры.

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 495

Метод можно использовать либо с объектом Video, как в предыдущем

примере, либо с объектом Netstream. Класс NetStream доступен только при работе с при-

ложением Flash Communication Server.

Когда фильм пытается получить доступ к камере, Flash-плейер отображает диалоговое ок-

но Privacy (Конфиденциальность), требуя от пользователя разрешить или отклонить доступ к

камере. Чтобы это диалоговое окно могло открыться, размеры рабочего поля должны быть не

меньше 215x138 пикселей. Когда пользователь откликается на запрос диалогового окна, об-

работчик события возвращает информационный объект, соответст-

вующий отклику пользователя, как показано ниже.

myCamera = О

= function

if ==

traceC'User denied access to the

if == {

traceC'User allowed access to the

Если при последнем отображении диалогового окна Privacy пользователь установил фла-

жок в поле опции Remember то Flash просто разрешит или отклонит доступ, а

обработчик события onStatus активизироваться не будет. Чтобы определить, разрешил

или отклонил пользователь доступ к камере, без использования обработчика события

onStatus воспользуйтесь свойством muted объекта Camera.

В табл. 20.8 и 20.9 представлены соответственно свойства и методы объекта Video.

ТАБЛИЦА 20.8. СВОЙСТВА ОБЪЕКТА VIDEO

Свойство ОПИСАНИЕ

deblocking Число, определяющее поведение фильтра деблокирования, примененного уст-

ройством сжатия потокового видео. Значение о (по умолчанию) уст-

сжатия применять фильтр по мере необходимости. Значение 1

отключает Значение 2 вынуждает устройство сжатия применять фильтр.

Данное свойство предназначено для чтения и записи

smoothing Булева величина, по умолчанию установленная в значение false. Указывает,

нужно ли сглаживать (интерполировать) видео при его масштабировании.

Плейер должен работать в режиме высокого качества. Данное свойство

предназначено для чтения и записи

height Высота в пикселях. Данное свойство предназначено только для чтения

width Ширина в пикселях. Данное свойство предназначено только для чтения

Свойства deblocking и smoothing объекта Video конфигурируют видеофильтры для

смягчения "блочного" отображения сильно сжатого видео. Фильтр деблокирования уменьша-

ет производительность при воспроизведении, особенно на медленных машинах, а при работе

с высокой пропускной способностью он, как правило, не нужен.

496 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ТАБЛИЦА 20.9. МЕТОДЫ ОБЪЕКТА VIDEO

имя ФОРМАТ ОПИСАНИЕ

myVideoObj

clear

Указывает, какой поток видео сле-

дует отображать в рамках объекта

Video в рабочем поле. Источ-

ник — это ко-

торый воспроизводит видеопоток,

или объект Camera, захватываю-

щий видеопоток. Если источник ус-

тановлен в значение null, то связь

с видеообъектом удаляется

Удаляет отображае-

мое в видео объекте в текущий мо-

мент. Полезно, к примеру, когда

связь с сервером прервана, а вы

хотите отобразить резервные дан-

ные без скрытия видеообъекта

В табл. представлены соответственно методы, свойства и обработчики собы-

тий класса Camera.

ТАБЛИЦА 20.10. МЕТОДЫ КЛАССА CAMERA

имя ФОРМАТ ОПИСАНИЕ

get

Interval

Возвращает видеопоток, идущий с за-

данной по умолчанию камеры или с

камеры, определяемой параметром

индекс. Возвращает значение

если камера не доступна. (Если в сис-

теме установлено несколько камер, то

пользователь указывает камеру по

умолчанию на панели Camera Settings

(Параметры камеры) Flash-плейера.)

Целое число от 1 до 48, указывающее,

какие кадры видео являются ключевы-

ми. Все данные передаются для ключе-

вых -

= 1 означа-

ет, что каждый кадр является ключевым;

значение 2 означает, что каждый второй

кадр является ключевым По умол-

чанию установлено значение 15. Метод

используется, в первую очередь, во Flash

Communication Server

Параметр -

Stream — это булева величина, ука-

зывающая, следует ли использовать

сжатый видеопоток для локального

просмотра данных, передаваемых

камерой. Метод используется, в

первую очередь, во Flash

Communication Server

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов

ОКОНЧАНИЕ ТАБЛ. 20.10

Имя ФОРМАТ ОПИСАНИЕ

setMode

стой ] )

setQuality

Задает атрибуты режима захвата

камеры, в том числе высоту, ширину

и частоту смены кадров (число кад-

ров в секунду). FavorSize — это

опциональная булева величина. Что-

бы максимально увеличить частоту

смены кадров за счет высоты и ши-

рины, установите параметр

favorSize в значение Для

поддержки оптимальной высоты и

ширины установите параметр

favorSize в значение true

Параметр —

это целое число от 0 до 100, указы-

вающее, какое движение требуется

для активизации обработчика собы-

тия По

умолчанию установлено значение 50.

Параметр

сколько миллисекунд должно истечь

без движения до активизации обра-

ботчика события

По

умолчанию установлено значение

2000 (2 секунды)

Параметр

указывает максимальную полосу

пропускания (в битах в секунду) исхо-

дящего видеопотока. Параметр

— это целое число

до 100, управляющее качеством

картинки. Если параметр

равен О, то ви-

деопоток получает полосу пропуска-

необходимую для поддержки

значения Если

равно 0, то ка-

чество картинки корректируется в

пределах параметра поло-

ТАБЛИЦА 20.11. СВОЙСТВА КЛАССА CAMERA

ФОРМАТ ОПИСАНИЕ

Величина перемещения, обнаруживаемая камерой; число в

диапазоне от 0 (отсутствие перемещения) до 100 (максимум)

Максимальная пропускная способность, которую может ис-

пользовать исходящий видеопоток (в байтах). Свойст-

во предназначено только для чтения

498 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 20.11

ФОРМАТ ОПИСАНИЕ

Interval

Скорость захвата данных камерой (кадров в секунду). Свойство

предназначено только для чтения

Желательная скорость захвата данных камерой (кадров в се-

кунду). Свойство предназначено только для чтения. Задается с

помощью метода (см. табл. 20.10)

Текущая высота захвата (в пикселях). Свойство предназначено

только для чтения

Индекс камеры, отображаемый в массиве, возвращаемом

свойством Свойство предназначено только

для чтения

Целое число от 1 до 48, указывающее, какие кадры яв-

ляются ключевыми. Все данные передаются для ключевых кад-

ров. Значение означает, что каждый кадр является ключе-

вым; значение 2 означает, что каждый второй кадр является

ключевым, и т.д. По умолчанию установлено значение 15. Ис-

пользуется, в первую очередь, в приложении Flash

Communication Server. Свойство предназначено только для

чтения

Предназначенная только для чтения булева величина, которая

указывает, является ли локальное представление видеопотока

сжатым или несжатым

Величина перемещения, необходимая для активизации обра-

ботчика события Свойство

предназначено только для чтения

Число миллисекунд между моментом завершения обнаружения

перемещения и временем активизации обработчика событий

Camera. onActivity Свойство предназначено

только для чтения

Предназначенная только для чтения булева величина, которая

указывает, разрешил или отклонил пользователь доступ к камере

Имя камеры, соответствующее аппаратной части устройства.

Свойство предназначено только для чтения

Массив строк, содержащий имена всех доступных устройств

захвата видео, в том числе видеокарт и камер. Свойство пред-

назначено только для чтения

Число от 1 до 100, указывающее текущий уровень качества

картинки. Чем сильнее сжатие, тем ниже качество. Значение 1

соответствует минимальному качеству и максимальному сжа-

тию. Значение означает максимальное качество без сжа-

тия. Свойство предназначено только для чтения

Текущая ширина захвата в пикселях. Свойство предназначено

только для чтения

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 499

ТАБЛИЦА 20.12. ОБРАБОТЧИКИ СОБЫТИЙ КЛАССА CAMERA

Имя ФОРМАТ ОПИСАНИЕ

=

{}

когда камера начинает или

заканчивает обнаружение перемещения.

это булева величина, уста-

новленная в значение когда каме-

ра начинает обнаружение движения, и в

значение когда камера останав-

ливает обнаружение

Активизируется, когда пользователь раз-

решает или запрещает доступ к камере

В табл. 20.13-20.15 представлены соответственно методы, свойства и обработчики собы-

тий класса Microphone.

ТАБЛИЦА 20.13. МЕТОДЫ КЛАССА MICROPHONE

Имя ФОРМАТ ОПИСАНИЕ

get

setGain

setRate

)

(усиление)

setSilenceLevel

setUseEchoSuppr

ession

Возвращает заданный по умолчанию

или указанный аудиопоток либо

null, если микрофон отсутствует

Указывает величину в диапазоне

от О до 100, на которую микрофон

должен усилить сигнал

Указывает частоту в КГц, на которой

микрофон должен захватывать звук

Указывает уровень звука (от О

до 100), требуемый для активизации

микрофона. Можно задать опцио-

нальный параметр

задающий количество миллисекунд,

в течение которых микрофон являет-

ся неактивным, перед тем как Flash

активизирует обработчик события

. По умолчанию этот параметр уста-

новлен в значение (2 секунды)

Параметр — это булева

величина, указывающая, нужно ли в

аудиокодеке использовать функцию

подавления эха

ТАБЛИЦА 20.14. СВОЙСТВА КЛАССА MICROPHONE

ФОРМАТ ОПИСАНИЕ

Level

Величина звука, до 100, улавливаемая микрофоном

Величина, на которую микрофон усиливает сигнал перед его

передачей. Значение в диапазоне О до 100. По умолчанию

задано значение 50

500 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 20.14

ФОРМАТ ОПИСАНИЕ

Индекс текущего микрофона

Булева величина, указывающая, разрешил или запретил

пользователь доступ к микрофону

Имя текущего устройства захвата звука, возвращаемое аппа-

ратным обеспечением захвата звука

Массив строк, содержащий имена всех имеющихся устройств

захвата звука, в том числе звуковых карт и микрофонов

Частота захвата звука (в КГц)

ТАБЛИЦА 20.15. ОБРАБОТЧИКИ СОБЫТИЙ КЛАССА MICROPHONE

имя ФОРМАТ ОПИСАНИЕ

onStatus =

Активизируется, когда микрофон начина-

ет или заканчивает обнаружение звука.

— это булева величина, уста-

новленная в значение true, когда мик-

рофон начинает обнаружение звука, и в

значение когда микрофон закан-

чивает обнаружение

Активизируется, когда пользователь раз-

решает или запрещает доступ к микро-

фону. Использование объекта

infoObject аналогично его примене-

нию в обработчике событий

СЕТЕВЫЕ СОЕДИНЕНИЯ в РЕЖИМЕ РЕАЛЬНОГО ВРЕМЕНИ: ОБЪЕКТЫ

NETCONNECTION и NETSTREAM

Объекты и связаны с приложением Rash

Server позволяющим двум и более SWF-файлам посредством IP-сети или Internet

обмениваться потоковым аудио/видео и текстом в режиме реального времени. Напри-

мер, Flash Communication Server MX можно использовать для реализации приложений

голосовых и видеоконференций и обмена мгновенными сообщениями.

Приложение Flash Communication Server предназначено только для реализации связи в

режиме реального времени. При использовании других типов данных и содержимого Flash

Communication Server MX может поддерживать связь с такими серверами, как Macromedia

ColdFusion MX Server, Macromedia JRun или Microsoft

В данной книге приложение Flash Communication Server детально не рассматривается.

В этой главе дается лишь краткий обзор того, как данное приложение связано с Flash Player и

с программой разработки Rash MX.

Приложения Rash Communication Server реализуются в виде двух модулей: серверного и

клиентского. Клиентский модуль представляет собой SWF-файл, выполняющийся в прило-

жении Rash 6 Player. Таким образом, программа разработки Flash MX используется для соз-

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 501

Дания приложений, использующих службы Flash Communication Server. Для расширения

функциональных возможностей приложений можно также использовать серверные сцена-

рии. Кроме компания Macromedia для отладки приложений предоставляет в распоря-

жение пользователей программы NetConnection Debugger и инспектор Communication App.

Для взаимодействия с Flash Communication Server приложение Flash 6 Player сначала уста-

навливает соединение посредством объекта NetConnection, а затем открывает один или не-

сколько каналов связи на этом соединении. Каждый канал называется сетевым потоком и

представлен объектом Каждый поток представляет собой односторонний канал,

с помощью которого можно либо опубликовать поток на сервере, либо воспроизвести поток,

поступающий с сервера.

В табл. 20.16 перечислены клиентские методы и свойства объекта NetConncetion, a

также единственный обработчик события.

ТАБЛИЦА 20.16. МЕТОДЫ, СВОЙСТВА и ОБРАБОТЧИК СОБЫТИЯ ОБЪЕКТА NETCONNECTION

Имя

свойство/

СОБЫТИЕ

ФОРМАТ ОПИСАНИЕ

call Метод

метод ,

| 1 пара -

close Метод

connect Метод

, . . . пара-

)

Свойство myConnection. isConnected

Свойство

Событие

Активизирует команду или

метод на сервере

Закрывает связь с серве-

ром

приложением

на Flash Communication

Server

Булево значение, указы-

вающее, соединен ли

Flash 6 Player с сервером

Строка, представляющая

целевой URL, указанный

в методе NetCon-

connect ()

Активизируется при изме-

нении статуса или при пе-

редаче ошибки объекту

NetConnection. Объект

три

свойства: code (код),

level (уровень) и

description (описание)

В табл. перечислены методы и свойства объекта Netstream, а также его единствен-

ный обработчик события.

502 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ТАБЛИЦА 20.17. МЕТОДЫ, СВОЙСТВА и ОБРАБОТЧИК СОБЫТИЯ ОБЪЕКТА NETSTREAM

Имя

свойство/

СОБЫТИЕ

ФОРМАТ ОПИСАНИЕ

attach

Audio

Video

Метод

Метод

close Метод

pause Метод I

] )

receive Метод

Audio

Метод публикации. Связывает

источник аудио с исходящим по-

током

Метод публикации. Присоединяет

видео или моментальный кадр

определенного источника к исхо-

дящему потоку. Параметр ис-

указывает объект

Camera для начала захвата или

для завершения захвата.

Параметр

зывает, является ли видеопоток

непрерывным (если параметр

щен), и он собой

отдельный кадр (о или любое от-

рицательное значение) или по-

следовательность отдельных кад-

ров, использующихся для созда-

ния покадровой съемки (любое

положительное значение, указы-

вающее задержку между захва-

ченными кадрами)

Останавливает публикацию или

воспроизведение

бождая его для другого примене-

ния

Абонентский метод. Приостанавли-

вает или возобновляет воспроиз-

ведение потока. Параметр

pauseResume — это опциональная

булева величина, указывающая,

что нужно сделать: приостановить

(true) или возобновить (false)

поток. Если этот параметр опустить,

то метод pause переключится от

приостановки (при его первом вы-

зове в потоке) к возобновлению

воспроизведения

Абонентский метод. Параметр

receive — это булева величина,

указывающая, воспроизводится

потоке входящее аудио

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 503

ПРОДОЛЖЕНИЕ ТАБЛ. 20.17

Имя

свойство/

СОБЫТИЕ

ФОРМАТ ОПИСАНИЕ

play Метод

length [,

Метод

(p

| false [,

как публиковать

Абонентский метод. Воспроизводит ау-

дио, видео и текст с сервера Flash

Communication Server. Параметр

— это имя, уста-

новленное с помощью метода

Параметр start — это оп-

циональное целое число, которое ука-

зывает начальное время (в секундах) и

является ли поток "живым" либо запи-

санным (табл. 20.18). Параметр

length — это опциональное целое

число, которое указывает длительность

воспроизведения (в секундах)

(табл. 20.19). Параметр

— это опциональная булева величина,

указывающая, нужно ли сбрасывать

(устранять) любые элементы текущего

списка воспроизведения и нужно ли

воспроизводить их немедленно

(true — по умолчанию) или поставить

в очередь и воспроизводить после

элементов текущего списка воспроиз-

ведения

Метод публикации. Отправляет пото-

ковое аудио, видео и текст от клиента

на сервер Flash Communication Server

(при этом поток может быть записан).

Параметр — это

опциональная строка. Если он уста-

новлен в значение record (записать),

то Flash и опубликует поток, и запишет

его в файл . с тем же именем, что

и Файл хранится на

сервере в каталоге приложений и бу-

дет записан поверх любого другого

файла с тем же именем. Если пара-

метр установлен в

значение append (добавить), то Flash

опубликует и запишет поток, но не по-

верх существующего файла, а в его ко-

нец. Если параметр

опущен или уста-

новлен в значение live (вживую), то

Flash опубликует поток без записи и в

каталоге приложений на сервере уда-

лит файл . имеющий то же имя,

ЧТО и имя публикации

504 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 20.17

Имя

свойство/

СОБЫТИЕ

ФОРМАТ ОПИСАНИЕ

receiveVi Метод

deo

seek

send

Метод

Метод

NetStream Метод

Свойство

gth

bufferTim Свойство

currentFp Свойство

s

Time СВОЙСТВО

OnStatus Событие

\FPS)

Length

Time

Status =

Абонентский метод. Параметр

receive — это булева величина, ука-

зывающая, воспроизводится ли в по-

токе входящее видео. Параметр FPS

указывает частоту смены кадров ви-

део. Указывается только один из двух

параметров

Абонентский метод; ищет определен-

ную позицию в воспроизводящемся в

данный момент записанном потоке

Метод публикации. Позволяет широко-

полосную передачу данных всем кли-

ентам-подписчикам. Параметр

— это имя метода

получаемого объекта NetStream. Об-

работчик активизируется при получе-

нии сообщения. Параметры будут пре-

образованы в последовательную фор-

му и могут относиться к данным любого

типа

Параметр — это целое

число, указывающее, на сколько се-

кунд следует заполнять данными бу-

фер. При наличии публикуемого потока

Flash начинает пропускать кадры, ко-

гда буфер заполнен. При наличии або-

нентского потока Flash бу-

фер данные на указанное чис-

перед началом

воспроизведения

Число секунд, на которое в настоящий

момент буфер заполнен данными

Время (в секундах), назначенное для

занесения данных в буфер с помощью

метода

myNetStream. erTime

Текущая частота смены кадров потока,

указываемая в количестве кадров в

секунду

Число секунд, прошедшее с начала

воспроизведения или публикации

Активизируется при изменении статуса

или при передаче ошибки объекту

NetStream

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 505

ТАБЛИЦА 20.18. ПАРАМЕТР START МЕТОДА

ЗНАЧЕНИЕ ОПИСАНИЕ

-2 (по умолчанию) или любое дру-

гое отрицательное значение,

кроме -1

-1

о или положительное число

Flash сначала ищет "живой", а затем — записанный по-

ток. Если ни один из них не найден, программа ожидает

"живой" поток

Flash ищет только "живой" поток. Если он не найден, Flash

ожидает в течение числа секунд, определяемых парамет-

ром length, а затем начинает воспроизведение следую-

щего элемента из списка воспроизведения. Если параметр

length установлен в значение Flash ожидает беско-

нечно. (Подробная информация о параметре length при-

ведена в табл. 20.19.)

Flash ищет записанный поток и начинает его воспроизве-

дение через число секунд, определяемое параметром

start, после начала потока. Если записанный поток не

найден, Flash немедленно переходит к следующему эле-

менту в списке воспроизведения

ТАБЛИЦА 20.19. ПАРАМЕТР LENGTH МЕТОДА

ЗНАЧЕНИЕ ОПИСАНИЕ

(по умолчанию) или любое дру-

гое отрицательное значение,

кроме

о

о или положительное число

Flash непрерывно воспроизводит "живой" поток либо

воспроизводит записанный поток целиком

Flash воспроизводит один кадр через число секунд, опре-

деляемое параметром start, после начала записанного

потока (параметр start должен быть нулем или положи-

тельным числом)

Flash воспроизводит первое число секунд, определяемое

параметром length, "живого" или записанного потока.

Если поток длится меньшее количество секунд, чем пара-

метр то воспроизведение потока по его оконча-

нии остановится

Все взаимосвязи между Flash 6 Player и Flash Communication Server реализуются посредст-

вом протокола Real Time Messaging Protocol (RTMP), а не посредством протокола HTTP, ис-

пользующегося для взаимосвязи между Web-серверами. Протокол RTMP обеспечивает по-

стоянный канал двухсторонней связи.

Для публикации или воспроизведения аудио и видео в режиме реального времени с по-

мощью Flash Communication Server необходимо выполнить пять основных этапов. Первые че-

тыре всегда аналогичны, а пятый этап варьируется в зависимости от того, что выполняется:

публикация или воспроизведение.

• Создайте Net ion с помощью new

• Установите связь с Flash Communication Server с метода

• Создайте сетевой поток для данного соединения с помощью метода new

506 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

• Присоедините определенный видео- и/или аудиопоток. При выполнении публикации

можно захватить локальный поток из микрофона или из камеры посредством предложения

и

deo При воспроизведении потока, идущего с сервера, команды будут

похожи, но вместо О и О следует использовать

определенное при публикации потока на сервере.

• При выполнении публикации используйте метод pub-

lish для назначения имени данного потока и отправьте его на

Flash Communication Server. При выполнении воспроизведения вызовите метод

Приведенный ниже код публикует аудио и видео в одном потоке и воспроизводит их в

другом с помощью одного соединения (этот код не является особенно полезным, но с его по-

мощью можно быстро продемонстрировать функциональные возможности).

= new

= new

)

= new

Обратите внимание на то, что сервер публикаций двумя отдельными предложениями

(строки 4 и 5) объединяет видео и аудио в исходящий поток. С другой стороны, пользователь

только присоединяет видео (строка 8). Звук автоматически воспроизводится посредством

стандартного устройства пользователя. Однако аудиопоток можно присоединить к видеокли-

пу с помощью метода Затем можно создать

объект Sound для управления различными свойствами аудиопотока.

Примеры использования метода () были приведе-

ны ранее в этой главе, в подразделе "Загрузка и присоединение звуков", а

также в главе 17 "Демонстрация мощи видеоклипов".

КЛАСС LOCALCONNECTION

Класс LocalConnection, новый и недокументированный в первой версии

Flash MX, позволяет взаимодействовать нескольким SWF-файлам, выполняю-

щимся на одном компьютере. Один фильм может инициировать обработчик со-

бытия другого фильма, а сами фильмы могут обмениваться произвольными дан-

ными. Функция локального соединения не зависит от броузера и, следовательно, работает

независимо от того, поддерживает ли данный броузер JavaScript. Эта функция также работает

во Flash 6 Player и в проекторах Flash.

Чтобы фильм мог посредством локального соединения взаимодействовать с другими объ-

ектами, сначала нужно создать экземпляр класса LocalConnection. Его можно будет ис-

пользовать для взаимосвязи по любому количеству связей или виртуальных каналов. Каждое

соединение имеет собственное имя и является взаимно-однозначным каналом связи с другим

фильмом. Для передачи данных посредством того или иного соединения необходимо

воспользоваться методом send экземпляра локального соединения. Для получения дан-

ных необходимо воспользоваться методом connect

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 507

Функция-конструктор имеет очень простой формат:

myLocalConnection new

Класс LocalConnection имеет четыре метода: О, connect О, и

domain О . Первые два метода используются при работе с локальным соединением соответ-

ственно для передачи и получения SWF-файлов. В SWF-файле, передающем и получающем

данные, используются и метод send и метод connect

Кроме того, если взаимодействующие фильмы не находятся в одном и том же домене, то для

утверждения доменов, с которых будут поступать данные, в принимающем фильме необходимо

создать обработчик В отправляющем фильме можно определить обработчик

события onStatus, в результате чего при активизации метода send фильм получит уведом-

ление об успешном или неудачном выполнении этой операции. Обработчик события onStatus

будет активизирован, когда метод send вернет значение true. (Возращение значения true

командой send говорит о том, что формат команды был приемлемым, но не о том, что дан-

ные фактически были отправлены.) В качестве параметра обработчик события onStatus полу-

чает объект со строковым свойством level (уровень). Если это свойство установлено в значе-

ние status, это означает, что данные были отправлены успешно. Если значением свойства

level является error, то данные не были отправлены успешно. Например, это произойдет в

случае, если на данном соединении нет ни одного приемника.

Приведенный ниже код отображает в текстовом поле состояние соединения и имя, иден-

тифицирующее SWF-файл.

=

= {

if == "error") {

= Connection xLC

}

else = Connection xLC

В табл. 20.20 приведены методы и обработчики события класса LocalConnection.

ТАБЛИЦА 20.20. МЕТОДЫ и ОБРАБОТЧИКИ СОБЫТИЙ КЛАССА LOCALCONNECTION

Имя ФОРМАТ

ОБРАБОТЧИК

СОБЫТИЯ

ОПИСАНИЕ

send Метод

тод . )

connect Метод

close Метод

(имя

domain Метод myLocalConnection. ()

Отправляет данные по каналу

Возвраща-

ет значение true, если фор-

мат команды приемлемый

Начинает прием на канале

единения

Удаляет соединение. Возвра-

щает значение true, если

операция прошла успешно, и

значение если данное

соединение не существует

Возвращает строку с именем

домена содержа-

щим экземпляр класса

508 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ОКОНЧАНИЕ ТАБЛ. 20.20

Имя

allow

Domain

ОБРАБОТЧИК

СОБЫТИЯ

Обработчик

события

Обработчик

ФОРМАТ

Domain =

отправите

ля) {}

Status function

(infoObject)

ОПИСАНИЕ

Будучи созданным в приемни-

ке, должен возвращать значе-

ние true, если отправляющий

домен домен отправителя

является приемлемым

Посредством свойства

уведом-

ляет об успешном или неудач-

ном выполнении команды

Метод send имеет следующий формат:

)

Параметры и метод представляют собой строки. Опциональные пара-

метры, обозначенные . могут быть данными любого типа. Фильм, который в со-

единении является приемником, будет автоматически исполнять любой

обработчик события, указанный в параметре метод. Параметры будут передаваться

этому методу.

Рассмотрим пример метода send Пусть экземпляр локального соединения имеет имя

соединение называется обработчик события имеет имя а num.

(Этот пример взят из кода, рассматриваемого в конце этой главы, в разделе "Flash за

"move",

Co стороны приемника метод обработчика события поставлен в соответствие определен-

ному соединению посредством метода connect Формат очень простой:

Рассмотрим пример использования соединения с именем xmove и экземпляром локаль-

ного соединения, имеющим имя oLC:

В принимающих фильмах для утверждения или отклонения соединений на основе домена

отправителя используется метод Интерпретирующая программа

в качестве параметра передает имя домена обработчику события

allowDomain Если метод allowDomain возвращает значение true, соединение раз-

решается. В приведенном ниже примере будут разрешены только соединения, установленные

с

=

return (senderDomain ==

}

Отправители и приемники могут указывать домен отправителя в явном виде, как в приве-

денных ниже примерах.

"move",

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 509

Если в имени соединения содержится символ двоеточия, то интерпретирующая програм-

ма что имя домена указано в явном виде. Если в имени соединения

нет символа двоеточия, то по умолчанию перед именем соединения указывается домен филь-

ма, содержащий экземпляр класса Localconnection. Таким образом, два SWF-файла, вы-

полняющиеся в одном и том же домене, могут использовать имя соединения без имени доме-

на, как в приведенных ниже примерах.

"move",

Для SWF-файлов, загруженных с локального жесткого диска, именем домена будет

localhost, т.е. два приведенных ниже выражения будут эквивалентными, если отправляю-

щий фильм был загружен с локального жесткого диска.

Если при загрузке SWF-файлов с разных доменов вы хотите утвердить соединение без

проверки имени домена, выполните два указанных ниже действия.

• Начните имя соединения с символа подчеркивания. Тогда сообщения будут отправ-

ляться без имени домена. Например:

"move",

• Для приемника создайте обработчик события который всегда будет

возвращать значение true, как в следующем примере:

=

return

Соединения, имена которых начинаются с символа подчеркивания, будут разрешены да-

же без наличия метода allowDomain если фактическим доменом является localhost.

Локальные соединения не имеют встроенного мультивещания. Например, если должны

взаимодействовать три фильма, то каждый фильм должен использовать три соединения: од-

но — для приема и по одному — для взаимодействия с каждым из остальных двух фильмов.

Например, один фильм может принимать данные на соединении incominga, другой

фильм — на соединении incomingb, а третий — на соединении В этом случае

соответствующий код в первом фильме будет выглядеть следующим образом:

= new

{

// здесь указывается код обработчика события

}

function {

"onReceive",

Код во втором фильме будет выглядеть аналогичным образом, за исключением того, что в

строке 2 будет указано соединение incomingb, а в строке 7 — incominga. В третьем фильме

в строке 2 будет указано соединение incomingc, а в строке 8 — incominga.

510 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему я могу получить доступ к звуку фильма, загруженного через Web?

Вот типичный сценарий проблемы. Пусть у вас есть фильм Звуковой

файл фильма sounds f la содержится в библиотеке фильма. Он имеет имя связи

а его код в основной временной шкале выглядит так:

= new

При тестировании фильма sounds InHere звук воспроизводится нормально. Но при за-

грузке файла swf в другой фильм с помощью метода звук не

Решение проблемы заключается в добавлении в файл ключевого

слова this следующим образом:

mySound = new

Если снова опубликовать фильм sounds звук будет воспроизводиться.

Во Flash 5, равно как и во Flash такая ситуация является проблемной (комментарии о ней

имеются на Web-узле

htm).

Почему при загрузке в текстовое поле нового текста теряется форматирование?

Пусть создано текстовое поле myText, для которого задано свойство text и применен

формат myTextFormat. Код работает нормально. Однако при изменении текста путем на-

значения нового значения свойства text текстовое поле возвращается к своей исходной

конфигурации, заданной на панели инспектора свойств.

В добавление к методу setTextFormat () необходимо использовать метод

Таким образом, задается формат нового входящего текста. Его необ-

ходимо задать всего один раз.

Приведенный ниже код иллюстрирует способ задания формата. При возвращении к ис-

ходному форматированию проблема возникает из-за того, что в вашем коде отсутствует стро-

ка, подобная строке 7.

myTextFormat = new

=

= "Исходный текст";

новый

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 511

FLASH ЗА РАБОТОЙ: ПОЛНАЯ АВТОМАТИЗАЦИЯ

ИГРЫ В КРЕСТИКИ-НОЛИКИ С ПОМОЩЬЮ КЛАССА

LOCALCONNECTION

в этой главе функция локального соединения позволяет взаимодейство-

вать двум отдельным SWF-файлам. Это открывает возможность написания двух отдель-

ных, взаимодействующих друг с другом программ. Например, два программиста могут

создать для какой-то игры разные программные Выиграет тот робот, код

которого лучше соответствует стратегии данной игры.

Фильмы и f la показывают, как можно играть в кре-

стики-нолики по локальному соединению с двумя SWF-файлами. Оба фильма созданы на

основе файла (рассмотренного в разделе "Flash за работой" главы 13

"Использование операторов"), представляющего собой код автоматической игры в крестики-

нолики в пределах одного SWF-файла, но с двумя виртуальными игроками, один из которых

рисовал крестики, а нолики. В файлах и

функции двух виртуальных игроков разделены на два отдельных SWF-файла.

В файле принимаются решения относительно В нем

же реализуется отображение игрового поля и осуществляется проверка выигрышной комби-

нации при каждом ходе. В файле swf принимаются решения относительно дви-

жений "о", несмотря на то, что фактически они выполняются в файле tictactoe_lc . swf

от имени файла player_lc . В обоих фильмах метод move связанный с объектом ло-

кального соединения, инициируется при получении фильмом (по локальному соединению)

сообщения, в котором говорится, каким был ход другого игрока.

Основная последовательность действий такая.

1. Игрок делает ход "х" и отправляет сообщение игроку

2. Сообщение из файла tictactoe_lc . swf инициирует метод move соответствую-

щий объекту локального соединения oLC в файле Этот метод ло-

кально в файле swf записывает ход "х", принимает решение относительно

хода "о" и отправляет сообщение в файл swf.

3. Сообщение из файла player_lc инициирует метод соответствующий

объекту локального соединения oLC в файле Этот метод выпол-

няет и записывает ход "о", принимает решение относительно хода "х" и со-

общение в файл player_lc .

Шаги 2 и 3 повторяются до тех пор, пока файл tictactoe_lc . swf не определит, что

кто-то из игроков победил или что все девять клеток игрового поля заполнены.

Каждый ход основывается на получении значения от О до 8 включительно. Девять чисел

соответствуют девяти клеткам игрового поля в крестики-нолики. Для получения числового

значения в обоих фильмах используются идентичные функции Выбор

клетки является случайным, но при этом из него исключаются уже заполненные клетки.

Функции getFreeSquare можно модифицировать так, что для принятия решения отно-

сительно своего хода два игрока будут использовать разные стратегии.

В листинге 20.1 приведен код файла tictactoe_lc . f la, относящийся к локальному со-

единению.

512 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ЛИСТИНГ 20.1. ИЗ ФАЙЛА

1: xLC = new

2: = function {

3:

4: if (j < 9} {

5: if {

6 : =

8: "move", num)

whoseMove =

11: }

12: else {

whoseMove =

17: }

18: }

19: }

В строке 1 создается объект локального соединения xLC, который будет использоваться

для отправки ходов из файла swf в файл

В строках выполняется метод move соответствующий объекту локального соеди-

нения xLC. Метод выполняет и ходы "х", и ходы "о". (Сообщение о том, какой

ход "о" будет сделан, поступает из файла

В строке 2 файлом swf для ходов "о" предоставляется параметр num. Для ходов

этот параметр не поскольку число для хода определяется в строке 6.

Переменная приращение которой задается в строке 3, а тестирование происходит в

строке 4, подсчитывает все ходы и обходит предложения в методе move после того, как бу-

дут сделаны девять ходов.

Переменная whoseMove, проверка которой выполняется в строке 5, имеет значение

true, когда наступает очередь хода "х", и значение когда наступает очередь хода "о".

В строке 7 выполняется ход "х".

В строке 8 отправляется сообщение в файл Файл от-

кликается на это сообщение. Когда из файла поступает обратное сообще-

ние, активизируется метод move и инициируется выполнение хода "о".

Строка 9 изменяет значение переменной whoseMove с true на так что при сле-

дующей активизации метода move будет выполняться код, реализующий ход "о"

(строки

В строке 10 производится обращение к функции checkResult О, которая проверяет,

привел ли последний сделанный ход к образованию выигрышной комбинации. При наличии

выигрышной комбинации функция checkResult завершит игру.

В строке выполняется ход "о".

Строка 14 изменяет значение переменной whoseMove с на true, так что при сле-

дующей активизации метода move будет выполняться код, реализующий ход "х"

(строки

В строке как и в строке 10, выполняется обращение к функции checkResult

В строке 16 вызывается метод move инициирующий ход "х". Обратите внимание,

что здесь параметр не указывается, поскольку для выполнения хода "х" он не требуется (см.

примечание для строки 2). Вызов метода move начинает весь процесс сначала.

ГЛАВА 20. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ОБЪЕКТОВ Фильмов 513

В строке 20 метод connect используется для подготовки файла swf к

приему локального соединения Практика показывает, что лучше всего выполнять ме-

тод connect только после создания метода (в данном случае который будет

обрабатывать данное соединение. В противном случае вы можете не получить сообщение для

данного соединения, поскольку обработчик еще не существует. В данном случае такая ситуа-

ция фактически произойти не может, поскольку файл player_lc . swf отправляет сообще-

ние только в ответ на сообщение, инициированное файлом Таким об-

разом, невозможно, чтобы файл отправил сообщение до того, как файл

swf будет полностью подготовлен.

В листинге 20.2 приведен код файла f la, относящийся к локальному соеди-

нению.

ЛИСТИНГ 20.2. КОД ФАЙЛА

= {

2: if (param == 10) { // игра окончена

3 :

4: "игра окончена";

return;

6: }

7: = null; // записать ход х

8: = getFreeSquare 0 // получить ход о

9: = null; // записать ход о

10: "move", // отправить ход о

11: }

// подготовить к получению

В строках 1— представлен код обработчика ходов, указанный в строке 8 листинга

Основными в этом листинге являются строки 10 и 12.

Строка 10 отправляет к локальному соединению omove, где файл

подготавливается к приему (см. строку 20 листинга

Строка 12 подготавливает файл swf к приему в локальном соединении

xmove, которое использует файл для отправления сообщений (см.

строку 8 листинга

Кроме того, в строке 2 показано, что при завершении игры файл swf пе-

редает в виде параметра значение

Также обратите внимание на строку 9, в которой показано, что когда клетка "занята", зна-

чение соответствующего элемента в массиве squares (клетки) устанавливается равным

null. При поиске свободной клетки функция getFreeSquare ищет элемент массива, не

установленный в значение

514 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ

ГЛАВА 21

УПАКОВКА ДАННЫХ и ФУНКЦИЙ с

ПОМОЩЬЮ ПОЛЬЗОВАТЕЛЬСКИХ

ОБЪЕКТОВ

В ЭТОЙ ГЛАВЕ...

Пользовательские объекты

Размещение локальных свойств в иерархии наследования

"Потеря" объекта prototype существующего класса при использовании оператора new

Подмена наследуемых свойств 520

Доступ к с помощью оператора super 523

Свойство constructor 524

Создание иерархии классов с помощью 528

Разработка и подклассов: связи типа "являться" и "иметь" 532

Возможные проблемы 534

ПОЛЬЗОВАТЕЛЬСКИЕ ОБЪЕКТЫ

Пользовательские объекты создаются путем создания новой функции-конструктора, оп-

ределяющей новый класс, и последующего использования ключевого слова new для создания

новых объектов, принадлежащих этому классу.

Основные методики создания пользовательских объектов рассматривались в

главе 15 "Объединение предложений в функции".

Пользовательские объекты позволяют расширить мощь и разносторонность объектов и

классов применительно к решению любых задач. Если встроенные объекты общую

концепцию объектно-ориентированного программирования, то благодаря пользовательским

объектам можно выполнять очень широкий круг задач, используя при этом в полном объеме

функциональные возможности ООП.

Применение пользовательских объектов порождает ряд вопросов, которые при использовании

объектов, как правило, не возникают. Один из таких вопросов заключается в необхо-

димости принятия решения об уровне, на котором должны располагаться локальные свойства.

РАЗМЕЩЕНИЕ ЛОКАЛЬНЫХ свойств в ИЕРАРХИИ

НАСЛЕДОВАНИЯ

Функция-конструктор может наделить создаваемые с ее помощью экземпляры как ло-

кальными, так и коллективными свойствами. Например, пусть функция-конструктор Bird

(птица) задает для каждого из своих экземпляров локальное свойство makingNoise

(создание шума) и коллективный метод move (движение). Чтобы указать, издает ли кон-

кретный экземпляр в данный момент времени какой-то шум, он должен иметь собственную

копию свойства makingNoise.

function Bird ( ) {

= false; // локальное свойство "makingNoise"

= function () { // коллективный метод

myBird = new

// true

Оператор new (как говорилось в главе 15 "Объединение предложений в функции") отве-

чает за связывание объекта myBird с коллективным методом О объекта-прототипа

и локального свойства makingNoise для экземпляра объекта

myBird. При создании нового экземпляра свойство makingNoise всегда устанавливается в

значение false.

Если вы не хотите, чтобы свойство makingNoise всегда устанавливалось в значение

false, можно передать функции-конструктору аргумент, который будет использоваться в

качестве значения свойства makingNoise. В приведенном ниже примере свойство

устанавливается в значение true.

function Bird (makingNoise) {

= makingNoise; // локальное свойство

= function { // коллективный метод

myBird = new

// true

При создании с помощью оператора new иерархий наследования нескольких классов коллек-

тивные свойства все равно остаются в объекте-прототипе Локальные свойства создают-

ся в объекте-прототипе подкласса. Иными словами, объект-прототип подкласса фактически ста-

новится экземпляром надкласса. Продолжая предыдущий пример, мы увидим следующее:

function Raptor ( ) { }

= new

// true

Свойство makingNoise будет коллективным, поскольку оно содержится в объекте-

прототипе. Однако в данном случае при наличии коллективного свойства makingNoise код

516 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ

работать не будет. Необходимо иметь возможность определить, издает ли шум каждая отдель-

ная птица. Следовательно, необходимо, чтобы каждый экземпляр на самом нижнем уровне

иерархической структуры имел свою копию свойства makingNoise.

Этой цели можно добиться путем вставки в функцию-конструктор Raptor (хищник) опе-

ратора super.

Оператор super будет подробно описан далее в этой главе, в подразделе

"Доступ к с помощью оператора super".

Кроме того, в функцию-конструктор Raptor необходимо добавить аргумент (как в при-

веденном ниже примере) так, чтобы для экземпляров самого нижнего уровня можно было за-

дать значение свойства makingNoise. В что экземпляры функции Raptor

представляют собой самый нижний уровень иерархической структуры, поставленная задача

будет выполнена.

function Raptor (makingNoise) {

}

= new

// бесполезно, но пра-

вильно

new

// правильно и

Если функция-конструктор Raptor имеет дочерний класс, то функции-конструкторы

этого класса можно модифицировать точно как и Raptor.

В приведенном ниже фильме имеющемся на прилагаемом к книге ком-

пакт-диске, создается иерархия

объект myBird), в которой объект myBird имеет свойство makingNoise, установленное в

значение true, даже несмотря на то, что все остальные свойства makingNoise установлены

в значение false. Коллективные свойства объектов-прототипов и

prototype, вероятно, будут для вас бесполезны, поэтому их можно удалить.

function Bird (makingNoise) {

= makingNoise; // локальное свойство

"makingNoise"

= function () { // коллективный метод

function Raptor (makingNoise) {

}

= new

function Eagle (makingNoise) {

= new

myBird = new

"ПОТЕРЯ" ОБЪЕКТА PROTOTYPE СУЩЕСТВУЮЩЕГО

КЛАССА ПРИ ИСПОЛЬЗОВАНИИ ОПЕРАТОРА NEW

Оператор new имеет одно ограничение, о котором нужно знать: если подкласс имеет су-

ществующий объект prototype, то при установлении связи этого подкласса с

объект "теряется".

ГЛАВА 21. УПАКОВКА ДАННЫХ и ФУНКЦИЙ с помощью ПОЛЬЗОВАТЕЛЬСКИХ ОБЪЕКТОВ 517

Что в данной ситуации означает слово "теряется"?

Объект prototype является свойством, состоящим из двух частей: имени и значения.

Имя свойства является указателем на его значение, а значение само является объектом. Если

убрать указатель, объект останется безымянным и, следовательно, на него нельзя будет ссы-

латься и использовать его (по крайней мере, с данным именем). На один и тот же объект мо-

гут ссылаться два указателя, один из которых можно убрать и использовать только другой. Ес-

ли же удалить все указатели, то объект становится совершенно бесполезным. Тогда к делу

должна приступить функция "уборки мусора", которая восстановит использующуюся память,

стирая остатки ненужных объектов.

В процессе создания связи с имя свойства прототипа подкласса будет указы-

вать на новый объект. Имя свойства остается таким же, как и раньше (прототип), но оно

больше не будет указывать на тот же объект. Следовательно, класс "отрезается" от своего

бывшего объекта prototype.

Предположим, к примеру, что в иерархии (описанной

в главе 15 "Объединение предложений в функции") необходимо заменить класс верхнего

уровня на новый и получить иерархию Можно ли

добиться выполнения поставленной задачи с помощью приведенного ниже кода?

function Predator () {

}

= new

Нет! Но почему? Ведь данная схема выглядит очень разумно. Вы установили связь класса

Raptor с классом Predator и ничего не меняли в ветви Raptor иерархии наследования.

Получим ли мы в результате иерархию Если да, то

член BaldEagle, например baldyl, больше не будет иметь доступ к таким

movement: "fly " объекта prototype.

Практически все происходит почти наоборот. Вместо того чтобы убрать из цепочки на-

следования класс Bird, вырезается класс Raptor. (Этот процесс немного сложен, но разо-

браться в нем поможет рис. на котором показан путь, который проходит интерпрети-

рующая программа ActionScript при поиске свойств. Стрелки выполняют те же функции, что

и свойство _proto_ в ActionScript: они указывают на прототип функции-конструктора.)

Интерпретирующая программа создает новый объект-прототип и

связывает его с объектом prototype посредством нового свойства

Информация о свойстве содержится ниже, во врезке "Свойство

Свойство _proto_

Каждый объект, созданный с помощью оператора получает свойство (обратите

внимание на два символа подчеркивания по обеим сторонам слова). Обычно это свойство

скрыто (например, в цикле оно не отображается). Тем не менее для реализации насле-

дования свойство является ключевым.

Одной из частью процесса создания нового объекта является задание интерпретирующей про-

граммой ActionScript свойства с целью указания на объект prototype функции-

конструктора. Например, частью процесса создания объекта baldyl является установка интер-

претирующей программой ActionScript свойства для указания на объект

prototype функции-конструктора BaldEagle. Таким образом, две приведенные ниже строки

ссылаются на один и же объект.

518 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Интерпретирующая программа ActionScript выполняет поиск в объекте prototype, когда она

не может найти свойство в самом объекте. Как же интерпретирующая программа переходит от

объекта (baldyl) к объекту prototype конструктора Нужный путь

указывает свойство

При желании впоследствии можно "повторно указать" свойство для ссылки на другой

объект. Интерпретирующая программа будет выполнять поиск там, куда указывает свойство

Кроме того, имеется свойство Так же как свойство

указывает интерпретирующей программе, где следует выполнять поиск в

случае необнаружения свойства в объекте baldyl, свойство

BaldEagle указывает путь к следующему объекту prototype, в кото-

ром следует выполнить поиск, если свойство не будет найдено в объекте

Однако свойство продолжает указывать на предыдущий объект

prototype, который, в свою очередь, продолжает указывать на объект

prototype. Цепочка наследования остается неизменной за исключением следующего.

• Изменения в объекте Raptor не влияют на класс Eagle (или

BaldEagle), поскольку свойство не указывает на но-

вый объект

• Изменения в объекте prototype не влияют на класс Raptor, поскольку новое

свойство _proto_ указывает на объект prototype.

Иными словами, класс Raptor и новый объект prototype полностью отсоеди-

нены от своей бывшей цепочки наследования. Бывший объект теперь

вызываемый только посредством свойства остается в цепочке.

Eagle

\

Прототип

BaldEagle Прототип

А

Рис. Стрелки показывают путь, который проходит интер-

претирующая программа ActionScript при поиске свойств. Как и

свойство они указывают на класс объекта prototype

ГЛАВА 21. УПАКОВКА ДАННЫХ и ФУНКЦИЙ с помощью ПОЛЬЗОВАТЕЛЬСКИХ ОБЪЕКТОВ 519

А член класса baldyl вообще не претерпевает никаких изменений.

Если интерпретирующая программа ищет объекты prototype по мере прохож-

дения по наследования, то предполагаемая будет достигнута при установлении

связи класса Raptor с классом Predator. Функция-конструктор Bird и объект, который ра-

нее был известен как prototype, будут находиться вне цепочки наследования.

Однако интерпретирующая программа не ищет объекты prototype, а идет по пути, ука-

занному свойством

Если после присоединения класса Raptor к классу Predator вы хотите продвинуться

дальше и с помощью оператора new получить искомую иерархию Predator-Raptor-

необходимо повторно присоединить класс Eagle к классу Raptor, a

класс BaldEagle — к классу Eagle. И наконец, необходимо повторно создать объект

baldyl, который в противном случае будет продолжать использовать старую цепочку насле-

дования, совершенно не подозревая о произошедших изменениях! Он будет продолжать ссы-

латься на всю цепочку предыдущего объекта prototype, ранее соответствовавшую классам

и Bird.

Весь описанный процесс показан в файле код которого приводится ниже.

В целях тестирования для исходного объекта Predator назначено свойство

function Predator () {

= "Predator";

= new

= new

= new

baldyl = new

trace // "Predator"

Если вы больше не собираетесь использовать класс Bird, его можно удалить.

Выполнение указанных шагов позволит создать искомую иерархию. Однако за это придется

заплатить дорогую цену: необходимо разрушать и повторно создавать прототипы и экземпляры.

Путем "повторного" указания свойства _proto_ вы сможете очень просто изъять класс

Bird из цепочки наследования и заменить на класс Predator, больше ничего не меняя.

Процедура повторного указания свойства рассматривается далее в

этой главе, в подразделе "Создание иерархии классов с помощью свойства

Создания цепочек наследования путем манипулирования непосредственно свойством

_proto_ компания Macromedia рекомендует избегать. Кроме того, свойство не оп-

ределено в стандарте ЕСМА-262.

Однако в ActionScript свойство является документированным и не исключен-

ным. Некоторые программисты предпочитают работать именно с ним, поскольку в некото-

рых случаях (таких как описанный выше) оно является более эффективным и менее деструк-

тивным по сравнению с оператором new.

ПОДМЕНА НАСЛЕДУЕМЫХ свойств

Описанная в главе 15 "Объединение предложений в функции" цепочка наследования

является всего лишь скелетной конструкцией, поскольку

три нижних класса не играют никакой полезной роли. Единственное, что может делать под-

класс, — это добавлять новое свойство. Например, поскольку хищники (Raptor) являются

птицами, преследующими добычу (prey), то класс Raptor может добавлять свойство prey

(как показано ниже, оно может быть представлено в виде массива элементов меню Raptor):

520 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

"rabbits",

Если подкласс определяет свойство, а родительский класс уже имеет свойство с тем же именем,

то свойство подкласса "подменяет" родительское. При обращении к свойству объекта в пределах

цепочки наследования интерпретирующая профамма начинает с низа цепочки и вы-

полняет поиск снизу вверх, отыскивая свойство с этим именем. Как только свойство с этим име-

нем будет найдено, поиск прекращается. Если подкласс имеет свойство с тем же именем, что и

свойство то интерпретирующая профамма никогда не найдет свойство

Пусть, например, создан класс Bird с методом move в который помещен код, необхо-

димый для того, чтобы заставить птицу летать:

function Bird () { } // конструктор Bird

= function () {

// предложения, заставляющие птицу летать

// поместить это предложение для тестирования

Г

Пусть теперь необходимо включить в программу птицу гагарку (auk). Эта птица, которую

еще называют "арктическим пингвином", почти не имеет оперения и не умеет летать. Следо-

вательно, стандартный метод move класса Bird для нее не годится. Для включения в сис-

тему этой особой птицы можно создать новый класс со своим собственным методом move

который подменит move класса Bird:

function Auk конструктор Auk

2: = new // Auk наследует Bird

= new // экземпляр Auk

4: // отображает "fly" - но это не то, что нам нужно

5: = function (} {

6: // предложения, заставляющие гагарку ходить вперевалку (waddle)

7: trace // для тестирования

8: }

9: aukl () ,- // отображается "waddle" - это уже

(Этот тестовый код содержится в файле f la на к книге компакт-диске.)

Обратите внимание на то, что наследование класса Bird (строка 2) необходимо задать до

подмены свойства (строки 5, 6). Если сначала создать метод move а за-

тем выполнить команду Auk. prototype = new , то оператор new не будет перена-

правлять существующее свойство на новый объект класса Bird, а оставит

существующий метод в объекте, на который свойство больше не указывает.

Свойство prototype будет завершаться методом move класса Bird.

Если вы совсем запутались при подмене методов получения/задания

(устанавливаемых посредством предложения обратитесь к

разделу "Возможные проблемы" в конце этой главы.

Подмена, произошедшая в подклассе (Auk), не влияет на (Bird) и на другие

классы, наследующие его. В классе метод move остается неизменным. Если вы хоти-

те изменить метод move класса его необходимо переписать, а не просто подменить.

Процедура переписывания рассмотрена ниже, в подразделе "Переписывание

наследуемых свойств".

ГЛАВА 21. УПАКОВКА ДАННЫХ и ФУНКЦИЙ с помощью ПОЛЬЗОВАТЕЛЬСКИХ ОБЪЕКТОВ 521

ПОДМЕНА свойств в ОТДЕЛЬНЫХ ЭКЗЕМПЛЯРАХ

Свойство можно подменить в отдельном экземпляре, а не в целом классе. Например, если

птица aukl в данный момент плывет, то для экземпляра aukl можно определить локальный

метод () следующим образом:

= function {

// предложения, заставляющие гагарку грести (paddle)

trace // для тестирования

// отображается "paddle"

Однако при этом экземпляр aukl не будет иметь возможности доступа к коллективному

методу move в течение всего времени, пока существует свойство экземпляра. Если удалить

свойство экземпляра, то объект aukl снова будет иметь доступ к коллективному свойству:

delete

// снова отображается "waddle" (ходить вперевалку)

Подмена свойств в отдельном экземпляре может быть удобной, если почти все члены

класса имеют определенное значение свойства и только один или два из них имеют другое

значение; либо если вы хотите временно изменить поведение или значение.

ОТСУТСТВИЕ ПОДМЕНЫ В ОБЪЕКТАХ

Глобальные объекты можно использовать в том виде, в каком они есть, и к ним можно до-

бавлять свойства, но изменять значения встроенных свойств глобальных объектов нельзя.

Например, при попытке изменить значения свойства вы обнаружите, что сделать

это невозможно:

= 12;

// все равно

Это справедливо и в том случае, когда свойство является методом. Например, приведен-

ном ниже коде в методе sqrt осуществляется попытка умножения на 2, вместо того,

чтобы извлекать квадратный корень. Если бы это можно было сделать, то метод

sqrt дал бы значение 8. Но, как видно из кода, этого не произошло:

// "2" - квадратный корень из 4 равен 2

= function (arg) arg * // вместо этого умножаем на 2

// все равно "2", т.е. извлекается квадратный корень

Может показаться, что с глобальными объектами вообще ничего нельзя сделать. Однако далее в

этой главе, во врезке "Взлом объекта Math", будет описан способ выполнения такой задачи.

ПЕРЕПИСЫВАНИЕ НАСЛЕДУЕМЫХ свойств

Два приведенных ниже предложения демонстрируют разницу между подменой и переписыва-

нием. Первое предложение изменяет метод move только для членов класса Auk. Второе предло-

жение изменяет его для класса Bird и всех классов Raptor, Eagle, и

Auk. (Предложения, реализующие функции, указываются внутри круглых скобок.)

= function () { // подмена в подклассе

= function О { // переписывание в надклассе

522 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ

ДОСТУП К НАДКЛАССУ С ПОМОЩЬЮ ОПЕРАТОРА SUPER

При работе с иерархиями наследования чаще всего приходится сталкиваться с

двумя следующими ситуациями.

• Необходимо создать подкласс с методом, подменяющим метод Однако при

этом иногда нужно иметь доступ к поведению надкласса либо объединить метод под-

класса с собственным добавленным поведением надкласса.

• Есть родительский класс с экземплярами и подкласс с экземплярами. (Например,

класс Bird с экземплярами и класс Auk с экземплярами.) Родительский класс задает

локальное свойство своим экземплярам. Вы хотите, чтобы локальной копией этого

свойства обладали также экземпляры подкласса.

Обе эти ситуации можно разрешить с помощью оператора super, работающего только

внутри функции. Он имеет специальные параметры для обращения к

ДОСТУП К МЕТОДУ НАДКЛАССА С ПОМОЩЬЮ ОПЕРАТОРА SUPER

Пусть, к примеру, нужно, чтобы гагарка приобрела исключительные качества и научилась

летать. Это означает, что вам нужен доступ к методу move родительского класса Bird. Для

доступа к методу родительского класса применяется оператор super, как продемонстриро-

вано в строке 3 приведенного ниже кода.

= function {

6

if

else trace // предложения, заставляющие гагарку

вперевалку

5

// выполняется О,

"fly"

aukl.moveO; // отображается "waddle"

Любое значение аргумента supremeEf fort, являющееся истинным, приводит к тому,

что данная версия будет выполнять метод надкласса. Это

происходит в строке 6. Если аргумент supremeEf fort не дает значения true, то

prototype . move выполняет предложение Это происходит в строке 7.

Оператор super позволяет получить доступ к методу надкласса, даже несмотря на то, что

в подклассе он подменен. Эту возможность можно использовать для добавления чего-либо к

родительскому методу, если возникнет такая необходимость. Например, гагарку можно за-

ставить ходить вперевалку (поведение подкласса), а потом летать (коллективное родительское

свойство). Это реализуется посредством следующего кода:

= function 0 {

trace // предложения, заставляющие гагарку

// ходить вперевалку

// отображается "waddle" и "fly"

Данная методика может пригодиться, если родительский метод имеет сложную функцио-

нальность, а в подкласс необходимо добавить что-то простое.

ГЛАВА 21. УПАКОВКА ДАННЫХ и ФУНКЦИЙ с помощью ПОЛЬЗОВАТЕЛЬСКИХ ОБЪЕКТОВ 523

ПОЛУЧЕНИЕ ЛОКАЛЬНЫХ свойств в ЭКЗЕМПЛЯРАХ

ПОДКЛАССА

Приведенная ниже функция-конструктор Bird задает для каждого из своих экземпляров

локальное свойство singing (пение) и коллективный метод move Каждому экземпляру

необходима собственная копия свойства singing для того, чтобы указать, поет ли птица в

данный момент. Как правило, свойство, определяющее состояние, не является коллектив-

ным, тогда как метод, в котором заключено поведение, очень легко предоставить в коллек-

тивное использование.

function Bird ( ) {

= false; // локальное свойство "singing"

= function О { // коллективный метод О

myBird = new BirdO;

// true

Пусть теперь необходимо создать функцию-конструктор Auk так, чтобы каждый ее эк-

земпляр имел собственное локальное свойство singing. Можно, конечно, продублировать

код this . singing = из конструктора Bird в конструктор Auk. Однако в этом нет

необходимости. Вместо этого можно использовать оператор super для доступа к конструкто-

ру из конструктора подкласса, как показано ниже.

function Auk () {

}

= new

= new

// true

Другие примеры использования оператора super, в том числе его использо-

вание в многоуровневой иерархии класса, приведены выше, в подразделе

"Размещение локальных свойств в иерархии наследования".

При использовании оператора super получили ненужные свойства надкласса?

Обратитесь к разделу "Возможные проблемы" в конце главы.

СВОЙСТВО CONSTRUCTOR

Каждый элемент данных и каждый объект при создании получают свойство

constructor как часть, заимствованную у класса Obj ect.

О свойстве constructor вы узнали в главе 19 "Использование встроенных

базовых объектов".

Свойство constructor является ссылкой на класс функции-конструктора. Однако, в от-

личие от оператора super, свойство constructor доступно при наличии объекта, а не толь-

ко в пределах методов и функций-конструкторов.

В свойство constructor является недокументированным, но оно определе-

но в стандарте ЕСМА-262.

524 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

В приведенном ниже примере показано, как можно использовать свойство constructor

для исполнения функции-конструктора.

function {

trace

}

= new

// отображается "running MyFunc"

Прототип (prototype), будучи объектом, также имеет свойство constructor. При первом

создании функции-конструктора (или любой другой функции) ее свойство constructor ука-

зывает на саму функцию, как можно увидеть из приведенного ниже примера.

// отображается "running MyFunc"

Однако при выделении функции-конструктора в подкласс для него с помощью функции-

конструктора создается новый объект prototype. Естественно, что свойство

constructor прототипа подкласса теперь будет ссылаться на функцию, его создавшую. Например:

function Bird ()

function Raptor 0

= new

= new

== // true

== // true

СОЗДАНИЕ ОБЪЕКТОВ-ПОТОМКОВ с помощью СВОЙСТВА

CONSTRUCTOR

Свойство constructor позволяет членам класса создавать потомков, как в приведенном

ниже примере.

function {

= "локальное свойство";

}

=

sammy = new

susie = new // sammy создает потомка, susie

Последняя строка этого кода эквивалентна предложению

susie = new О;

Выражение constructor позволяет исполнять конструктор при задании толь-

ко имени объекта класса. Имя самого класса знать не нужно. Таким образом, можно написать

функцию, объект которой создает другие объекты в своем классе, без необходимости жест-

кого кодирования имени класса в функции. Если затем передать имя объекта в функцию в

виде аргумента, мы получим родовую функцию "создания потомков":

function makeSib {

sib new

return sib;

}

susie = // эквивалент susie = new

ГЛАВА 21. УПАКОВКА ДАННЫХ и ФУНКЦИЙ с помощью ПОЛЬЗОВАТЕЛЬСКИХ ОБЪЕКТОВ 525

ИСПОЛЬЗОВАНИЕ СВОЙСТВА CONSTRUCTOR для ПРЕОБРАЗОВАНИЯ

ЭЛЕМЕНТАРНЫХ ТИПОВ ДАННЫХ В ОБЪЕКТЫ

Свойство constructor можно использовать также для преобразования элементарных

типов данных в объекты. Рассмотрим выполняющую эту операцию:

function {

obj = new

return

}

Может показаться что этот подход работает, потому что примитивы не являют-

ся объектами и обычно не обладают свойствами, такими как constructor. Однако интер-

претирующая программа ActionScript считает по-другому:

= "Bob Smith";

// "string" - строковый примитив

// "function"

Интерпретирующая программа ActionScript знает, что свойство constructor является

функцией. Если бы в строке не было функции-конструктора, то оператор type вернул бы

значение Таким образом, "за кулисами" примитивов скрывается малая толика

Фактически помимо свойства constructor, обладают и рядом

других свойств:

trace(typeof // "function"

trace(typeof // "function"

namel. proto // "object"

trace(typeof // "number"

// 9

Вы можете узнать свойства valueOf и toString как унаследованные у класса ect.

Поэтому совершенно не удивительно, что примитивы можно преобразовывать в объекты.

Но зачем это нужно?

Предположим, что из текстового файла вы скопировали список имен и присваиваете их

переменным, как в предыдущем примере с Пусть теперь необходимо добавить

свойство, например номер телефона:

=

trace (namel // ничего не отображается

// "undefined"

Этот код не работает. Свойства к примитивам добавить нельзя.

Никаких проблем. Воспользуйтесь методом для преобразования строкового

примитива в объект:

namel =

// "object"

Вот и все. Строка преобразована в объект. Теперь попытаемся добавить номер телефона:

=

trace(typeof // "string"

// "Bob Smith"

// "555-555-5555"

Код выполняется!

526 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ИСПОЛЬЗОВАНИЕ ФУНКЦИИ-КОНСТРУКТОРА для "БЕЗОПАСНОГО"

ХРАНЕНИЯ

Функции являются объектами и могут иметь свойства. Функция-конструктор является

подходящим местом хранения данных о которые не являются свойствами экземпля-

ров класса. Например, в функции-конструкторе можно хранить имя класса:

function Auk ( } {

}

aukl = new

= "Auk"; // хранит имя класса в свойстве

Теперь свойство constructor можно использовать для создания родовой функции с це-

лью извлечения значения свойства:

function getObjectType (obj) {

return

}

// "Auk"

Зачем хранить имя функции в виде ее свойства? Ведь имя функции можно хранить в объ-

екте prototype, и тогда для его извлечения не нужно использовать свойство constructor:

=

// "Auk"

С помощью прототипа доступ осуществляется гораздо проще и в большинстве ситуаций

это — лучший выбор. Однако в использовании для хранения данных свойства функции есть

одно преимущество. Вспомните, что прототип Auk "осиротеет", если вставить Auk в цепочку

наследования с помощью оператора new. Например:

// Auk

function

// функция-конструктор Bird

function Bird ( )

= "Auk";

= new

auk2 = new

// undefined

// "undefined"

Старое свойство является частью осиротевшего объекта-

прототипа. Новый объект prototype является пустым — он не имеет свойства cName.

С другой стороны, если хранить имя класса в свойстве функции-конструктора, не нужно

будет беспокоиться о том, что вы используете оператор new и, таким образом, "теряете" про-

тотип класса. К имени класса все равно можно получить доступ в самом классе.

Функцию getobj можно использовать с глобальным объектом, как показано ниже.

= "Math"; // хранить имя в свойстве cName

// "Math"

Подтверждение того, что объект Math относится к типу вряд ли покажется особо

полезным. Однако использование функции является хорошей практикой

программирования, а поддержка глобальных объектов приблизит вас к достижению этой цели.

ГЛАВА 21. УПАКОВКА ДАННЫХ и ФУНКЦИЙ с помощью ПОЛЬЗОВАТЕЛЬСКИХ ОБЪЕКТОВ 527

СОЗДАНИЕ ИЕРАРХИИ КЛАССОВ с помощью СВОЙСТВА

Иерархии классов можно путем задания указателя свойства

подкласса на свойство объекта prototype Например,

приведенная ниже строка делает Raptor подклассом Predator:

proto =

Фактически этот единственный шаг выполняет задачу, которая ранее в этой главе была

описана как весьма сложная: изменение иерархии на

Проблема изменения иерархии Bird-Raptor-Eagle-BaldEagle была рас-

смотрена ранее в этой главе, в подразделе "Потеря" объекта prototype су-

ществующего класса при использовании оператора new".

На рис. 21.2 продемонстрирован процесс задания наследования путем переуказания свой-

ства

Если класс больше использоваться не будет, его можно удалить.

В схеме, основанной на свойстве _proto_, не используется оператор new. В ней не созда-

ется новый объект В существующем объекте ни-

чего не меняется, за исключением того, что свойство _proto_ отсоединяется от класса Bird

и присоединяется к классу Predator.

Кроме того, с помощью можно создать всю исходную цепочку. Предполагая, что

функция-конструктор уже существует, код выглядел бы следующим образом:

Raptor proto =

Рис. 21.2. Стрелки показывают путь, который проходит

интерпретирующая программа ActionScript при поиске

свойств. Пунктирной стрелкой вверху показана бывшая

связь а сплошной — новая связь

528 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

proto =

proto =

В результате будет получена та же самая иерархия которая

была создана в главе 15 "Объединение предложений в функции" с помощью оператора new.

При создании наследования с помощью _proto_ самая большая проблема заключается в

переносе локальных свойств из надкласса в экземпляры класса более низкого уровня.

Процесс переноса локальных свойств из в экземпляры обсуждался

ранее в этой главе, в подразделе "Размещение локальных свойств в иерархии

наследования".

При выполнении только переуказания свойства вы вообще не получите никаких ло-

кальных свойств, поскольку не будут выполняться никакие функции-конструкторы. Кроме того,

при этом не будет работать оператор super. Чтобы обойти эту проблему, выполните следующее.

• Для выполнения функций-конструкторов используйте свойство constructor.

• Создайте свойство _constructor_ (обратите внимание на символы подчеркивания

по обе стороны от слова) в прототипе подкласса, а затем используйте оператор super,

как обычно.

При любом из этих подходов для облегчения собственной жизни можно написать функ-

цию, в которой содержался бы код задания наследования. В языке Java в этом контексте ис-

пользуется ключевое слово extends. В можно использовать любое имя функ-

ции, но все же слово extends будет понятно более широкому кругу пользователей. (Слово

extends зарезервировано в ActionScript для использования в будущем. Поэтому, чтобы из-

бежать возможных конфликтов, используйте имя myExtends.) Из-за того что оба подхода

основываются на использовании _proto_, сущность функции будет такой:

= function (superclass)

{

proto =

ИСПОЛЬЗОВАНИЕ СВОЙСТВА CONSTRUCTOR для ИСПОЛНЕНИЯ

ФУНКЦИЙ-КОНСТРУКТОРОВ

При использовании свойства constructor для исполнения функций-конструкторов

можно воспользоваться стандартной и понятной функцией extends После ее выполне-

ния вы будете знать, что subclass = superclass

поскольку это именно то, что делает функция extends

Дальнейшей целью является исполнение конструктора надкласса при заданном подклас-

се. Ниже как это можно сделать.

• Поскольку оператор new для создания наследования надкласса не использовался, то

свойство надкласса все равно должно указывать на саму

функцию-конструктор надкласса.

• В связи с тем, что свойство надкласса указывает на прототип

надкласса, то выражение вида ука-

зывает на prototype надкласса. Как только что было отмечено, это

означает саму функцию-конструктор надкласса.

• Таким для выполнения конструктора надкласса можно использовать выра-

жение следующего вида: subclass constructor

ГЛАВА 21. УПАКОВКА ДАННЫХ и ФУНКЦИЙ с помощью ПОЛЬЗОВАТЕЛЬСКИХ ОБЪЕКТОВ 529

В этом состоит основной подход. Его можно использовать для создания функции

которая подменяет функциональность метода super Сущность функции бу-

дет такой:

{

proto О

}

В этой функции subclass — это псевдокод, обозначающий подкласс. Поскольку вызов

функции mySuper () будет осуществляться из конструктора подкласса (в данном случае

Raptor), то для подкласса можно использовать Теперь функция вы-

глядит следующим образом:

{

proto

Кроме того, необходимо иметь возможность передавать аргументы в конструктор

так, чтобы экземпляры самого нижнего уровня могли задавать значения своих локаль-

ных свойств. Функция mySuper не определяет никаких аргументов. Однако в неявном ви-

де все аргументы, передаваемые в любую функцию, содержатся в объекте arguments. Вос-

пользуемся этим фактом, а также методом apply О для получения имеющего

такой вид эквивалента super

{ // на основе функции от Роберта

proto

Объект arguments и метод были рассмотрены в

главе 15 "Объединение предложений в функции".

И, наконец, последний вопрос заключается в том, где следует определить эту функцию.

Применимым может быть целый ряд вариантов. Например, в фильме f la, код ко-

торого приведен ниже, функция помещена в объект prototype.

1: = function (superclass)

2: {

=

4: }

5: function Bird {

6: = // локальное свойство "singing"

}

8: = function () { // коллективный метод move()

{

10 proto (this,

11

12

13

14

15

16

17

18

19

20

Raptor () {

(arguments)

newRap • new

// true

// function

trace (Raptor // false

// true

530 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Весь код перед строкой 16 является заданием иерархии наследования. Код, расположен-

ный после строки 16, используется для тестирования.

В строке 16 выполняется конструктор Raptor, начиная процесс создания нового объекта

Raptor.

Внутри конструктора Raptor ключевое слово this относится к родовому объекту, кото-

рый находится в процессе отнесения к членам класса Raptor. Этот объект имеет доступ к

prototype и, таким образом, может исполнить функцию Это реализу-

ется в строке 13 путем передачи аргумента, в свою очередь переданного в конструктор

raptor посредством предложения строки 16.

Внутри функции mySuper ключевое слово this все равно относится к родовому объ-

екту, а аргумент остается таким же, каким и был раньше. В строке 10 и this, и arguments

используются с методом apply для вызова конструктора

СОЗДАНИЕ в ПРОТОТИПЕ ПОДКЛАССА

Создание свойства _constructor_ в прототипе подкласса основано на следующей недо-

кументированной особенности. Если после выполнения основанного на свойстве

метода extends объект subclass указывает на

то стандартная встроенная функция super работает корректно.

В фильме newrap2 . la свойство subclass _constructor_ указывает на

надкласс в пределах метода Затем свойство

type скрывается (т.е. в циклах in оно показано не будет) с помощью

недокументированной функции ASSetPropFlags чтобы попытаться продублировать

способ, которым Flash выполняет операции в ответ на обычное предложение new. Вне метода

extends оставшаяся часть кода является полностью стандартной.

Сравните приведенный ниже код с кодом, рассмотренным ранее в этой главе,

в подразделе "Размещение локальных свойств в иерархии наследования".

Код файла f la выглядит следующим образом:

1: = function (superclass)

2: {

3: proto =

constructor = superclass;

5: constructor ,

6: }

7: function Bird ( ) {

8: = false; // локальное свойство "singing"

9: }

10: = function () { // коллективный метод

11: function Raptor () {

13: }

15: newRap = new

16: // true

17: // function

18: // false

ГЛАВА 21. УПАКОВКА ДАННЫХ и ФУНКЦИЙ с помощью ПОЛЬЗОВАТЕЛЬСКИХ ОБЪЕКТОВ 531

РАЗРАБОТКА НАДКЛАССОВ и ПОДКЛАССОВ: связи ТИПА

"являться" и "ИМЕТЬ"

Большинство методик объектно-ориентированного программирования заключается в раз-

работке иерархий и подклассов, позволяющих оптимально промоделировать область

действия задачи. Создание таких иерархий далеко от точной науки, и два программиста, ре-

шающих одну и ту же проблему, никогда не придут к созданию совершенно одинаковых реше-

ний. Тем не менее есть одно общее правило, которое редко нарушается (если нарушается вооб-

ще): подкласс должен иметь связь типа "являться" по отношению к своему

Связь ТИПА "являться"

Каждый и любой член подкласса должен принадлежать и его надклассу. Например, бело-

головый орел (BaldEagle) "является" орлом (Eagle). Орел "является" хищником (Raptor).

Хищник "является" птицей (Bird). He может быть, чтобы белоголовый орел не был орлом.

Если вы затрудняетесь создать логическую иерархию, начните с того, что подвергните ее

простому тестированию. Если между каждым подклассом и не существует связи

типа "являться", то, вероятно, структуру иерархии придется доработать.

СВЯЗЬ ТИПА "ИМЕТЬ"

Если вы обнаружите, что между двумя объектами программы существует связь типа

"иметь", то один объект может быть свойством другого. Например, птица имеет оперение.

Такая взаимосвязь называется "композицией", например "Птица состоит из оперения (и не-

скольких других Объекты, имеющие такую связь, не всегда являются хорошими

и подклассами друг для друга.

Еще одним типом связи "иметь" является клиентская связь, когда один объект использует

другой объект. Например, велосипедист использует велосипед. Опять же, "велосипед" можно

сделать свойством "велосипедиста", а не подклассом. Клиентская связь является очень широ-

кой, и к ней могут относиться взаимоотношения типа и

работник".

ПРОЯСНЕНИЕ сложных СЛУЧАЕВ

Отличия между связями типа "иметь" и "являться" не всегда могут быть такими простыми,

как это кажется на первый взгляд. Например, можно сказать: "Внутри каждого композитора

"имеется" математик". Однако это не слишком отличается от утверждения типа "Каждый

композитор также является математиком".

На помощь при прояснении сложных случаев может прийти вопрос "Можно ли изменить

такую взаимосвязь?" Если ее можно изменить, то, вероятно, это связь типа "иметь"; если нет,

то, скорее всего, это связь типа "являться".

Например, если вы считаете, что каждый композитор должен также быть математиком, то

вы имеете дело со связью типа "являться", даже несмотря на то, что в ее описании могут

встречаться слова "иметь" или "иметься".

ДЕТАЛИЗАЦИЯ ИЕРАРХИЙ КЛАССОВ: АБСТРАКЦИЯ и КОНКРЕТИЗАЦИЯ

В главе 15 "Объединение предложений в функции" упоминалось о том, что у программи-

стов есть стимул для создания сильно обобщенных классов.

532 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Преимущества создания обобщенных классов рассматривались в главе 15

"Объединение предложений в функции".

Однако не во всех случаях сразу же становится очевидно, какие свойства должны иметь

такие классы. Часто бывает легче сначала создать ряд определенных классов, выяснить, какие

свойства у них общие, а затем "абстрагировать" родительский класс с этими свойствами. Та-

кой тип абстрагирования, при котором общие свойства "выносятся за скобки", называется

"вынесением". Вынесение устраняет необходимость выполнения дублирования в подклассах

и в целом является полезной возможностью.

В результате вынесения мы получим с меньшим количеством свойств. В некото-

рых случаях для охвата непредвиденных отличий в области действия задачи приходится созда-

вать новые подклассы, часто с добавлением свойств. Например, можно создать сильно обоб-

щенный метод move и назначить его для класса предоставляя стандартный спо-

соб перемещения видеоклипов. Однако при разработке игры в настольный теннис вы можете

обнаружить, что видеоклипу теннисного мячика нужен специализированный метод move и

другие специальные свойства. Для выполнения этой задачи можно создать подкласс

pingPongBall, обладающий собственными свойствами и методом move Такой тип детали-

зации иерархии называется "конкретизацией". Он усложняет иерархию за счет создания новых

более сложных классов, и поэтому для его применения должна существовать веская причина.

Взлом объекта Math

В целом изменять значения встроенных свойств глобальных объектов нельзя, так как это мо-

жет причинять неудобства. Предположим, есть программа, в которой используется много мате-

матических функций, в том числе использующих целые числа, и вы хотите изменить

представления данных таким образом, чтобы округление производилось не до ближайшего це-

лого, а до десятых долей целого. С этой целью к объекту Math можно добавить несколько новых

методов, с помощью которых будет выполняться округление до ближайшей десятой доли числа.

Затем в программе необходимо изменить все ссылки на объект Math. Насколько легче была

бы жизнь, если бы можно было изменить только функции объекта Math!

Способ достижения этой цели существует. Он основывается на том факте, что объект Math яв-

ляется свойством объекта верхнего уровня Способ заключается во "взломе" имени

свойства Math и задании для него указателя на объект, созданный с помощью оператора new.

Ниже приведем пример кода.

х = 10.21

: // "10" - вызывает оригинал

myMath = new

proto =

=

= function (arg) {

arg *= 10;

var result =

return

10: }

=

: // "10.2" - вызывает

// пользовательское свойство

Сначала создается новый объект (строка 3). Затем используется свойство чтобы но-

вый объект выполнял поиск в объекте Math в том случае, когда он не может найти вызываемое

свойство локально (строка 4). Этот шаг очень важен, поскольку "реальный" объект Math будет

"скрыт" за вашим объектом, и доступ к нему можно будет получить только посредством этой

связи proto , Если вы хотите добавить новое свойство и при этом все равно иметь

ГЛАВА 21. УПАКОВКА ДАННЫХ и ФУНКЦИЙ с помощью ПОЛЬЗОВАТЕЛЬСКИХ ОБЪЕКТОВ 533

ность доступа к старому, то в новом объекте создайте свойство, указывающее на старое

(строка 5). Теперь создайте новую математическую функцию (строки 6-10).

В строке 11 происходит "преступление". Здесь вы "крадете" имя "Math" в и

создаете его указатель на новый объект.

Вот и все. Строка 12 только подтверждает, что эта процедура работает: теперь

выполняет округление до одного десятичного разряда, в отличие от строки 2, где округление

проводилось до целого числа.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему я не могу подменить методы получения/задания ?

При использовании метода addProperty обычным способом функции получе-

ния/задания подменять нельзя. Например, предположим, что есть такое предложение:

function MyClass (> {

}

Методы и

будут выполняться, когда свойство myProp соответственно считывается или записывается.

Теперь создадим подкласс с методами, имеющими те же самые имена, что и в прототипе:

function MySubClass ()

new

= function () {

// предложения

= function (arg) {

// предложения

И наконец, мы создаем экземпляр подкласса и получаем или задаем свойство myProp:

myObj = new

// получение

= "Gary // задание

Вы надеетесь, что будут выполняться методы подкласса. Но этого не произойдет. Выпол-

няться будут методы надкласса. Это не дефект, а просто реалии жизни.

Почему при использовании оператора super я получаю ненужные свойства из

В целом предложение super следует выполнять в первой строке конструктора под-

класса. При этом последовательные предложения в конструкторе подкласса могут подменять

свойства, созданные Если предложение super будет выполнено в конструк-

торе позднее, то возникает риск того, что предложение в конструкторе надкласса может под-

менить предложение в конструкторе подкласса, а это не совсем то, как обычно работают

классы.

Предположим, к примеру, что создан универсальный класс Window, который Предостав-

ляет функциональность, необходимую для создания системы управления окнами во Flash.

534 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Этот класс задает для всех своих экземпляров два локальных свойства (помимо многих дру-

гих): — булеву величину, указывающую, развернуто или свернуто окно в данный мо-

мент, и bg — шестиразрядное число, определяющее фоновый цвет.

function Window () = {

= true; развернуто

this.bg = // белый фон по умолчанию

}

Теперь предположим, что для определенного узла необходимо создать окна с растровым

фоном. Для этого необходимо создать новый класс, сделать его подклассом

Window, подменить свойство bg родительского класса и выполнить предложение super

так, чтобы экземпляры класса Bitwindow получили остальные локальные свойства (в дан-

ном случае — minMax) головного класса.

Однако вы ошиблись и выполнили предложение super после подмены свойства bg. В

результате экземпляры класса Bitwindow получат свойство bg из головного класса, а не рас-

тровое свойство bg.

function Bitwindow () {

this.bg = // растровый фон по умолчанию

//

}

= new

= new

// 16777215 (то же, что и OxFFFFFF) - не то, что нужно!

Если поместить предложение super в первую строку конструктора Bitwindow, то эк-

земпляры класса Bitwindow получат растровое свойство bg.

ГЛАВА 21. УПАКОВКА ДАННЫХ и ФУНКЦИЙ с помощью ПОЛЬЗОВАТЕЛЬСКИХ ОБЪЕКТОВ 535

ГЛАВА

КОМПОНЕНТЫ

ЭТОЙ

Использование встроенных компонентов 537

Создание новых компонентов 545

Возможные проблемы 558

ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ КОМПОНЕНТОВ

Во Flash 5 компания Macromedia представила функцию Clips (Интеллектуальные кли-

пы), разработанную как способ создания анимации с параметрами. Smart — это видеокли-

пы с назначенными параметрами. Путем добавления действий и сценариев можно создавать пе-

реключатели, меню и другие элементы, реагирующие на щелчки мышью. Благодаря появлению

компонентов во Rash MX эта возможность перенесена на качественно новый уровень.

Несмотря на преимущества возможностей создания анимации, получения коллективного

доступа к данным и повторного использования кода, главный недостаток функции Smart

Clips (который быстро обнаружили профессионалы Flash) заключался в том, что она не соот-

ветствовала объектно-ориентированной конструкции А поскольку

провозглашался как самое лучшее изобретение Flash, то эта проблема для очень многих раз-

работчиков была весьма актуальной.

Разработчики могут не только создавать специализированный пользовательский интер-

фейс для компонентов, но и использовать функцию динамического предварительного про-

смотра. Это позволяет увидеть, как именно будут выглядеть используемые компоненты. Про-

цедура создания специализированного пользовательского интерфейса и функция динамиче-

ского предварительного просмотра будут рассмотрены далее в этой главе, при описании

процедуры создания собственных компонентов.

На панели Components (Компоненты) показаны встроенные компоненты Flash. Можно

сразу же заметить, что они разработаны для использования в формах.

Существуют два способа добавления Flash-компонентов в файлы. Самый очевидный из

них заключается в перетаскивании экземпляра компонента с рабочего поля в файл. Второй

способ заключается в добавлении компонентов программным образом с помощью метода

Для этого во временной шкале выделите кадр, в котором предполагается раз-

местить компонент, откройте панель Actions (Действия) в режиме Expert и создайте функ-

цию, предназначенную для создания экземпляра компонента. В приведенном ниже коде по-

казано, как добавить экземпляр компонента CheckBox (Флаговое поле) с именем

и со значением unchecked (флажок не установлен).

Для компонентов можно создать функции изменения обработчика событий, которые бу-

дут активизироваться при выборе пользователем элемента меню. Лучше всего создать функ-

цию обработчика, определяющую действия, а затем использовать ее в качестве параметра

компонента. Обработчик изменения всегда принимает, по крайней мере, один параметр,

представляющий собой измененный экземпляр компонента.

В приведенном ниже примере рассматривается функция обработчика для двух

флаговых полей, каждое из которых является отдельным компонентом. В функции исполь-

зуются предложения позволяющие увидеть, какое из флаговых полей является вы-

деленным, и затем на основе этого открыть соответствующее окно списка:

function

if {

} else if {

Каждый компонент имеет набор параметров, определяющих его внешний вид и поведе-

ние. На рис. изображен компонент CheckBox с доступными для него параметрами.

КОМПОНЕНТ

Компонент ComboBox (Комбинированный управляющий элемент) предоставляет не-

сложный способ создания простого выпадающего меню, позволяющего пользователю вы-

брать нужный элемент из списка.

В приведенном ниже примере рассматривается процедура формирования комбинирован-

ного окна, предоставляющего пользователю список чисел, из которых он может выбрать

нужное. К примеру, при создании формы для заказа какого-то товара такой список будет

очень удобен для указания количества единиц выбранного товара. Начните с перетаскивания

экземпляра компонента ComboBox в рабочее поле.

1. Выделите комбинированное окно в рабочем поле. При этом на панели инспектора

свойств будут отображены параметры компонента. Присвойте имя экземпляру компо-

нента.

2. На панели инспектора свойств выделите параметр Labels (Надписи) и щелкните на

значке с изображением лупы, в результате чего откроется всплывающее окно Values

(Значения).

3. Параметр Labels содержит список значений, которые пользователь может выбрать из

раскрывающегося меню.

4. В открывшемся окне Values щелкните на знаке "плюс", чтобы вывести новое значение.

538 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

22. /. Для каждого компонента можно параметры, его внешним

видом и работой

5. Выделите поле Default Value (Значение по умолчанию) и в качестве первого значения

введите Щелкните на знаке "плюс", чтобы вывести следующее значение.

6. Выделите поле Default Value и введите значение 2. Таким же образом введите значения

5.

7. Щелкните на кнопке ОК, чтобы закрыть окно Values.

8. Протестируйте фильм для проверки работы файла . la. Вы должны увидеть комбини-

рованное окно с имеющимися элементами для выбора (рис. 22.2).

Рис. 22.2. Комбинированное окно позволяет посетителям вы-

брать нужный элемент из меню с заданными вами пунктами

КОМПОНЕНТ

Компонент позволяет создать список элементов, которые можно выделить. Поль-

зователи могут выбирать нужные элементы из представленного вами списка. Элементы в по-

ле списка представлены не в виде меню, а в формате списка. Кроме того, в отличие от комби-

нированного окна, пользователь может выбрать больше одного элемента. Для формирования

ГЛАВА 22. КОМПОНЕНТЫ 539

поля списка начните с перетаскивания экземпляра компонента ListBox в рабочее поле, а за-

тем выполните следующие действия.

1. С помощью инструмента Arrow (Стрелка) выделите поле списка в рабочем поле.

На панели инспектора свойств будут отображены параметры поля списка.

2. На панели инспектора свойств присвойте имя экземпляру поля списка, например

3. Выделите параметр Labels, а затем щелкните на значке с изображением лупы, в резуль-

тате чего откроется всплывающее окно Values (Значения).

4. Щелкните на знаке чтобы вывести новое значение.

5. Выделите поле Default Value и в качестве первого значения введите Television.

6. Щелкните на знаке "плюс", чтобы вывести следующее значение.

7. Выделите поле Default Value и введите Таким же образом введите значе-

ния Magazine, Book и Internet.

8. Щелкните на кнопке ОК, чтобы закрыть окно Values.

9. На панели инспектора свойств выделите параметр Select Multiple (Выбор нескольких

элементов), а затем из всплывающего меню выберите пункт True. Активизирование

данной опции позволит пользователям выбирать из списка одновременно несколько

элементов.

10. Протестируйте фильм, чтобы увидеть поле списка в действии. Имейте в виду, что поль-

зователи могут выбирать из него несколько элементов. На рис. 22.3 показан данный

компонент в действии.

Рис. 22.3. Компонент ListBox позволяет выбрать не-

сколько элементов. Обратите внимание на то, что эле-

менты представлены в виде списка, а не в виде меню

КОМПОНЕНТ CHECKBOX

Помимо того, что флаговые поля позволяют сделать выбор типа "да" или "нет" (а это их наи-

более распространенная область применения в Internet), еще один способ их применения за-

ключается в предоставлении пользователям возможности выбирать или снимать выделение всех

элементов поля списка всего одним щелчком мышью. При наличии в списке большого количе-

ства элементов возможность выделения всех их сразу будет для пользователя гораздо лучшей

опцией, чем работа с полным полем списка и выбор нужных элементов по отдельности.

Как при работе с другими компонентами, начните с перетаскивания экземпляра в рабо-

чее поле. Затем выполните следующие действия.

1. Выделите флаговое поле в рабочем поле и присвойте экземпляру компонента имя

2. Выберите параметр Label, а затем введите Select all options (Выбрать все эле-

менты). Если весь текст надписи не виден на рабочем поле, расширьте флаговое поле с

помощью инструмента Free Transform (Свободное преобразование).

3. Выберите параметр Change Handler (Изменить обработчик), а затем введите

onSelectAll.

540 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Параметр, указанный в шаге 3, является именем функции, которая вызывается, когда во

флаговом поле устанавливается или снимается флажок.

Эту операцию мог бы выполнить приведенный ниже сценарий.

function {

== true) {

} {

В связке с полем списка, процедура создания которого была описана в предыдущем под-

разделе, данный сценарий работает образом. Сначала он проверяет, было ли вы-

делено пользователем поле списка, т.е. == true. Затем вызывается

метод для компонента ListBox. Затем этот метод передает массив

элементов, определяющих опции поля списка. Число индексов должно быть равно числу оп-

ций поля списка, а первым индексом должен быть 0.

После этого вызывается метод setEnable поля списка, который передает значение

для отключения поля списка.

При тестировании фильма будут показаны поле списка, рассмотренное в предыдущем

подразделе, а также флаговое поле. Параметр Change Handler используется для указания

функции изменения обработчика, которая вызывается при изменении флагового поля или

переключателя.

I Функции были рассмотрены в главе 15 "Объединение предложений в функции"

ПЕРЕКЛЮЧАТЕЛИ

Переключатели позволяют пользователю выбрать одну из нескольких опций. Известные

также под названием кнопок групп опций, они могут использоваться для того, чтобы обеспе-

чить пользователю возможность выбрать, например, опции его возраста или подобные, из ко-

торых правильной является только одна. Начините с перетаскивания трех экземпляров ком-

понента переключателя в рабочее поле, а затем выполните следующие действия.

1. Выделите первый (верхний) переключатель в рабочем поле и присвойте экземпляру

имя, например

2. Выберите параметр Label и введите Large.

3. Выберите параметр Initial State (Исходное состояние), а затем из всплывающего меню

выберите значение True. Переключатель Large будет выделен по умолчанию.

4. Выберите параметр Group Name, а затем введите sizeGroup.

5. Повторите шаги для второго (среднего) переключателя и задайте его параметры

следующим образом: введите в качестве имени экземпляра, — для

параметра Label, параметра Initial State и параметра

Group Name.

6. Повторите шаги для третьего (нижнего) переключателя и задайте его параметры сле-

дующим образом: введите в качестве имени экземпляра, Small параметра

Label, для параметра Initial State и параметра Group Name.

7. Протестируйте файл . la. Вы должны увидеть три переключателя с выбранной опци-

ей Large. Щелкните в полях остальных опций и убедитесь, что их также можно вы-

брать. Созданная группа опций изображена на рис. 22.4.

ГЛАВА 22. КОМПОНЕНТЫ 541

Рис. 22.4. Группа переключателей позволяет выбрать

только одну опцию. Если выбирается несколько опций,

проверьте, не является ли параметр Group для

всех переключателей одним и тем же

НАЖИМНЫЕ кнопки

Нажимные кнопки используются для отправки формы на сервер или для сброса данных

формы. Независимо от того, создана ли форма с помощью Flash или какой-то другой Web-

технологии, кнопка является последним элементом, на котором щелкает пользователь перед

отправкой данных. Большинство форм имеет две кнопки: одну — для отправления формы, а

другую — для сброса данных в случае ошибки. Для создания нажимной кнопки выполните

следующие действия.

Г. Перетащите экземпляр нажимной кнопки в рабочее поле и выделите его. Параметры

экземпляра будут указаны на панели инспектора свойств.

2. В текстовое поле Instance Name введите

3. Для параметра Label введите значение Reset.

4. Для параметра Click Handler (Обработчик щелчка) введите — имя функ-

ции, которая будет вызываться после щелчка пользователем на кнопке Reset (Сброс).

5. Повторите шаги для второй нажимной кнопки и задайте ее параметры следующим

образом: введите в качестве имени экземпляра, для параметра

Label и для параметра Click Handler. На рис. 22.5 изображены две кнопки

со свойствами для кнопки Submit.

6. При тестировании фильма будут изображены две кнопки, на каждой из которых можно

щелкнуть. Попробуйте щелкнуть на кнопке Reset, чтобы убедиться, что при этом будут

сброшены все остальные компоненты.

ПРОКРУЧИВАЮЩЕЕСЯ ТЕКСТОВОЕ ПОЛЕ ,

В прокручивающемся текстовом поле, обычно расположенном в нижней части формы,

отображается сообщение обратной связи с пользователем, либо же оно используется для

приема от пользователя текста произвольной формы. Ниже описано, как задать компонент

для отображения сообщения в конце процедуры заказа товара. В программе не существует

отдельного компонента Scrolling Text Box (Прокручивающееся текстовое поле), и поэтому вы

можете прийти в замешательство, не зная, с чего начать. Не волнуйтесь. Вскоре вы увидите,

что процедура вставки на самом деле очень проста.

1. Выделите инструмент Text (Текст). Затем откройте панель инспектора свойств, если

она до сих пор не отображена. Для этого из меню Window (Окно) выберите пункт Prop-

erties (Свойства).

2. Присвойте экземпляру имя

3. Из раскрывающегося меню Туре (Тип) выберите пункт Dynamic (Динамический), а за-

тем щелкните на кнопке Show Border Around Text (Отобразить границу вокруг текста).

4. Из раскрывающегося меню Line Type (Тип строк) выберите пункт Multiline

(Многострочный).

542 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

5. С помощью панели инспектора свойств измените размеры поля сообщения так, чтобы

оно соответствовало макету формы. Размер может быть любым, который вы считаете

6. Перетащите экземпляр компонента ScrollBar (Полоса прокрутки) и отпустите его

справа от поля сообщения. Полоса прокрутки автоматически присоединится к тексто-

вому полю, делая его прокручивающимся.

7. Выделите полосу прокрутки, которая присоединена к текстовому полю Messages

(Сообщения) в рабочем поле. Ее свойства будут отображены на панели инспектора

свойств. В качестве значения параметра Target (Целевое текстовое поле) вве-

дите как показано на рис. 22.6.

На заметку Во Flash MX динамические текстовые поля и поля ввода данных являются эк-

земплярами объекта ActionScript TextField, и имена им могут быть присвое-

ны так же, как видеоклипам и другим объектам.

Рис. 22.6. К полосе прокрутки добавляются свойства, а целевое текстовое поле совпадает с

именем текстового поля, в котором размещена полоса прокрутки

ПОЛОСА ПРОКРУТКИ

Из самого названия компонента следует, что полоса прокрутки позволяет пользователю

прокручивать текстовое поле. Как вы узнали в предыдущем подразделе, в котором описыва-

лась процедура создания прокручивающегося текстового поля, данную функциональность

реализует компонент ScrollBar (Полоса прокрутки).

ГЛАВА 22. КОМПОНЕНТЫ 543

Если перетащить компонент ScrollBar с панели Components (Компоненты) и отпустить его

справа от текстового поля, полоса прокрутки автоматически присоединится к текстовому полю.

Параметр Target компонента ScrollBar указывает имя экземпляра объекта

TextField, к которому присоединяется полоса прокрутки.

Экземпляру полосы прокрутки имя присваивать не нужно.

ИСПОЛЬЗОВАНИЕ ПАНЕЛИ LIBRARY с КОМПОНЕНТАМИ

При добавлении компонента в файл на панель Library (Библиотека) добавляется папка Flash

Components (Компоненты пользовательского интерфейса Flash), как показано на рис. 22.7.

Панель Library имеет следующие элементы.

• Видеоклип компонента, представленный в виде пиктограммы типа компонента.

• Папка Component Skins (Оболочки библиотеки) с подпапкой Global Skins (Глобальные

оболочки), содержащей графические элементы, применимые ко всем компонентам, а

также подпапкой Skins (Оболочки) для отдельных типов компонентов.

• Папка Core Assets (Основные средства), содержащая средства для опытных разработ-

чиков, в том числе прикладной программный интерфейс Data Provider (Источник

данных) и иерархию классов, используемую компонентами.

В папке Skins содержатся графические символы, которые используются для отображения

типа компонента в файле. В папке Global Skins (Глобальные оболочки) содержится инфор-

мация, общая для всех компонентов.

Все оболочки можно отредактировать обычным образом. Очевидно, что редактирование

оболочек влияет на внешний вид компонентов, имеющихся в документе.

Flash

Component

В

В

Movie Clip

Movie Clip

Movie

Movie

vie Clip

Clip

Clip

Folder

Folder

При использовании компонента на па-

нели Library отображаются данные о нем

544 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

РЕДАКТИРОВАНИЕ ОБОЛОЧЕК

Редактировать оболочки для изменения внешнего вида компонентов в рабочем поле мож-

но точно так же, как и при работе с любой другой графикой. Можно также создать новые

графические изображения и разбить их на элементы оболочки.

Если вы предпочитаете создать новое графическое изображение и разбить его на части, то

его элементы необходимо зарегистрировать как компоненты. Это делается путем редактиро-

вания кода в первом кадре слоя Me каждой оболочки библиотеки.

При выполнении редактирования вы изменяете все экземпляры компонентов, в которых

используются отредактированные оболочки. Изменять оболочки отдельных экземпляров

компонентов нельзя.

СОЗДАНИЕ новых КОМПОНЕНТОВ

До сих пор мы рассматривали встроенные компоненты Flash MX. Вы, вероятно, обратили

внимание, что все они являются полями форм, которые можно редактировать в соответствии

с потребностями форм. Однако компоненты могут быть всевозможными — программируе-

мыми кнопками, полями форм самых разных размеров и контуров, которыми можно управ-

лять, или элементами любых типов, которые могут использоваться неоднократно, с разными

параметрами. Чтобы увидеть эти компоненты в действии, просмотрите кнопки компонентов

в библиотеке Flash.

В этом подразделе мы рассмотрим создание прямоугольника с программируемыми оп-

циями изменения ширины и высоты. Хотя при создании настоящего компонента этого, воз-

можно, и не стоит делать, для иллюстрации процесса мы создадим прямоугольник, имеющий

такие изменяющиеся свойства: ширину, высоту, окраску и еще один параметр, который по-

зволяет управлять применением окраски.

НАЧАЛО СОЗДАНИЯ СОБСТВЕННОГО КОМПОНЕНТА

Каждый компонент начинается одним и тем же образом: с видеоклипа. После создания

видеоклипа производится добавление нужного кода для класса, свойств и мето-

дов прямоугольника. Затем устанавливается связь видеоклипа с определением класса.

Подробная информация о видеоклипах приведена в главе 17 "Демонстрация

мощи видеоклипов".

Начнем с создания видеоклипа и присвоим ему имя Rectangle Component (Компонент

прямоугольника). В пределах видеоклипа нарисуем прямоугольник. Залить его можно любым

цветом. С помощью панели инспектора свойств зададим ширину и высоту прямоугольника:

15x30 пикселей.

Откроем панель Align (Выравнивание) и выровняем прямоугольник по центру горизон-

тально и по нижнему краю вертикально. Проверьте, чтобы опция Align To (Выровнять по)

была установлена в значение То Stage (По рабочему полю). Поскольку мы хотим иметь воз-

можность масштабировать прямоугольник, то необходимо знать, что основание прямоуголь-

ника будет оставаться статичным. На рис. 22.8 показан правильно выровненный прямоуголь-

ник нужных размеров.

ОПРЕДЕЛЕНИЕ КЛАССА ПРЯМОУГОЛЬНИКА

Процедура группирования данных об объекте называется созданием класса. К процедуре

создания класса относится и определение свойств объекта. В данном случае мы определяем

свойства прямоугольника.

ГЛАВА 22. КОМПОНЕНТЫ 545

в

NX

Уверенность в правильном выравнивании при создании компонента означает, что при

изменении размеров прямоугольника его основание останется правильно позиционированным

Подробная информация о классах приведена в главе 15 "Объединение

предложений в функции".

Следующий шаг заключается в создании нового слоя видеоклипа и присвоении ему име-

ни Откройте панель Actions в режиме а затем добавьте следующий код:

#initclip

function {

= new

// Разрешить RectangleClass наследовать класса MovieClip

new

// Обновить начертание прямоугольника с текущим основанием и значения-

ми высоты

= function () {

if {

= 30 *

= 15 *

// Связать класс с идентификатором связи для данного видеоклипа

546 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Код определяет класс компонента. Прежде чем продолжить, рассмотрим отдельные части

этого кода, которые можно перенастроить и использовать для других компонентов.

ПРЕДЛОЖЕНИЯ #INITCLIP и #ENDINITCLIP

Новые предложения Flash MX, tfinitclip и ttendinitclip, используются ис-

ключительно при создании и определении компонентов. При создании компо-

нента вы определяете конструктор класса и методы, а затем регистрируете класс.

Предложения #initclip и #endinitclip размечают код определения компонента. Код

внутри предложений при воспроизведении фильма выполняется только один раз. Кроме то-

го, он всегда выполняется перед любым другим кодом во временной шкале фильма. Это

большой шаг вперед по сравнению с ограничениями, существовавшими во Flash 5. Раньше

приходилось ждать полной загрузки ключевого кадра, и только после этого становились дос-

тупными определенные методы; теперь это происходит сразу же.

ОПРЕДЕЛЕНИЕ КОНСТРУКТОРА

Показанная здесь функция определяет конструктор компонента.

Когда компонент создан во Flash, вызывается конструктор и выполняются действия.

function

Подробная информация о конструкторах приведена в главе 15 "Объединение

предложений в функции".

СОЗДАНИЕ НАСЛЕДОВАНИЯ

Сразу же после конструктора должна быть указана приведенная ниже строка кода; она

должна стоять перед определением любых методов класса.

= new

При создании команды о присоединении определения класса к видеоклипу Flash автома-

тически присваивает тип видеоклипа типу (в данном случае — класса), определенному вами.

Проблема с реализацией данной функциональности заключается в том, что фактически вы

хотите, чтобы видеоклип функционировал как видеоклип.

Чтобы обойти эту проблему, используется приведенный в этом подразделе код, который

указывает, что новый класс должен наследовать методы и свойства видеоклипов.

ОБНОВЛЕНИЕ ПРЯМОУГОЛЬНИКА

В приведенном ниже методе используются текущие ширины и высоты прямо-

угольника. Метод выясняет, хотите ли вы применить окраску, и, если это так, он выполняется

и применяет ее. Умножаемые значения заданы равными 30 и 15, что соответствует размерам

нарисованного прямоугольника. Данный метод гарантирует, что масштабирование будет вы-

полняться корректно:

= function () {

if {

}

= 30 *

= 15 *

ГЛАВА 22. КОМПОНЕНТЫ 547

РЕГИСТРАЦИЯ КЛАССА

Последняя команда, является наиболее важной. Она связывает класс с клипом

в идентификаторе связи:

МЕТОДОВ СЧИТЫВАНИЯ и ЗАПИСИ

Теперь, глядя на созданный ранее код, пришло время двигаться дальше и добавить к нему

другие методы и свойства, необходимые для компонента Rectangle (Прямоугольник). Стан-

дартные подразделяются на два типа: задание и получение. Операции получения

возвращают значения свойства, а операции задания перерисовывают прямоугольник при из-

менении значений свойств.

На панель Actions (Действия) следует добавить приведенный ниже код. Его необходимо

разместить после предложения наследования, но до окончания блока В этом

коде нет ничего такого, что не рассматривалось бы раньше, поэтому разбивать его на части и

анализировать каждую из них мы не будем. На этом этапе код уже говорит сам за себя.

= function (b) {

= b;

0

}

= function () {

return

}

= function {

= h;

}

= function О {

return

}

= function (c) {

=

}

= () {

= true;

ОПРЕДЕЛЕНИЕ свойств КОМПОНЕНТОВ

Может возникнуть вопрос, почему до сих пор еще ничего не сделано для преобразования ви-

деоклипа в компонент. Причина этого очень проста. Она заключается в том, что существует

логический порядок создания компонентов и поэтому сначала добавляется сценарий и подоб-

ные элементы. Теперь, когда мы имеем прямоугольник, можно определить его параметры.

Откройте панель Library (Библиотека) и выделите фильм компонента Rectangle. Открой-

те контекстное меню и выберите из него пункт Component Definition (Определение компо-

нента), в результате чего откроется одноименное диалоговое окно, изображенное на рис. 22.9.

Для добавления параметров воспользуйтесь кнопками с изображениями знаков "плюс" и

"минус", расположенными в верхней части диалогового окна. По умолчанию добавляемые

548 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ

I

Preview:

|

Options: in

О in

P. 5 диалоговом окне Component Definition можно

задавать параметры любого созданного компонента

свойства относятся к типу Default (По умолчанию) и значению value (Значение

по умолчанию). Во Flash можно добавить параметры следующих типов:

Default (По умолчанию);

Array (Массив);

Object (Объект);

List (Список);

String (Строка);

Number (Число);

Boolean (Булева величина);

Font Name (Имя шрифта);

Color (Цвет).

Окошко в верхней части диалогового окна разбито на четыре столбца. В столбец Name

(Имя) добавляется текст, который будет отображаться на панели инспектора свойств. В столбце

Variable (Переменная) указывается имя, которое будет использоваться в сценариях компонента.

Имя переменной должно соответствовать стандартным правилам наименования переменных

(без пробелов и т.п.). В столбце Value (Значение) указывается начальное значение свойства, а в

столбце Туре (Тип) — тип параметра, соответствующий приведенному выше списку.

Для созданного компонента Rectangle следует добавить свойства, указанные в табл.

ТАБЛИЦА 22.1. СВОЙСТВА КОМПОНЕНТА RECTANGLE

Имя

Base Length (Длина основания)

Height (Высота)

Tint Color (Цвет окраски)

Apply Tint (Применить окраску)

ПЕРЕМЕННАЯ

rbase

rheight

rcolor

applyTint

ЗНАЧЕНИЕ

30

15

#00000 0

false

Тип

Number (Число)

Number (Число)

Color (Цвет)

Boolean (Булева величина)

ГЛАВА 22. КОМПОНЕНТЫ 549

К компоненту можно добавить текстовое описание, которое позволит остальным пользо-

вателям понять, какую функцию выполняет данный компонент. Для добавления текстового

описания щелкните на кнопке Set (Задать), расположенной рядом с текстовым полем De-

scription (Описание), а затем введите нужное описание.

XML-описания

В качестве альтернативы текстовому описанию, чтобы добавить на панель Actions

пользовательское действие, можно создать XML-документ. XML-файл будет доступным, если он

размещен в папке

Оставим пиктограмму компонента назначенной по умолчанию и проигнорируем опции

Live Preview (Текущий просмотр) и Custom UI (Специализированный интерфейс пользова-

теля). Эти опции будут описаны кратко.

Предпоследняя опция диалогового окна Component Definition позволяет управлять бло-

кировкой параметров. Блокировка разрешает или запрещает пользователям добавлять или

удалять параметры при размещении компонента в рабочем поле. Опция Display in Compo-

nents Panel (Отобразить на панели Components) позволяет отображать компонент на панели

Components. Установите флажок в ее поле. Подробнее данные опции будут описаны ниже.

ДОБАВЛЕНИЕ СОБСТВЕННОЙ ПИКТОГРАММЫ

Одной из опций, которая упоминалась в предыдущем подразделе, является возможность

создания собственной пиктограммы для компонента. Если она будет создана, то именно она

и будет отображаться на панелях Library (Библиотека), Movie Explorer (Проводник фильма)

или Components (Компоненты) (если вы укажете отображать там компоненты).

Для добавления пользовательской пиктограммы сначала необходимо создать ее графиче-

ское изображение либо в Fireworks, либо в другом приложении для создания графики. Можно

даже создать графический файл во Flash и экспортировать его в формате PNG.

Чтобы пиктограмма отображалась корректно, ее размеры не должны превышать 20x20

пикселей.

После создания и сохранения файла его необходимо импортировать в библиотеку. Чтобы

быть уверенным в том, что Flash распознает этот файл как пользовательскую пиктограмму, в

библиотеке сначала необходимо создать новую папку. Назовите эту папку и

импортируйте в нее графическое изображение.

Закройте и снова откройте панель Library. Теперь рядом с компонентами должна появить-

ся новая как показано на рис.

ЗАДАНИЕ ИДЕНТИФИКАТОРА связи

Следующий шаг заключается в закрытии видеоклипа и возврату к основной сцене филь-

ма. Для создания идентификатора связи щелкните правой кнопкой мыши на новом компо-

ненте на панели Library и из контекстного меню выберите пункт Properties. При этом откро-

ется окно Symbol Properties (Свойства символа). Щелкните на кнопке Advanced

(Дополнительно), чтобы открыть расширенное диалоговое окно.

Установите флажок в поле опции Export for ActionScript (Экспортировать для

а все остальные поля оставьте пустыми. Затем в поле Identifier (Идентификатор)

введите ID, ранее созданный для прямоугольника. В данном случае введите Frectangle, как

показано на рис.

ТЕСТИРОВАНИЕ

В основном разработка компонента завершена, код ActionScript добавлен. Теперь пришло

время узнать, что произойдет при использовании нового компонента.

550 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Symbol Properties

t

Component

Rectangle Component

Folder

Component

т

...

CM

frame

•

Рис. 22. JO. При создании пользовательской

пиктограммы Flash отобразит ее на панелях

Library, Explorer и Components

Рис. Идентификатор связи добавляют в

диалоговом окне Symbol Properties. Необходи-

мо совпадение с созданным ранее идентифика-

тором, в данном случае

Перетащите экземпляр компонента из библиотеки в рабочее поле. При тестировании

фильма на этом этапе будет показан прямоугольник в том виде, в каком он был нарисован.

Для редактирования свойств компонента можно воспользоваться панелью инспектора

свойств. Чтобы отредактировать отображенные значения, щелкните в соответствующем

столбце и измените числа. В данном случае были изменены параметры ширины и высоты

компонента. Обратите внимание на то, что изменения отображаются только при тестирова-

нии фильма. На этапе разработки их не видно. На рис. изображен измененный прямо-

угольник. Кроме того, можно поэкспериментировать с параметрами окраски, изменяя значе-

ние false на true и выбирая цвет окраски.

УСТАНОВКА КОМПОНЕНТА НА ПАНЕЛИ COMPONENTS

Чтобы установить компонент на панели Components, начните с добавления компонента,

его пиктограммы и любых других символов, использующихся с данным компонентом, в но-

вую папку панели Library. Этот шаг гарантирует, что все элементы будут храниться вместе. На

рис. 22.13 изображена вновь созданная папка, в которой хранятся видеоклип, папка пользо-

вательских пиктограмм и пиктограмма компонента.

Для установки компонента необходимо разместить файл в нужном месте. После

этого при запуске панели Flash загрузит в нее данный компонент.

Место размещения файла зависит от операционной системы и используемых на-

строек. Данные размещаются в папке отдельной для каждого пользователя

и расположенной в месте хранения операционной системой информации о приложениях.

На Если папка не видна, проверьте, чтобы для

всех скрытых файлов и папок было выбрано значение visible (видимые).

Некоторые примеры приведены в табл. 22.2.

ГЛАВА 22. КОМПОНЕНТЫ 551

Рис. При тестировании фильма видно, как изменились свойства компонента

Component

I Rectangle

.

Component

-:

Рис. Поместив все элементы компонента

в одну папку, вы облегчите жизнь и себе, и дру-

гим пользователям данного компонента

552 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ТАБЛИЦА 22.2. МЕСТА УСТАНОВКИ КОМПОНЕНТОВ

ОПЕРАЦИОННАЯ СИСТЕМА Имя ПАПКИ

C:\Documents and

Windows 98 и ME Data\Macromedia\Flash

Windows NT

Hard

Mac OS 9.1 Hard

t

Mac OS 9.x Hard

(многопользовательская) Con

СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА

До настоящего момента мы занимались созданием компонента, рассматривали свойства и

вставляли код там, где было необходимо. Одно из самых лучших качеств Flash MX заключает-

ся в возможности управления вопросами удобства и простоты использования элементов

программы. Создание пользовательского интерфейса является одним из примеров реализа-

ции этой возможности.

Пользовательский интерфейс представляет собой файл Flash-фильма, который позволяет

пользователям вводить значения свойств, такие как, например, ширина и высота, без обра-

щения к панели инспектора свойств. Созданный интерфейс можно запустить с панели ин-

спектора свойств или с панели Component Parameters (Параметры компонентов).

Фильм интерфейса должен иметь возможность получения значений, задаваемых пользо-

вателем. В данном случае такими значениями являются rbase, rheight, rcolor и

ApplyTint.

Ключевым элементом, который необходимо иметь в пользовательском интерфейсе, явля-

ется экземпляр создаваемого видеоклипа, именуемый xch. Передача значений компоненту

осуществляется путем записи пользовательским интерфейсом значений в свойства экземпля-

ра хсп, например tbase =

Интерфейс должен позволять пользователям вводить нужные им значения так, чтобы при

тестировании или публикации компонента значения xch копировались в

Для создания пользовательского интерфейса выполните следующие действия.

1. Создайте новый Flash-фильм и задайте его размеры равными 70x400 пикселей. Таковы

ориентировочные размеры панели инспектора свойств.

2. Вставьте в фильм пустой видеоклип и назовите его Change.

3. Поместите экземпляр клипа в рабочее поле и назовите его xch.

4. Создайте в фильме текстовые поля для параметров ширины, высоты, красного, зеле-

ного, синего цветов и для значений 0-255.

5. Определите используемые текстовые поля как предназначенные для извлечения значе-

ний свойств rbase и rheight. Создайте поля для ввода данных основания и высоты,

ГЛАВА 22. КОМПОНЕНТЫ 553

затем разместите их над соответствующим полем статического текста и задайте имена

экземпляров соответственно как и ht.

6, Задайте текстовые поля ввода данных, предназначенные для извлечения окраски.

Создайте три текстовых поля для ввода данных, присвойте им имена gc, и Ьс

(соответственно для красного, зеленого и синего цветов) и разместите их над

соответствующим полем статического текста.

7, Чтобы пользователь мог предварительно просмотреть цвет, создайте элемент мозаич-

ного изображения, который указывает текущий параметр окраски. Для создания квад-

рата воспользуйтесь инструментом рисования. Преобразуйте этот квадрат в видеоклип

и присвойте экземпляру имя

Чтобы указать, хочет ли пользователь применить цвет окраски, можно воспользоваться

предварительно определенным Flash-компонентом Откройте панель

Components и перетащите компонент флагового поля в нужное место рабочего поля.

В окне (Свойства) задайте текст Apply Tint? (Применить а зна-

чение по умолчанию для установите равным Для свойства Change Handler

(Обработчик изменения) введите

Последним шагом будет написание кода специализированного пользовательского ин-

терфейса. В кадр 1 нового слоя введите следующий код:

// Задать значения свойств по умолчанию

=

xch.rheight = 15;

xch.rcolor =

= false;

// Задать исходные текстовые поля для основания и высоты

= 30;

15;

// Задать исходный мозаичный элемент окраски и текстовые поля цветов

tsc = new

= =

0)

// Задав значения красного, зеленого и синего создайте

полное

// значение цвета, задайте мозаичный элемент окраски и верните

// полное значение цвета.

function g, b) {

var col=r 16 | g 8 | b;

return

}

// Задав целое число с, привяжите его к значениям в диапазоне от О

до 255

function boundColor (с) {

if

return

if (с < 0) {

с = 0;

} else if (с > 255) {

с = 255;

}

return с;

554 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ

// При изменении текстовых полей цветов измените цвет окраски

// и задайте соответствующее свойство в экземпляре xch

= function () {

=

}

= function {

=

}

= function () {

xch.tcolor = setTintSq

Parselnt

}

// Флаговое поле (с) вызывает эту когда ус-

танавливает

// или снимает флажок. Соответственно задайте свойство applyTint

экземпляра xch

function tintApply (с) {

=

= function ()

return (0.5 * *

9. Сохраните фильм на жестком диске и протестируйте его. При этом будет создан файл

. расположенный там же, где и сохраненный фильм.

На Если вы планируете сохранить свой компонент как фильм формата Flash 5, то

связь с ним необходимо установить как с внешним, а не как с внедренным

файлом.

10. Объедините специализированный пользовательский интерфейс с фильмом Rectangle.

Для этого вернитесь к фильму Rectangle, откройте панель Library (Библиотека) и выбе-

рите компонент Rectangle. Далее откройте диалоговое окно Component Definition

(Определение компонента) и щелкните на кнопке Set (Задать), расположенной справа

от поля опции Custom UI (Специализированный пользовательский интерфейс).

11. В группе опций Туре (Тип) установите переключатель в поле Custom UI with file

embedded in file (Специализированный пользовательский интерфейс с файлом

внедренным в файл Другая опция, Custom UI in external file

(Специализированный пользовательский интерфейс во внешнем файле . позво-

ляет хранить специализированный пользовательский интерфейс вне прямоугольника

(это хорошо для тестирования, но не для реализации). При выборе данной опции необ-

ходимо не только ввести абсолютный путь к файлу (это означает, что в случае исполь-

зования компонента на другой платформе путь должен быть но и

распределить оба файла.

12. В группе опций Display (Отображение) установите переключатель в поле Display in

Property Inspector (Отобразить в инспекторе свойств).

13. Щелкните на кнопке Browse, расположенной под полем Custom UI file (Файл

. swf специализированного пользовательского интерфейса), и укажите местоположе-

22. КОМПОНЕНТЫ 555

ние файла . либо щелкните на кнопке Update (Обновить), если местоположение

данного файла уже указано и вы хотите перезагрузить пользовательский интерфейс.

14. Щелкните на кнопке ОК. Теперь при выделении прямоугольника в рабочем поле и от-

крытом окне Properties вы должны увидеть свой пользовательский интерфейс.

На Если специализированный пользовательский интерфейс сразу не виден,

пробуйте закрыть и перезагрузить Flash. Прежде чем переходить к предвари-

тельному просмотру текущих данных, убедитесь, что специализированный

пользовательский интерфейс виден.

Теперь при редактировании свойств компонента вы должны увидеть отображенный поль-

зовательский интерфейс во всей красе и за работой.

СОЗДАНИЕ А ТЕКУЩЕГО ПРОСМОТРА

Фильм просмотра позволяет пользователю увидеть, как будет выглядеть компо-

нент при публикации. Как мы уже заметили, изменения, вносимые посредством пользователь-

ского во время разработки не отображаются. Использование фильма текущего про-

смотра позволяет пользователю вносить изменения в параметры и сразу же видеть их.

Фильм текущего просмотра предназначен для просмотра только основных характеристик

компонента, таких как цвет и размер, что очень подходит для рассматриваемого в данной гла-

ве компонента прямоугольника. Однако данный режим не очень подходит для предваритель-

ного просмотра анимации, поскольку фильм текущего просмотра выполняется со скоростью

всего 1 кадр в секунду.

В отличие от специализированного пользовательского интерфейса, устанавливающего

значения в пределах объекта xch и передающего их в компонент, фильм текущего просмотра

считывает значения прямо из объекта. Текущий просмотр реализуется путем активизации

функции, вызываемой посредством определенного вами события

Flash активизирует функцию onUpdate при внесении изменений, а пользователю сооб-

щается, когда предварительный просмотр требует обновления.

Перед детальным анализом и созданием текущего просмотра необходимо на секунду ос-

тановиться и подумать об отличиях между компонентом и фильмом текущего просмотра.

В большинстве случаев таких отличий будет совсем немного, и при использовании экзем-

пляра фактического компонента все будет работать наилучшим образом. Однако при приме-

нении к прямоугольнику цвета окраски вы не сможете его перемещать (можете только изме-

нять цвет). Поэтому было бы очень кстати, если бы пользователи могли видеть прямоуголь-

ник как с примененной окраской, так и без нее.

Для достижения этой цели в режиме текущего просмотра создайте два прямоугольника. Ис-

ходный прямоугольник будет отображаться без применения окраски, а второй прямоуголь-

ник — с окраской. Затем укажите, какой из них следует отображать, исходя из выбора пользова-

теля. Для создания фильма предварительного просмотра выполните следующие действия.

1. Создайте новый Flash-фильм с теми же размерами, что и у прямоугольника, — 15x30

пикселей.

2. Добавьте в файл два слоя. Один из них назовите Tinted (Окрашенный), а другой —

Plain (Обычный).

3. В слое Plain создайте прямоугольник, имеющий тот же цвет, размеры и т.п., что и

компонент.

4. Преобразуйте прямоугольник в видеоклип с именем plain rectangle и присвойте

его экземпляру имя (Обычный прямоугольник).

556 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

5. В слой Tinted поместите копию экземпляра и переименуйте ее, присвоив имя

rtint.

Создайте слой (Действия), в котором будет содержаться ранее упоминавшая-

ся функция Эта функция будет считывать значения свойств и соответст-

венно корректировать размеры прямоугольника. Код сообщит функции onUpdate,

следует ли отображать окрашенный или обычный прямоугольник.

7. В кадр 1 слоя Actions добавьте код:

// Данная программа вызывается, когда свойства компонента были из-

менены.

// Перерисуйте прямоугольник с новыми значениями. Если применена ок-

раска,

// используйте прямоугольник rtint. Если окраску не нужно

// используйте прямоугольник

var ас = b h =

tc._xscale = 30 * b;

= 15 * h;

=

=

if (ac) {

}

rtint =

rp. visible =

}

// Есть две копии — для предварительного про-

смотра обычного

// неокрашенного прямоугольника

rtint — для предварительного просмотра окрашенного прямоуголь-

// По умолчанию отображается только обычный

= false;

// Применить цвет Color для окраски.

rp_color = new

8. Убедитесь, что текущий просмотр разрешен. В нижней части меню Control

(Управление) должен быть помечен галочкой пункт Enable Live Preview (Разрешить

текущий просмотр). Если галочки нет, добавьте ее.

9. Сохраните файл и протестируйте его, в результате чего будет создан файл . необ-

ходимый для связи с компонентом.

10. Откройте диалоговое окно Component Definition (Определение компонента) для ком-

понента Rectangle и щелкните на кнопке Set (Задать), расположенной рядом с полем

Live Preview (Текущий просмотр).

11. Установите переключатель в поле опции Live Preview with file embedded in file

(Текущий просмотр с файлом внедренным в файл При выборе данной

опции файл предварительного просмотра будет связан с компонентом. Дважды щелк-

ните на кнопке ОК, чтобы закрыть диалоговое окно Component Definition. Когда вы

вернетесь к рабочему полю, выполняться будет не компонент, а фильм предваритель-

ного просмотра.

ГЛАВА 22. КОМПОНЕНТЫ 557

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

вижу своего компонента на панели Components. Почему?

На панели Components по умолчанию показан ряд компонентов пользовательского ин-

терфейса Flash. Рядом с названием стоит значок открытия выпадающего меню. Щелкните на

нем и появится ли файл, в котором вы сохранили прямоугольник. Если да, то

выберите его, и тогда появятся компонент и выбранная для него пиктограмма. Если файл

есть, а компонента нет, то, вероятно, вы забыли установить флажок в поле опции in

Components Panel диалогового окна Component Definition. Если в раскрывшемся меню не

указано имя файла, это значит, что вы не поместили файл в нужную папку.

Мне нужно отредактировать часть кода. Могу ли я вносить изменения прямо из

каталога?

Если возникнет необходимость отредактировать код, то лучше всего удалить существую-

щий файл из каталога First Run и области хранения данных, внести изменения в его отдель-

ной копии, а затем вставить его обратно в каталог First Run.

558 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ГЛАВА

ИСПОЛЬЗОВАНИЕ ОБУЧАЮЩИХ

ВЗАИМОДЕЙСТВИЙ

В ЭТОЙ ГЛАВЕ...

Взаимосвязи и шаблоны 559

Использование перетаскивания 567

Заполнение бланка 569

Активные объекты 570

Активные области 570

Множественный выбор 571

Истина или ложь

Обратная связь, отслеживание знаний и навигация 572

Возможные проблемы 574

Flash за работой: использование системы LMS 574

ВЗАИМОСВЯЗИ и ШАБЛОНЫ

В настоящее время огромная область разработок посвящена созданию интерактивных обу-

чающих программ. Зная об этом, компания Macromedia поставляет с пакетом Flash MX ряд

встроенных обучающих взаимодействий, позволяющих любому пользователю создавать ком-

плексные интерактивные обучающие программы в изолированном приложении или в прило-

жении, которое пересылает данные на серверную систему управления обучением (Learning

Management System). Можно работать с отдельным обучающим взаимодействием или с тем, в ко-

тором система LMS используется для отслеживания совокупных результатов. Имейте в виду,

что, прежде чем приступить к планированию и созданию обучающих проектов, нуждающихся в

отслеживании, необходимо приобрести серверную систему LMS, соответствующую стандарту

(Aviation Industry CBT Committee — Комитет профессиональной компьютерной подготов-

ки в авиапромышленности) или (Shareable Content Object Reference Model — объектная

эталонная модель совместно используемого содержимого).

Кроме того, ваша система должна соответствовать определенным ограничениям совмес-

тимости броузеров для отслеживания взаимодействий. Пользователи Windows

должны иметь броузеры Internet Explorer 4.0 или Netscape 4.0 либо последующих версий. На

компьютерах Macintosh в броузерах Internet Explorer отслеживание вообще невозможно, по-

этому пользователи должны установить броузеры Netscape версии 4.5 или выше.

ИСПОЛЬЗОВАНИЕ ОБУЧАЮЩИХ ВЗАИМОДЕЙСТВИЙ

Обучающие взаимодействия Flash MX можно использовать одним из двух способов. По-

ставляемые с программой шаблоны контрольных вопросников полностью доступны для ре-

дактирования с точки зрения разработки, но они имеют встроенный код предна-

значенный для отслеживания набранных очков и передачи их в систему LMS, совместимую

со стандартом SCORM или AICC.

Кроме того, можно использовать изолированные взаимодействия, которые можно редак-

тировать в соответствии со своими потребностями и дизайном. Такие взаимодействия можно

редактировать с точки зрения графической перспективы.

Результаты, полученные при использовании изолированных взаимодействий, можно об-

работать и передать только в систему LMS. Для использования отслеживания, совмес-

тимого со SCORM, необходимо использовать шаблон контрольного вопросника.

В этом месте вы можете запаниковать только от самой идеи использования шаблона. Дело

в том, что в большинстве случаев пользователей смущает, что при использовании шаблона

существует привязка к определенному стилю и макету, и все будут знать о том, что вы поль-

зуетесь шаблоном. Об этом не стоит беспокоиться, поскольку вы будете иметь полный кон-

троль над графическим содержимым шаблона, а также сможете полностью регулировать за-

даваемые вопросы. При этом в шаблоне имеется полнофункциональный вопросник со встро-

енной системой навигации, и разработку можно будет сразу же протестировать.

Во Flash MX имеются три обучающих шаблона: guiz_stylel, quiz_style2 и

quiz_style3. Доступ к ним можно получить с помощью команды from Template

на основе шаблона). Содержимое всех шаблонов одинаково и состоит из сле-

дующих составных элементов:

• вводная страница;

• страница навигации;

• страница результатов;

• обучающее взаимодействие;

• код ActionScript для отслеживания результатов.

Процедура создания вопросника во Flash очень проста. Достаточно выполнить следующие

действия.

1. Выполните команду from Template, в результате чего откроется диалоговое

окно New Document (Создать показанное рис. 23.1.

2. Из списка Category (Категория) выберите пункт Quiz (Вопросник). При этом в правой

части диалогового окна будут отображены пункты трех шаблонов

3. Взгляните на три пункта шаблонов, расположенных в списке Category Items

(Элементы категории). Перемещая курсор от одного шаблона к другому, в окне пред-

варительного просмотра вы сможете увидеть стиль каждого из них (рис. 23.2).

560 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

fliosdeatl

. '

j re

lot

[

В диалоговом окне Document можно выбрать один

из трех шаблонов с которым вы хотите работать

Adt

Menus

I this to an

quiz, with option* for

23.2. Прежде чем выбрать шаблон вопросника, каждый из них

можно предварительно просмотреть, щелкнув на пункте шаблона

4. Выберите шаблон, с которым хотите работать, а затем щелкните на кнопке Create

(Создать). Flash создаст полный рабочий фильм со всеми необходимыми компонента-

ми вопросника.

5. Сохраните файл.

На заметку При первом сохранении файла Flash автоматически предложит сохранить его

копию, поскольку файл был создан на основе шаблона.

После создания файла в рабочем поле появятся вопросник и взаимодействия. На рис. 23.3

показано, что все слои вопросника располагаются на временной шкале.

ГЛАВА 23. ИСПОЛЬЗОВАНИЕ ОБУЧАЮЩИХ ВЗАИМОДЕЙСТВИЙ 561

a I » я » 40 к к т

Рис. 23.3. После создания файла в рабочем поле появятся вопросник и взаимодействия. Все слои

сразу же будут видны на временной шкале

ДОБАВЛЕНИЕ ПАРАМЕТРОВ

Вопросник нельзя использовать без добавления параметров, управляющих тем, как поль-

зователи будут видеть вопросы, а также внешним видом и порядком отображения вопросов.

Вопросы могут появляться в определенной последовательности или случайным образом.

Кроме того, параметры управляют использованием системы LMS и тем, увидят ли пользова-

тели страницу результатов.

При выборе опции отображения пользователи увидят вопросы, появ-

ляющиеся друг за другом в виде обычной линейной последовательности. Отображение вопросов

в случайном порядке удобно, когда вы хотите представить вопросник пользователям несколько

раз, но при этом изменить порядок вопросов. Если порядок отображения вопросов изменяется,

то пользователям сложнее будет записать ответы и использовать их в дальнейшем.

Фильм содержит панель Instructions (Инструкции), расположенную в рабочем поле. Она

используется для добавления и управления параметрами вопросника. Перед заданием пара-

метров необходимо щелкнуть на панели Instructions и выбрать компонент Quiz (Вопросник).

Панель Instructions предоставляется только для вашего удобства — пользова-

тели ее никогда не видят.

Для задания параметров вопросника необходимо заполнить панель Component Parame-

(Параметры компонента). Сначала откройте ее из меню Window и по необходимости из-

мените размеры.

Заполните панели в соответствии со своими потребностями. Приведенная ниже инфор-

мация поможет составить оптимальный вопросник.

562 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

• Чтобы отображать вопросы в случайной последовательности, установите флажок в по-

ле опции Randomize (Расположить в случайном порядке).

• В текстовом поле to Ask (Задать вопросов) можно указать число вопросов,

задаваемых пользователям.

• При задании в этом поле значения 0 пользователи всегда будут видеть все вопросы.

• Если вопросник содержит, к примеру, 12 вопросов, а в текстовом поле вы укажете

меньшее число, то пользователи будут видеть только указанное количество вопросов.

• Если в текстовом поле указано число, превышающее число имеющихся вопросов,

пользователи увидят все вопросы, однако дважды они отображаться не будут.

• Если для использования вопросника пользователи должны а вы

не используете систему LMS, совместимую с AICC, то Flash перенаправит пользовате-

лей по указанному на этой панели адресу URL для регистрации.

• При использовании системы LMS введите название деятельности и ID системы LMS.

Если вы не используете эти поля можно проигнорировать.

• Чтобы в конце вопросника пользователи могли увидеть свои результаты, установите

флажок в поле опции Show Results Page (Показать страницу результатов).

Заполненная панель должна выглядеть приблизительно так, как показано на рис. 23.4.

ДОБАВЛЕНИЕ ВЗАИМОДЕЙСТВИЙ

Созданная на основе шаблонов временная шкала имеет восемь ключевых кадров. К ним

относятся экран приветствия (ключевой кадр 1), экран результатов (ключевой кадр 8) и шесть

ключевых кадров вопросника. Шаблон вопросника можно увидеть в любой момент, протес-

тировав фильм.

Процедура помещения вопросов в вопросник проста. В любой момент вы добавляе-

те ключевые кадры со взаимодействиями или удаляете существующие. Единственное прави-

Randomize

Show Results Рад»

. .

Puc. 23.4. Панель Component необходимо заполнить до со-

ставления вопросов

ГЛАВА 23. ИСПОЛЬЗОВАНИЕ ОБУЧАЮЩИХ ВЗАИМОДЕЙСТВИЙ 563

ло, которое следует запомнить, состоит в следующем: первый и последний ключевые кадры

должны содержать соответственно экран приветствия и страницу результатов, вопросы

(взаимодействия) необходимо размещать в слое Interactions (Взаимодействия) на временной

шкале в нужном порядке.

Текст на странице приветствия и странице результатов можно редактировать в соответствии

с собственным стилем, цветовой гаммой и т.п. Важно только помнить, что на этих страницах не

могут содержаться обучающие взаимодействия и что при редактировании текста необходимо ос-

тавить какие-то инструкции, чтобы пользователи, например, знали, что для перехода к следую-

щему вопросу им необходимо щелкнуть на кнопке (Далее). Динамические текстовые поля

на странице изменять не нужно, поскольку это приведет либо к неправильному ото-

бражению вопросов, либо вообще к невозможности их отображения.

Взаимодействия на других экранах можно корректировать или удалять, исходя из своих

потребностей и дизайна узла. Начнем с самого простого.

УДАЛЕНИЕ ВЗАИМОДЕЙСТВИЯ

Процедура удаления взаимодействия очень проста, но нужно быть внимательным и удалить

взаимодействие из всех необходимых слоев. В слое Interactions выберите ключевой кадр с не-

нужным взаимодействием. Затем можно выполнить одно из двух действий. Можно удалить со-

держимое, нажав клавишу <Delete> или <Backspace>, и тогда данный ключевой кадр можно бу-

дет использовать, добавив в него другое взаимодействие. Кроме того, можно полностью удалить

кадр из временной шкалы, выполнив команду Remove Frame Удалить кадр).

Обязательно проверьте, чтобы все слои на временной шкале оканчивались в одной точке.

КОНФИГУРИРОВАНИЕ ВЗАИМОДЕЙСТВИЯ

В шаблоне вопросника содержится по одному из шести типов обучающих взаимодействий.

Они хранятся в видеоклипах, расположенных на панели Library (Библиотека). Каждый видеоклип

выполняет роль контейнера элементов, составляющих взаимодействие. Перед редактированием

взаимодействия в соответствии со своими потребностями его необходимо разбить на части.

Чтобы сконфигурировать взаимодействие, выполните следующее.

1. В слое Interactions щелкните на ключевом кадре, содержащем компонент, подлежащий

конфигурированию.

2. Выберите обучающее взаимодействие, а затем выполните команду Break Apart

на части). Команда Break Apart используется для разбивки

групп, экземпляров и растров на отдельные элементы. В данном случае команда позво-

ляет конфигурировать обучающее взаимодействие.

3. Снимите выделение всех элементов, содержащихся в рабочем поле. Для этого выпол-

ните команду All все выделение) либо воспользуйтесь

комбинацией клавиш

4. Щелкните на панели Instructions обучающего взаимодействия, расположенной слева от

рабочего поля.

5. Откройте панель Component Parameters, выполнив команду Pa-

rameters. Заполните панель Component Parameters (укажите имя и ID взаимодейст-

вия, если вы используете систему LMS). На рис. 23.5 показана панель, заданная по

умолчанию для взаимодействия True/False.

6. Введите вопрос или инструкцию, которую должны выполнить пользователи. Затем

щелкните на кнопке Options, чтобы открыть одноименный экран, в котором можно

указать параметры Feedback (Обратная связь), Knowledge Track (Отслеживание зна-

ний) и Navigation (Навигация), как показано рис. 23.6.

7. Воспользуйтесь кнопкой Assets (Элементы), чтобы изменить элементы обучающего

взаимодействия.

После настройки первого взаимодействия сохраните и протестируйте файл.

564 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

|A of Hooded

Frog.

• .I

I ' .. .

•

23.5. Панель Component Parameters используется

для добавления вопросов и указания возможных ответов

PMC. 6. Яд экране Options панели Component Parameters можно до-

бавить и изменить обратную связь с пользователями, а также задать

параметры отслеживания знаний и навигации

На В документах, созданных на основе шаблона вопросника, для каждого обучаю-

щего взаимодействия необходимо установить флажок в поле Knowledge Track,

а переключатель группы Navigation — в положение Off

ГЛАВА 23. ИСПОЛЬЗОВАНИЕ ОБУЧАЮЩИХ ВЗАИМОДЕЙСТВИЙ 565

Будьте осторожны при

При разбивке обучающих взаимодействий соблюдайте осторожность. Разбить нужно элементы, а не

фактический компонент. При разбивке компонента обучающего взаимодействия будет разбит код

и вопросник перестанет корректно функционировать. Если это произошло, то лучше всего

полностью удалить взаимодействие, вставить новое из библиотеки и начать все заново.

Шесть типов обучающих взаимодействий будут подробно описаны далее в этой главе.

ДОБАВЛЕНИЕ ВЗАИМОДЕЙСТВИЯ НА ВРЕМЕННУЮ ШКАЛУ

При использовании шаблона необходимо последовательно добавить взаимодействия на

временную шкалу. При добавлении взаимодействий в уже созданный Flash-документ их

можно добавить либо в один кадр временной шкалы, либо в последовательные кадры для по-

следовательных вопросов.

ДОБАВЛЕНИЕ ВЗАИМОДЕЙСТВИЯ НА ВРЕМЕННУЮ ШКАЛУ ШАБЛОНА

Если вы хотите добавить взаимодействие на шкалу шаблона, выберите в слое In-

teractions кадр, в котором содержится вопрос, предшествующий тому, который вы хо-

тите вставить. Воспользуйтесь меню для добавления нового пустого ключевого кадра. На-

ходясь в слое Interactions, выполните команду Insert Frame (Вставить кадр), а затем, выделив

новый кадр, выполните команду Insert Blank Keyframe (Вставить пустой ключевой кадр), чтобы

преобразовать новый кадр в ключевой. После этого выполните следующие действия.

Процедура конфигурирования взаимодействий была описана ранее в этой

главе, в подразделе "Конфигурирование взаимодействия".

1. Откройте панель Library данного документа и вы-

берите папку 2_Learning Interactions (рис. 23.7).

2. Выделите только что вставленный ключевой кадр

и перетащите один из компонентов обучающего

взаимодействия в рабочее поле.

3. Разместите компонент где он должен появ-

ляться, а затем сконфигурируйте взаимодействие.

ДОБАВЛЕНИЕ ВЗАИМОДЕЙСТВИЯ НА ВРЕМЕННУЮ

ШКАЛУ СУЩЕСТВУЮЩЕГО ДОКУМЕНТА

Процедура добавления взаимодействия на времен-

ную шкалу существующего документа аналогична про-

цедуре добавления взаимодействия на временную шкалу

шаблона, описанной в предыдущем подразделе.

Откройте документ, в который вы хотите добавить

обучающее взаимодействие, и, находясь в соответст-

вующем слое, вставьте пустой ключевой кадр. Откройте

панель библиотеки обучающих взаимодействий

(рис. 23.8), выполнив команду Li-

Learning Interactions библиоте-

взаимодействия). Затем выполните

операции добавления и конфигурирования обучающего

взаимодействия так, как это делалось для шаблона.

0

Drop

8

В Hot

В

Choice

or Fata

Рис. В папке Inter-

содержатся обучающие

взаимодействия, которые можно

добавить в вопросник

566 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ИСПОЛЬЗОВАНИЕ ПЕРЕТАСКИВАНИЯ

1, (т

Из самого названия Drag and Drop (Перетаскивание) что данное обучающее

взаимодействие позволяет пользователям перетаскивать элементы по экрану, а затем отпус-

кать их в каком-то месте. Эта возможность широко используется для реализации совпадения

контуров или для создания "ажурных" взаимодейст-

вий, где результат является очень важным.

Обучающее взаимодействие Drag and Drop может

поддерживать максимум восемь объектов и восемь це-

левых элементов. В целях тестирования объекты мож-

но отпускать в любом месте экрана. Они могут иметь

несколько целевых элементов, например объект 1 и

объект 3 могут иметь один целевой элемент 7.

Целевые элементы не должны иметь совпадающих

объектов. Таким образом, реализуется необходимый

для тестирования выбор правильного ответа из не-

скольких предложенных.

КОНФИГУРИРОВАНИЕ ОБУЧАЮЩЕГО

ВЗАИМОДЕЙСТВИЯ DRAG AND DROP

Как и при работе со всеми обучающими взаимо-

действиями, первое, что необходимо сделать после

размещения взаимодействия в рабочем поле, — это

разбить его на части и открыть панель Component Pa-

rameters. Далее следует сконфигурировать взаимодей-

ствие, выполнив следующие действия.

1. Внесите в столбец Drag Object Name (Имя объ-

екта перетаскивания) имена экземпляров объек-

тов перетаскивания.

2. Имейте в виду, что каждый объект

Рис. 23.8. На панели Library содер-

жатся взаимодействия, которые

можно добавить в любой документ,

а не только в шаблоны

ния должен иметь уникальное имя. При каждом добавлении объекта перетаскивания в

обучающее взаимодействие необходимо возвращаться к панели и присваивать ему имя.

3. В столбце Matches Target Name (Имя совпадающего целевого элемента) перечислите

имена экземпляров целевых элементов, как показано на рис. 23.9. Как и объекты пере-

таскивания, каждый целевой элемент должен иметь уникальное имя.

4. Если вы хотите, чтобы объекты вернулись в начальные положения в случае, если их пе-

ретащат не на целевые элементы, установите флажок в поле опции Snap to Start

(Привязать к начальному положению).

целевые элементы

Каждому объекту перетаскивания, указанному в столбце Drag Object Name, должен быть по-

ставлен в соответствие экземпляр целевого элемента, имя которого указывается в столбце

Matches Target Name.

Однако можно иметь экземпляр целевого элемента, которому не поставлен в соответствие эк-

земпляр объекта перетаскивания. Таким образом, можно иметь целевые элементы, к которым

пользователи смогут привязывать объекты, но которые не будут считаться правильными соот-

ветствиями.

ГЛАВА 23. ИСПОЛЬЗОВАНИЕ ОБУЧАЮЩИХ ВЗАИМОДЕЙСТВИЙ 567

items to the correct

•

Рис. 23.9. Все должны иметь уникальные имена. Это отно-

сится как к объектам перетаскивания, так и к целевым элементам

ОБЪЕКТОВ ПЕРЕТАСКИВАНИЯ и ЦЕЛЕВЫХ ЭЛЕМЕНТОВ

По умолчанию обучающее взаимодействие Drag and Drop имеет шесть объектов и шесть

соответствующих целевых элементов. Flash MX позволяет добавлять и удалять объекты и эле-

менты, доводя их максимальное число до восьми, а минимальное — до одного.

В качестве упражнения создайте символ видеоклипа, содержащий графическое изображе-

ние объекта перетаскивания. Если вопросник связан с автомобилями и в данный момент во

взаимодействии имеется пять автомобилей, то необходимо создать графическое изображение

шестого, седьмого и восьмого автомобилей (столько, сколько требуется). Далее выполните

следующие действия.

1. Поместите новое графическое изображение в библиотеку. Выбрав обучающее взаимодейст-

вие Drag and Drop, перетащите новый символ или символы с панели Library в рабочее поле.

2. На панели инспектора свойств задайте имя экземпляра каждого нового символа.

3. На панели Component Parameters добавьте имя экземпляра.

4. Повторите процесс присвоения имени для каждого нового добавляемого экземпляра.

Это все, что нужно сделать. Остальную работу компонент сделает самостоятельно в про-

цессе исполнения. Необходимо только сохранить и протестировать файл, чтобы убедиться,

что не возникает неожиданных проблем.

УДАЛЕНИЕ ОБЪЕКТОВ ПЕРЕТАСКИВАНИЯ

Экземпляр объекта перетаскивания можно удалить, выделив его в рабочем поле и приме-

нив команду удаления. Помните о том, что необходимо также удалить имя экземпляра уда-

ленного объекта с панели Component Parameters. Если вы забудете сделать это и зарегистри-

руете какие-либо "отвлечения", фактически не находящиеся в рабочем поле, Rash не преду-

предит вас об этом до тех пор, пока фильм не будет протестирован. Только на этом этапе

будет отображено сообщение об ошибке результата отслеживания.

568 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ЗАПОЛНЕНИЕ БЛАНКА

Вероятно, вы уже пришли к заключению, что обучающие во MX на-

званы очень логично. Взаимодействие Fill in the Blank (Заполнение бланка) позволяет поль-

зователям заполнить бланк, чего и следовало ожидать.

В обучающем взаимодействии Fill in the Blank имеется текстовое поле, в котором указан

вопрос, задаваемый пользователям, текстовое поле, в которое пользователи могут ввести свой

ответ, кнопка управления, позволяющая пользователям увидеть, правильно ли они ответили

на вопрос, и текстовое поле обратной связи, в котором отображается информация, иниции-

руемая после щелчка на кнопке управления.

КОНФИГУРИРОВАНИЕ ВЗАИМОДЕЙСТВИЯ FILL IN THE BLANK

Сконфигурировать взаимодействие Fill in the Blank очень легко. Сначала нужно открыть

панель Component Parameters точно так же, как это делалось при работе с другими обучаю-

щими взаимодействиями. На панели Component Parameters может быть размещено до трех

правильных ответов на поставленный вопрос (рис.

Существуют такие альтернативы задания вопросов.

• Введите на панели правильный ответ (или ответы) и установите флажок в поле опции

Correct (Правильный).

• Укажите, что правильными ответами являются не те, которые были введены. Для

этого на панели введите неправильные ответы, снимите флажок с поля опции Correct

и установите его в поле Other Responses (Другие ответы).

Укажите, чувствительны ли требуемые ответы к регистру символов. Для этого установите

или снимите флажок с поля опции Case Sensitive (Чувствительный к регистру). Затем уста-

новите флажок в поле Exact Match (Точное совпадение), если пользователи должны вводить

ответ точно в таком же виде, как его ввели вы. Если флажок в поле опции Exact Match не ус-

in The Blank

Is the latest called?

Flash MX

Введите на панели максимум три приемлемых ответа либо

укажите только ответы, неправильными

ГЛАВА 23. ИСПОЛЬЗОВАНИЕ ОБУЧАЮЩИХ ВЗАИМОДЕЙСТВИЙ 569

то взаимодействие будет распознавать ответ по правильно введенному слову. Если

верным ответом на вопрос будет считаться просто а пользователь вводит Flash MX,

то ответ будет считаться правильным.

АКТИВНЫЕ ОБЪЕКТЫ

Название Hot Object (Активный объект) для обучающего взаимодействия может показать-

ся несколько странным. Это название менее очевидно, чем другие. Обучающее взаимодейст-

вие Hot Object позволяет вам задать вопрос, а пользователям — выбрать один или несколько

правильных ответов из ряда графических изображений. Например, если тема вашего вопрос-

ника связана с автомобилями, то пользователям можно показать от одного до восьми изобра-

жений автомобилей и задать вопрос, на который может быть несколько правильных ответов.

К можно спросить, какие автомобили изготовлены концерном Ford или какие мо-

дели уже сняты с производства.

КОНФИГУРИРОВАНИЕ ОБУЧАЮЩЕГО ВЗАИМОДЕЙСТВИЯ НОТ OBJECT

Если вы хотите сконфигурировать обучающее взаимодействие Hot Object, начните с раз-

бивки его на части и открытия панели Component Parameters. Заполнение панели для взаи-

модействия Hot Object теперь покажется очень простым. При выполнении этой задачи необ-

ходимо следовать той же логике, что и в предыдущих случаях. Начните с задания взаимодей-

ствия и его ID, затем введите вопрос, на который должны будут отвечать пользователи, и

установите флажок в поле опции Correct напротив каждого правильного ответа.

ДОБАВЛЕНИЕ и УДАЛЕНИЕ ВАРИАНТОВ АКТИВНЫХ ОБЪЕКТОВ

Варианты активных объектов добавляют и удаляют точно так же, как это делалось с объ-

ектами перетаскивания (взаимодействие Drag and Drop). Необходимо создать дополнитель-

ные графические изображения в символах видеоклипов и перед размещением в рабочем поле

добавить их на панель Library. После этого можете обратиться к инструкциям подраздела о

взаимодействии Drag and Drop.

Инструкции по работе с объектами перетаскивания приведены выше, в под-

разделе "Конфигурирование обучающего взаимодействия Drag and Drop".

АКТИВНЫЕ ОБЛАСТИ

Обучающие взаимодействия Hot Spot (Активная область) заданы так, что для указания

правильного ответа на вопрос пользователю необходимо щелкнуть в определенной области

(или областях) экрана.

Единственное отличие Hot Spot от взаимодействия Hot Object заключается в том, что пер-

вое является некоторой областью, а второе — фактическим объектом.

Как и в случае с остальными взаимодействиями, для конфигурирования взаимодействия

Hot Spot его сначала необходимо разбить на части и открыть панель Component Parameters.

На панели пометьте каждый возможный ответ как правильный или неправильный, причем

правильных ответов может быть несколько.

Опция Up State Alpha (Прозрачность в ненажатом состоянии) позволяет задать прозрач-

ность области до того, как пользователь щелкнет на ней мышью. Полной прозрачности соот-

ветствует значение 0.

570 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Кроме того, можно задать прозрачность области в нажатом состоянии (Down State Area). Дан-

ная опция управляет прозрачностью области после того, как пользователь щелкнет на ней мышью.

Это поможет, к примеру, затенить выбранные ответы, подчеркивая, что на уже щелкали.

Добавлять и удалять объекты Hot Spot можно точно же, как и при работе с другими

обучающими взаимодействиями.

МНОЖЕСТВЕННЫЙ ВЫБОР

Взаимодействия Multiple Choice (Множественный выбор) позволяют пользователям вы-

брать ответ или ответы из вариантов, предложенных на экране. Можно указать,

имеет ли каждый вопрос только один или несколько правильных ответов. К каждому вопросу

имеется шесть возможных ответов (однако предлагать пользователям именно такое количест-

во вариантов совсем необязательно). Для взаимодействия Multiple Choice они нумеруются не

по порядку, а буквами от до F (в английском алфавите).

Как всегда, для конфигурирования взаимодействия следует воспользоваться панелью

Component Parameters. На панели введите возможные ответы, а затем вопрос, задаваемый

пользователям. Пометьте соответствующие ответы как правильные или неправильные.

ДОБАВЛЕНИЕ ВАРИАНТОВ МНОЖЕСТВЕННОГО ВЫБОРА

По умолчанию предлагается шесть вариантов множественного выбора, о чем уже упоми-

налось в предыдущем подразделе. Однако число возможных вариантов можно увеличить до

восьми или, наоборот, уменьшить, удалив ненужные.

Для добавления вариантов множественного выбора выполните следующие действия.

1. На временной шкале выберите кадр, содержащий взаимодействие Multiple Choice. За-

тем выполните команду и откройте папку Flash Components

(Компоненты пользовательского интерфейса Flash), расположенную на панели Library.

2. Перетащите компонент Check Box (Флаговое поле) в рабочее поле и на панели инспек-

тора свойств присвойте имя экземпляру.

3. Откройте панель Component Parameters и добавьте имя только что созданного экземпляра.

ИСТИНА ложь

взаимодействие True or False (Истина или ложь) позволяет пользователям в

качестве ответа на вопрос варианты типа "истина" или "ложь". Взаимодействие

True or False состоит из текстового поля, в котором содержится задаваемый пользователям

вопрос, двух компонентов Radio Buttons (Переключатели) для возможных ответов, кнопки

управления и текстового поля обратной связи. Кнопка управления и текстовое поле обратной

связи показывают пользователям, правильно ли они ответили на вопрос, и дают инструкти-

рующий текст. Параметры обратной связи будут рассмотрены далее в этой главе.

КОНФИГУРИРОВАНИЕ ОБУЧАЮЩЕГО ВЗАИМОДЕЙСТВИЯ TRUE OR FALSE

Для конфигурирования обучающего взаимодействия True or False используется панель Com-

ponent Parameters, на которой указываются ID взаимодействия и задаваемый вопрос. Помните,

что для обозначения правильного ответа необходимо выбрать один из переключателей.

Текст взаимодействия True or False можно изменить на более соответствующий вашему

узлу и стилю. Для этого необходимо отредактировать текст в поле Distractors (Варианты). На-

пример, в качестве ответов можно использовать варианты "Да" и "Нет".

ГЛАВА 23. ИСПОЛЬЗОВАНИЕ ОБУЧАЮЩИХ ВЗАИМОДЕЙСТВИЙ 571

ОБРАТНАЯ связь, ОТСЛЕЖИВАНИЕ ЗНАНИЙ

и НАВИГАЦИЯ

До сих пор мы рассматривали различные типы обучающих взаимодействий, предлагаемые

во Flash MX. Вы убедились, что их использование представляет собой обычную адаптацию

функциональных возможностей для решения своих задач. Данная глава посвящена обучаю-

щим взаимодействиям, и в ней не рассматриваются специфические вопросы по настройке

графических элементов. Я уверен, что на данной стадии знакомства с Flash вы уже достаточно

знаете об этом, и повторяться не стоит. Однако к концу главы пришло время рассказать, ка-

кие части взаимодействий можно настраивать, а также рассмотреть те части, в которых со-

держатся сценарии. В данном разделе мы расскажем о том, что видят пользователи, рассмот-

рим отображаемые сообщения и встроенные средства навигации.

Подробная информация о графике во Flash представлена в главе 3 "Рисование

во Flash".

Управление параметрами связи, отслеживания знаний и навигацией осуществ-

ляется с уже знакомой панели Component Parameters (Параметры компонента). Доступ к

этим параметрам для каждого взаимодействия можно получить после щелчка на кнопке Op-

tions (Параметры) панели Component Parameters.

ЗАДАНИЕ ПАРАМЕТРОВ ОБРАТНОЙ связи

Параметры обратной связи (Feedback) регулируют то, что увидят пользователи в виде от-

клика на данный ими ответ на поставленный вопрос. После каждого вопроса пользователи

могут получать сообщение, говорящее им о правильности данного ответа. Можно также уста-

новить число попыток ответа на каждый из вопросов. Параметры обратной связи можно за-

дать для каждого вопроса отдельно. Если установить флажок в поле опции Feedback, то поль-

зователи будут получать сообщение после ответа на каждый поставленный вопрос. Кроме

того, все взаимодействия, кроме множественного выбора, имеют параметр, позволяющий

указать число возможных попыток ответа на вопрос.

Текст, указанный в поле Initial Feedback (Исходная обратная связь), пользователи увидят

до того, как ответят на вопрос. Это удобный способ представления инструктирующего текста

типа "выберите переключатель" или "щелкните для выбора правильного ответа".

В текстовые поля Correct Feedback (Обратная связь при правильном ответе) и Incorrect

Feedback (Обратная связь при неправильном ответе) вводится сообщение, которое пользова-

тели увидят в том случае, если соответственно правильно или неправильно ответят на постав-

ленный вопрос. Чтобы воодушевить пользователей, используйте обе эти опции. Даже если

был дан неправильный ответ, то ободряющие слова сообщения воодушевят пользователя на

продолжение теста и помогут ему не отчаиваться. Когда вы учитесь чему-то новому, нет ни-

чего хуже, когда вам просто указывают на неправильный ответ. Сообщение, введенное в поле

Additional Tries (Дополнительные попытки), будет отображаться при каждой следующей по-

пытке ответа на вопрос.

ЗАДАНИЕ ПАРАМЕТРА ОТСЛЕЖИВАНИЯ ЗНАНИЙ

Параметр отслеживания знаний Knowledge Track работает как в так и в SCORM-

системах LMS. Данный параметр представляет собой автоматическую функцию

отслеживания данных, позволяющую передать данные об успеваемости обучающегося в LMS

или другую систему отслеживания.

572 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Чтобы иметь возможность использовать параметр Knowledge Track, обучающее взаимо-

действие необходимо внедрить на HTML-страницу, содержащую требуемый код JavaScript.

Эта страница генерируется на основе настроек, заданных для публикации.

Подробная информация о публикации и оптимизации фильмов представлена в

главе 30 "Оптимизация, публикация и экспортирование фильмов".

Все данные, охватываемые и отслеживаемые посредством параметра Knowledge Track,

основываются на стандарте AICC.

На панели Component Parameters для выбранного взаимодействия можно установить

значения элементов данных. Для задания параметров Knowledge Track выполните следую-

щие действия.

1. В рабочем поле выберите панель Instructions, а затем откройте панель Component Parameters.

2. Щелкните на кнопке Options и установите флажок в поле опции Knowledge Track.

3. В поле Objective ID (Идентификатор цели) укажите цель взаимодействия. Этот иден-

тификатор связан с целью, устанавливаемой в пределах системы LMS. Если поле опции

оставить незаполненным, отслеживание все равно будет выполняться.

4. Укажите весовой коэффициент взаимодействия. Теперь все опции заполнены (рис.

На Весовой коэффициент обозначает важность вопроса. Если все вопросы имеют

одинаковую сложность, установите все значения весовых коэффициентов,

равными 1; в противном случае задайте значения, исходя из того, что 1 озна-

чает самый легкий вопрос, а 3 — самый сложный.

ОСНОВНАЯ СТРУКТУРА СЦЕНАРИЕВ и КОМПОНЕНТОВ ОБУЧАЮЩИХ

ВЗАИМОДЕЙСТВИЙ

Обучающие взаимодействия являются основой всего интерактивного процесса. Взаимо-

действия сами собирают параметры пользователей и создают массив SessionArray и функ-

ции обработчиков событий взаимодействий.

Рис. 23.11. На панели Component Parameters указа-

ны все данные, необходимые для отслеживания ин-

формации и определения ее весового коэффициента

ГЛАВА 23. ИСПОЛЬЗОВАНИЕ ОБУЧАЮЩИХ ВЗАИМОДЕЙСТВИЙ 573

Чтобы глубже понять принципы работы этих функций, лучше всего рассмотреть сценарии

панели Library.

Глобальный класс обрабатывает хранимые данные и данные форматирования

взаимодействий. Каждый компонент взаимодействия также имеет собственный сценарий

инициализации функций обработчиков событий, которые активизируются посредством эле-

ментов взаимодействий.

Если вы хотите проанализировать или отредактировать сценарий, воспользуйтесь для его

открытия панелью Library. Во всех сценариях имеются соответствующие комментарии

Macromedia, что облегчает процесс анализа и редактирования кода. Большинство участков

сценариев встроено в функции.

Сценарий, открытый на панели Library, можно редактировать так же, как и любой код

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Я добавил новое взаимодействие, но теперь все работает неправильно. Какую про-

верку нужно выполнить ?

Проверьте, чтобы новый кадр, добавленный для взаимодействия, был ключевым. Добав-

ление обычного кадра приводит к возникновению проблем.

Помогите! Я разбил компонент обучающего взаимодействия на части. Что теперь

делать?

Если разбить компонент обучающего взаимодействия на части, то встроенные сценарии

взаимодействия будут потеряны или повреждены. В этом случае следует полностью удалить

взаимодействие и заменить его новой копией из библиотеки.

Почему некоторые параметры для разных взаимодействий отличаются ?

Несмотря на то что большинство взаимодействий выполняется одинаково, вполне естест-

венно, что они немного отличаются друг от друга. Например, для взаимодействия True and

False нельзя разрешить делать несколько попыток ответов.

FLASH ЗА РАБОТОЙ: ИСПОЛЬЗОВАНИЕ СИСТЕМЫ

Если вы почти или вообще ничего не знаете о том, что представляет собой система управле-

ния обучением LMS и как она функционирует, то приведенная ниже информация поможет ра-

зобраться с тем, что происходит при работе с интерактивным обучающим взаимодействием.

При работе с вопросником, совместимым с LMS, происходят указанные ниже события.

Некоторые из них видны обучающемуся, а другие происходят "за кулисами".

1. Система запускается, и пользователь регистрируется.

2. Пользователь выбирает обучающее действие.

3. Пользователь запускает обучающее взаимодействие.

4. Пользователь прорабатывает вопросы контрольного вопросника.

5. Flash-файл отправляет данные в систему LMS посредством файлов отслеживания

HTML и JavaScript; пользователь не видит, как это происходит.

Независимо от типа LMS, пользователь приобретает фактически одни и те же навыки.

В зависимости от того, пересылаются ли данные вопросника в систему отслеживания

AICC или SCORM, подготовительные мероприятия могут слегка отличаться друг от друга.

574 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ПОДГОТОВКА ДАННЫХ ПРИ РАБОТЕ С СОВМЕСТИМОЙ С AICC

Отправление отслеженных данных в систему LMS, совместимую с AICC, требует возмож-

ности отслеживания вопросника и последующей публикации фильма с помощью шаблона

отслеживания Flash Создаваемые во Flash HTML- и SWF-файлы необходимо по-

местить в один и тот же каталог на Web-сервере. Кроме того, необходимо отредактировать

файл набора фреймов, созданный для того, чтобы указать имя вопросника.

Для подготовки к работе с системой, совместимой с AICC, выполните следующие действия.

1. Во Flash откройте фильм, вопросник. Выполните команду

Settings публикации), в результате чего откроется одноименное

диалоговое окно. Откройте вкладку Formats (Форматы) и убедитесь, что установлены

флажки в полях Flash и HTML.

2. Откройте вкладку HTML и из раскрывающегося меню Template (Шаблон) выберите

пункт Flash Tracking, как показано на рис. 23.12.

3. Щелкните на кнопке Publish (Публиковать), а затем закройте диалоговое окно, щелк-

нув на кнопке ОК. Flash создаст SWF- и HTML-файлы. Поместите оба этих файла в

один и тот же каталог на Web-сервере.

4. С помощью приложения управления файлами выясните местоположение папки про-

граммы First Extensions.

5. Откройте последнюю папку и скопируйте два HTML-файла и Scripts в тот

же серверный каталог, что был указан в шаге 3.

6. С помощью текстового редактора или приложения Dreamweaver откройте HTML-файл

набора фреймов, скопированный на Web-сервер.

7. Измените строку с кодом <frame

frame так, чтобы файл ссылался на HTML-файл,

созданный при публикации во Flash.

8. Запустите систему обращающуюся к странице htm.

Publish

Playback:

Window

w/AICC

3

Flash 4

Detect lot 5

Detect Flash 6

Only

with Named

QuickTime

[Show

play Menu

vice Font

3 Show Messages

\

[ Cancel 1

[ |

Рис. Чтобы убедиться в том, что создаются правильные

файлы, во вкладке HTML из раскрывающегося меню Template вы-

берите пункт Flash w/AICC Tracking

ГЛАВА 23. ИСПОЛЬЗОВАНИЕ ОБУЧАЮЩИХ ВЗАИМОДЕЙСТВИЙ 575

ПОДГОТОВКА ДАННЫХ ПРИ РАБОТЕ С СИСТЕМОЙ, СОВМЕСТИМОЙ СО

SCORM

Основное отличие между подготовкой к работе с системой, совместимой с AICC или со

SCORM, заключается в том, какой шаблон используется во время публикации. В данном слу-

чае не требуется редактирование внутренних файлов. Для подготовки к работе с системой,

совместимой со выполните следующие действия.

1. Во Flash откройте фильм, содержащий вопросник. Выполните команду

Settings публикации), в результате чего откроется одноименное

диалоговое окно.

2. Откройте вкладку Formats (Форматы) и убедитесь, что установлены флажки в полях

Flash и HTML.

3. Откройте вкладку HTML и из раскрывающегося меню (Шаблон) выберите

пункт Flash w/SCORM Tracking.

4. Щелкните на кнопке Publish (Публиковать), а затем закройте диалоговое окно, щелк-

нув на кнопке ОК. Flash создаст и HTML-файлы. Поместите оба этих файла в

один и тот же каталог на Web-сервере.

5. Запустите систему LMS и добавьте ссылки, требующиеся для HTML-файла, создан-

ного во Flash.

Чтобы файл работал корректно, необходимо убедиться в том, что система LMS запустила

набор фреймов отслеживания SCORM.

576 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ГЛАВА

КОЛЛЕКТИВНОЕ ИСПОЛЬЗОВАНИЕ

ACTIONSCRIPT

В ЭТОЙ ГЛАВЕ...

Библиотеки коллективного использования 577

Удаленный доступ во Flash 580

Включение внешнего кода 583

Возможные проблемы 584

Flash за работой: функция LocalConnection 585

БИБЛИОТЕКИ КОЛЛЕКТИВНОГО ИСПОЛЬЗОВАНИЯ

Библиотеки коллективного использования позволяют использовать видеоклипы, графи-

ку, звуки и кнопки в пределах нескольких фильмов. В библиотеке коллективного использо-

вания могут содержаться различные кнопки и звуки, последовательно использующиеся во

многих файлах фильмов. Звук или графику можно задать так, чтобы они добавлялись ко всем

клиентским узлам или видеоклипам, всегда использующимся в работе.

При работе с крупными узлами, содержащими несколько фильмов, преимущество ис-

пользования библиотек коллективного использования заключается в возможности уменьше-

ния времени загрузки.

После загрузки фильма, содержащего элементы коллективного использования, эти эле-

менты не нужно загружать снова. В последующих файлах содержатся только ссылки на них, и

при этом не используется мультимедиа-информация, включенная в фильм несколько раз.

Основное преимущество работы с элементами библиотек коллективного использования

заключается в том, что они помогают сэкономить время, затрачиваемое на работу над узлом

или управление проектом.

Библиотеки коллективного использования полезны каждому пользователю, работающему

во Flash. Область их применения простирается от коллективного использования логотипа,

отображаемого на всех узлах, до создания большой центральной библиотеки, позволяющей

выполнять обновление узлов из одного места.

Элементы коллективных библиотек позволяют по вашему усмотрению повторно использо-

вать элементы исходного фильма во многих других целевых фильмах. Этой цели можно достичь

(как и в большинстве случаев при работе во Flash MX) двумя способами: либо с помощью сеан-

совых коллективных элементов, либо коллективных элементов, созданных на этапе разработки.

СЕАНСОВЫЕ ЭЛЕМЕНТЫ КОЛЛЕКТИВНОГО ИСПОЛЬЗОВАНИЯ

При с сеансовыми элементами коллективного использования их в качестве символов

помещают в библиотеку одного фильма. Этот фильм называют исходным. Затем из целевого

фильма устанавливается связь с элементами коллективного использования исходного. В резуль-

тате элементы будут загружаться при воспроизведении фильма в броузере пользователя. Чтобы

эта методика выполнялась, исходный фильм необходимо выгрузить или опубликовать в опреде-

ленном каталоге. Если исходный фильм не выгружен, то элементы коллективного использова-

ния найдены не будут и, следовательно, не будут загружены при воспроизведении фильма.

Чтобы успешно воспользоваться сеансовыми коллективными элементами, необходимо убе-

диться в следующей последовательности операций. Авторы фильма, содержащего элементы

коллективного использования, должны определить коллективный элемент в своем фильме. Для

этого элемента необходимо задать строку и URL, указывающий местоположение файла.

Для определения коллективных элемента в исходном файле используется диало-

говое окно Symbol Properties (Свойства символа).

Процедура задания исходного фильма заключается в выполнении следующих действий.

1. Откройте или создайте фильм, который будет содержать элементы коллективного ис-

пользования. При работе с новым фильмом создайте или добавьте символы, которые

подлежат коллективному использованию.

2. Выберите символ, подлежащий коллективному использованию, а затем откройте па-

нель Library (Библиотека), выполнив команду

3. Щелкните на символе правой кнопкой мыши и из открывшегося меню выберите пункт

Properties (Свойства). В результате откроется диалоговое окно Symbol Properties

(Свойства символа), показанное на рис. 24.1. Если внешний вид диалогового окна от-

личается от изображенного на рисунке, щелкните для его расширения на кнопке Ad-

vanced (Дополнительно).

4. Чтобы сделать элемент доступным для связывания с целевым фильмом, установите

флажок в поле опции Export for runtime sharing (Экспортировать для сеансового кол-

лективного использования).

5. В поле Identifier (Идентификатор) введите имя элемента. Flash будет использовать это

имя для идентификации элемента при связи с целевым фильмом.

6. Введите адрес URL, в котором будет записан SWF-файл, содержащий элемент коллек-

тивного использования, и щелкните на кнопке ОК.

На Чтобы элементы коллективного использования были доступны в целевых

фильмах, необходимо поместить SWF-файл в URL, указанный в п. 6.

Теперь, когда данные коллективного использования исходного фильма расположены в

нужном месте, очень важно, чтобы точно такие же данные были включены в целевой фильм.

Если данные будут хоть немного отличаться, то элемент не будет корректно найден или будет

недоступным для коллективного использования.

Для добавления данных снова используется диалоговое окно Symbol Properties. Для ус-

пешного установления связи выполните следующие действия.

578 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Properties

Movie

О

Export sharing

' Import

flame

1. В целевом фильме откройте панель Li-

brary.

2. На панели Library выберите видео-

клип, кнопку или графический сим-

вол, а затем из меню параметров пане-

ли (кнопка в правом верхнем углу)

выберите пункт Properties. Если в от-

крывшемся диалоговом окне Symbol

Properties опции дополнительных

свойств не видны, щелкните на кноп-

ке Advanced.

3. В группе опций Linkage (Связь) уста-

новите флажок в поле Import for run-

time sharing (Импортировать для се-

ансового коллективного использова-

ния) для установления связи с

элементом исходного фильма.

4. Введите тот же самый идентификатор,

что и в исходном фильме. Идентифи-

каторы должны быть совершенно

одинаковыми.

5. Введите адрес в котором будет

записан SWF-файл, содержащий элемент коллективного использования. Ранее уже гово-

рилось о том, что эта информация должна быть точно такой же, как и в исходном фильме.

6. Для автоматического обновления элемента при обнаружении новой версии по указанно-

му местонахождению исходного фильма установите флажок в поле опции Always update

before publishing (Всегда обновлять перед публикацией) и щелкните на кнопке ОК.

\

Рис. В диалоговом окне Symbol

можно задать опции сеансового

использования

На заметку Чтобы отключить связь в целевом фильме, на панели Library выберите связан-

ный символ, откройте диалоговое окно Symbol Properties и снимите флажок с

поля опции Import for runtime sharing.

ЭЛЕМЕНТЫ КОЛЛЕКТИВНОГО ИСПОЛЬЗОВАНИЯ, СОЗДАННЫЕ НА

ЭТАПЕ РАЗРАБОТКИ

Элементы коллективного использования, созданные на этапе разработки, используются

для замены (или обновления) символов в новом фильме на символы из коллективного источ-

ника. Символы можно обновлять в любой момент во время разработки. При использовании

коллективных символов, созданных на этапе разработки, содержимое символа заменяется

(или обновляется) на содержимое символа, взятого из коллективного источника. В этом слу-

чае заданные имя и свойства символа сохраняются, а изменяется только его содержимое. При

коллективном использовании элементов, созданных на этапе разработки, любые элементы,

использующиеся в коллективном также импортируются в целевой фильм.

Эта возможность удобна в случае необходимости использования обновленного изображе-

ния логотипа или обновления связи в пределах видеоклипа или компонента. Вместо того что-

бы искать каждый экземпляр, можно просто обновить содержимое одного символа на содер-

жимое элемента коллективного использования.

Из приведенных ниже инструкций видно, что процедура обновления или замены симво-

лов очень проста.

ГЛАВА 24. КОЛЛЕКТИВНОЕ ИСПОЛЬЗОВАНИЕ ACTIONSCRIPT 579

1. Откройте целевой фильм, выделите видеоклип, кнопку или графический символ, а за-

тем из меню параметров панели Library выберите пункт Properties. Откроется диалого-

вое окно Symbol Properties.

2. Чтобы в диалоговом окне Symbol Properties выбрать новый файл в группе опций

Source (Источник) щелкните на кнопке Browse (Обзор).

3. В открывшемся диалоговом окне найдите файл содержащий символ, который вы

хотите использовать для обновления или замены символа, выделенного на панели Li-

brary. После этого щелкните на кнопке Open (Открыть).

4. Чтобы выделить новый символ в файле щелкните на кнопке Symbol, располо-

женной в группе опций Source.

5. В открывшемся диалоговом окне найдите нужный символ и щелкните на кнопке Open.

6. Вернувшись к диалоговому окну Symbol Properties, в группе опций Source установите

флажок в поле Always update before publishing, чтобы автоматически обновить эле-

мент при обнаружении новой версии по указанному местонахождению источника.

7. Заполненное диалоговое окно должно выглядеть так, как показано на рис. 24.2.

8. Щелкните на кнопке чтобы закрыть диалоговое окно Symbol Properties.

ДОСТУП во FLASH

Name

Удаленный доступ во Flash — это еще одна новая функция Flash MX, позволяющая соеди-

няться с удаленными службами, такими как страницы ColdFusion. Эта функция позволяет

разработчикам поддерживать связь с удаленными серверными объектами.

В части V рассказывается об использова-

нии динамических данных для соединения с

сервером. Эта функция позволяет хранить в

базе данных информацию, использующуюся

при создании покупательских корзин, досок

объявлений и т.п.

Функция удаленного доступа Flash под-

держивает объектно-ориентированный дос-

туп (например, объекты Java), а также обра-

ботку документов для обмена данными с

удаленными службами, такими как JavaBean

и Java-классы.

Чтобы воспользоваться функцией удален-

ного доступа Flash, необходимо установить

программы Flash Remoting Components и

и убедиться в том, что в системе установлены

приложения Flash MX и Rash 6 Player.

Из использования функции удаленного

доступа Rash можно извлечь много полезных

моментов. Описание некоторых из них при-

ведено в табл. а полный перечень имеет-

ся на- Web-узле Macromedia по адресу

Linkage;

sharing

fret ftame

'

Always

24.2. В заполненном диалоговом окне Symbol

Properties должны быть указаны имя исходного

файла и символ

580 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

ТАБЛИЦА 24.1. ПРЕИМУЩЕСТВА УДАЛЕННЫХ СЛУЖБ FLASH

ФУНКЦИЯ ПРЕИМУЩЕСТВО

Наличие одного прикладного программного ин-

терфейса для вызова удаленных служб и XML-

документов из приложений Macromedia Flash

Наличие новых прикладных программных ин-

терфейсов ActionScript для обработки набора

записей и связывания данных

Поддержка широкого диапазона удаленных

служб, включая EJB, Java-классы, JavaBeans

и MBeans

Реализация высокой скорости передачи дан-

ных между Flash и удаленными объектами

Упрощает процесс разработки, требующийся

для доступа к удаленным службам из Flash-

приложений. Во Flash-приложениях отобра-

жает прикладные программные интерфейсы

служб в виде простых прикладных

программных интерфейсов ActionScript, де-

лая доступной взаимосвязь разработчиков

пользовательского интерфейса и разработ-

чиков серверных приложений

Упрощает использование наборов записей в

ActionScript, позволяя использовать Flash-

приложения качестве пользовательских ин-

терфейсов стандартных реляционных баз

данных

Позволяет использовать интерфейс Flash в

качестве пользовательского интерфейса

приложений бизнес-логики

Увеличение производительности приложения

путем минимизации количества данных, не-

обходимых для передачи

JAVA-КЛАССЫ и УДАЛЕННЫЙ ДОСТУП во FLASH

Чтобы файлы Java-приложения стали доступными для функции удаленного доступа Flash,

необходимо либо добавить новые каталоги в приложение JMV Classpath на сервере, исполь-

зующем JMC, либо использовать каталог При использовании каталога

для Java-классов (в том числе JavaBeans) в нем должны содержаться классы, для которых ука-

зан путь j

Использование правильной структуры означает, что классы будут доступны на всем сервере.

При создании JavaBean необходимо внедрить а при создании Java-объекта

этого делать не нужно.

Если вы хотите разрешить пользователям соединяться непосредственно с Java-классами,

необходимо задать требуемые разрешения для доступа к пакету.

Предполагая, что имеется пакет и что вы хотите разрешить доступ к клас-

сам, содержащимся в этом пакете, необходимо отредактировать файл lib/ j policy.

Приведенный ниже код делает этот файл доступным для любого пользователя, поэтому

перед внесением подобных изменений будьте осторожны с его содержимым. Поскольку раз-

решения можно задать только для уровня пакета с Java, необходимо задавать разрешения для

любого пакета, который вы хотите сделать общедоступным.

// PERMISSIONS GRANTED TO EVERYONE

grant {

// should narrow or expand on this as they see fit

// to grant wide-open security to all code, this line

// permission

// to grant clients to classes in the packages, uncomment

// this line

ГЛАВА 24. КОЛЛЕКТИВНОЕ ИСПОЛЬЗОВАНИЕ ACTIONSCRIPT 581

// добавить эту строку

permission

КЛАССЫ и УДАЛЕННЫЙ ДОСТУП во FLASH

Классы для удаленного доступа во Flash должны быть включены в фильм на

уровне кадра. Реализацию основной функциональности обеспечивает класс

as, включенный в загрузку Flash Remoting Components.

При удаленном доступе во Flash используются два других класса ActionScript. К ним отно-

сятся as, который используется исключительно в среде разработки и, как следует

из его имени, является файлом отладки, а также as, который помогает формати-

ровать результаты, использующиеся в объекте набора данных. Приведенные ниже три строки

кода реализуют включение требуемых файлов ActionScript.

ВЫПОЛНЕНИЕ СЛУЖЕБНЫХ ОБРАЩЕНИЙ к СЕРВЕРУ из FLASH-ФИЛЬМА

Перед выполнением служебного обращения к серверу приложения сначала необходимо

создать в фильме служебный объект. Эта задача реализуется посредством функций

creategatewayConnection и getService класса NetServices, предназначенных для

создания объекта соединения.

Следующий код демонстрирует создание служебного объекта с именем

if (inited == null)

{

// выполнить этот код только один раз

inited = true;

// задать URL перехода по умолчанию (используется только при авторской

// разработке)

// соединиться со шлюзом

gateway_conn =

// получить обращение к службе

FirstRemote =

После создания объекта соединения можно выполнять служебные обращения к серверу

приложения, как показано в приведенном ниже примере.

582 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Обратите внимание на то, что URL представлен не в обычном формате ссылки. В данном

случае URL указывает местонахождение и порт а также отображение шлюзо-

вого сервлета для удаленного Flash-сервера.

Для обработки результатов исполнения служебной функции можно либо создать специ-

альный обработчик результатов, либо воспользоваться групповым обработчиком.

Подробная информация об обработчиках событий представлена в главе 12

"Управление переменными, данными и типами данных".

ВКЛЮЧЕНИЕ ВНЕШНЕГО ACTIONSCRIPT

Несмотря на то что ввод сценариев прямо на панели Actions (Действия) фильма считается

совершенно обычно процедурой, сценарий можно сохранить в виде внешнего файла и в слу-

чае необходимости использовать повторно.

Для создания и редактирования кода воспользуйтесь обычным текстовым ре-

дактором, а затем вставьте код на панель Actions либо воспользуйтесь действием Include

(Включить), чтобы добавить внешний сценарий при прогоне фильма.

Кроме того, можно создать код ActionScript обычным способом (с помощью панели Ac-

tions), а затем сохранить его в виде текстового файла для последующего использования или

редактирования.

Основы создания сценариев ActionScript изложены в главе 11 "Знакомство с

ActionScript".

Код ActionScript можно экспортировать в текстовый файл в два этапа. На панели Actions

откройте выпадающее меню, как показано на рис. 24.3, и выберите из него пункт Export as

File (Экспортировать как файл). Укажите место, в котором вы хотите хранить сохраненный

файл, и щелкните на кнопке Save (Сохранить).

После сохранения файла для внесения изменений в ActionScript можно использовать лю-

бой текстовый редактор.

После сохранения текстового файла его можно повторно импортировать в тот же самый

файл или в какой-то другой. Это дает превосходную возможность предоставления кода

ActionScript в коллективное использование. Убедитесь в том, что вы работаете в режиме Ex-

а затем из того же выпадающего меню выберите пункт Import From File (Импортировать

из файла), найдите нужный текстовый файл и щелкните на кнопке Open.

Вместо того чтобы вставлять код ActionScript на панель Actions, можно с помощью дейст-

вия Include включить текстовый файл при экспортировании фильма.

Убедитесь, что в окошке сценария точка вставки кода расположена в нужном месте (там,

где вы хотите вставить сценарий). Дважды щелкните на действии Include в категории Miscel-

laneous Actions (Разные действия) и в поле Path (Путь) введите путь к внешнему файлу.

На заметку Вводимый должен быть указан относительно файла При экспортирова-

нии фильма действие Include будет заменено на содержимое внешнего файла.

Несмотря на то что данная глава посвящена в основном коллективному использованию, здесь

уместно также поговорить о внешних файлах в целом. Используя Flash MX, можно загружать и от-

правлять данные во внешние источники. К таким источникам относятся внешние сценарии, рас-

положенные на сервере, а также текстовые и, конечно же, XML-файлы.

Фильмы можно настраивать так, чтобы изображения и звуковые файлы загружались при

их воспроизведении. Эта возможность позволяет изменять и редактировать внешний файл

без необходимости изменения исходного SWF-файла. Если только не будет поврежден код

при внесении изменений, фильм будет воспроизводиться превосходно.

ГЛАВА 24. КОЛЛЕКТИВНОЕ ИСПОЛЬЗОВАНИЕ ACTIONSCRIPT 583

the

on

_01 text

line and brought & text

D2 the text

he line and into a text field named

text for the This

од the retain and into a text field

Auto

Auto Format

From

AS

Esc

Help

24.3. В выпадающем меню панели Actions имеется много функций, в том и

Export as

Расширить Flash очень просто. Для этого необходимо использовать методы f sCommand и

Flash Player. Действие f sCommand можно передавать в функцию JavaScript HTML-файла, ко-

торый открывается в новом окне.

Кроме того, компоненты Flash можно использовать неоднократно. Они являются единст-

венным и самым важным средством коллективного и повторного использования элементов

во Flash MX.

Подробная информация о компонентах приведена в главе 22

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Я поместил файл в библиотеку коллективного использования, но от там не появился.

Что нужно сделать?

Эта проблема возникает чаще всего. Следует проверить, чтобы данные связи в исходном и

файле были совершенно одинаковыми.

При использовании функции удаленного доступа во Flash нужно ли в

методах Java перемещены исключения?

Нет, совсем не нужно. Обычно исключения перемещают в случае необходимости транс-

ляции прикладных исключений Flash-клиенту, но поскольку сам шлюз не обрабатывает вы-

деленные исключения, то и объявлять их не нужно.

584 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ

Каковы два обработчика объекта локального соединения?

Обработчик активизируется в случае, когда прини-

мающий объект локальной связи получает запрос об активизации метода отправляющего

объекта локальной связи.

Обработчик активизируется после того, как отправляющий

объект локальной связи попытается отправить команду принимающему объекту локальной связи.

Почему у меня открывается диалоговое окно Resolve Library Conflict (Разрешение

конфликта библиотеки) ?

Это диалоговое окно открывается при попытке импортирования или копирования эле-

мента библиотеки в фильм, уже имеющий элемент с тем же именем. Для разрешения кон-

фликта можно выбрать Don't Replace Existing Items (He заменять существующие эле-

менты), чтобы сохранить существующие элементы в целевом фильме. Либо же можно вы-

брать опцию Replace Existing Items (Заменять существующие элементы), чтобы заменить

существующие элементы и экземпляры на новые элементы с тем же именем.

FLASH ЗА РАБОТОЙ: ФУНКЦИЯ LOCALCONNECTION

Читая эту книгу, вы обнаружили, что Flash MX имеет много новых, исключительно мощ-

ных и полезных функций. Одной из них является класс LocalConnection, который облада-

ет позволяющими отправлять данные из одного фильма в другой. Во Flash MX это

можно делать без использования JavaScript или действия

Класс LocalConnection позволяет отправлять строки и целые объекты (в том числе и

свойства) из одного фильма в другой, причем выполнять эти операции можно даже в различ-

ных броузерах.

СОЗДАНИЕ ЛОКАЛЬНОЙ связи

Класс LocalConnection имеет четыре метода: connect О, и

domain Сейчас мы рассмотрим только методы send и connect требующиеся для

передачи данных между двумя фильмами в одном домене.

Для начала создайте фильм для получения сообщений.

1. Создайте во Flash новый фильм и присвойте файлу имя la.

2. В файле создайте динамическое текстовое поле. Его экземпляру присвойте имя

3. В кадр 1 панели Actions (Действия) поместите приведенный ниже код принимающего

фильма.

receiving_lc = new

= function (param) {

= param;

}

4. Сначала этот код с помощью имени переменной создает объект LocalConnection и

правильный конструктор класса LocalConnection.

5. Затем выполняется определение метода, вызываемого при получении принимающим

фильмом данных из отправляющего фильма. В данном случае экземпляр MessSent

содержит строку, переданную отправляющим фильмом.

ГЛАВА 24. КОЛЛЕКТИВНОЕ ИСПОЛЬЗОВАНИЕ ACTIONSCRIPT 585

6. Воспользуйтесь методом connect О для установления соединения с локальным объ-

ектом, имеющим имя lc_test.

7. Сохраните свою работу.

Теперь создайте фильм для отправления данных.

1. Создайте во Flash новый фильм и присвойте файлу имя f la.

2. В файле создайте текстовое поле. Его экземпляру присвойте имя

3. В фильм поместите кнопку и присвойте ее экземпляру имя

4. Как и в случае с принимающим файлом, на панели Actions в кадр 1 поместите приве-

денный ниже код.

= {

sending_lc = new

delete

5. После сохранения работы вставьте оба фильма на одну HTML-страницу и протести-

руйте их в броузере с установленным модулем Flash 6 Player.

6. В первое текстовое поле введите сообщение и щелкните на расположенной под ним

кнопке. В результате текст должен появиться во втором текстовом поле, как показано

на рис. 24.4.

Рис. 24.4. Процедура отправления сообщений между фильмами одного домена очень проста:

достаточно щелкнуть на кнопке, и нужный текст появится в поле

586 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Как видно из приведенного примера, процедура установления данного соединения очень

проста. Хотя текстовые поля располагаются на одной странице, все происходило бы точно так

же, даже если бы они располагались на разных страницах. Данная процедура будет выпол-

няться в любом случае, если фильмы находятся в пределах одного домена.

ОТПРАВЛЕНИЕ СООБЩЕНИЙ МЕЖДУ ДОМЕНАМИ

Сообщения можно отправлять и из одного домена в другой, однако установление такого

соединения более сложно, и при его задании необходимо учитывать различные моменты,

связанные с безопасностью.

Основное отличие междоменной взаимосвязи заключается в необходимости определения

в обоих фильмах параметра connectionName. Это делается для того, чтобы во Flash не про-

изошло добавление текущего субдомена. Данная задача выполняется путем добавления сим-

вола подчеркивания в начале параметра connectionName в обоих фильмах:

receiving_lc = new

= {

=

return (senderDomain ==

}

Объект LocalConnection в отправляющем фильме из другого домена может затем ис-

пользовать метод send для отправления сообщений в целевой фильм:

sending_lc = new

"Это строковый

delete

ГЛАВА 24. КОЛЛЕКТИВНОЕ ИСПОЛЬЗОВАНИЕ ACTIONSCRIPT 587

ГЛАВА 25

ТЕСТИРОВАНИЕ, ОТЛАДКА и УСТРАНЕНИЕ

ПРОБЛЕМ

В ЭТОЙ ГЛАВЕ...

/

Как избежать наиболее распространенных проблем 589

Использование отладчика 594

КАК ИЗБЕЖАТЬ НАИБОЛЕЕ

ПРОБЛЕМ

Общая концепция локализации неполадок является в большей степени предметом здра-

вого смысла, чем глубоких технических познаний. Ведь до сих пор очень многие пользовате-

ли сталкиваются с проблемами, которых можно было избежать, обладая достаточным опы-

том. Всегда считалось, что профилактика гораздо лучше, чем лечение. На практике хорошее

планирование и тестирование сцен и фильмов на ранних этапах работы всегда делает процесс

локализации неполадок менее проблематичным и более легким по сравнению с проведением

аналогичных операций в конце проекта.

При работе над проектом всегда применимы некоторые стандартные правила, независимо

от того, создаете ли вы небольшой Flash-фильм или разрабатываете огромный проект. В дан-

ной главе мы рассмотрим эти правила и расскажем о том, как решить те или иные проблемы в

случае их возникновения.

В большинстве случаев проблемы, возникающие при работе над фильмами, можно свести

к одной из трех категорий: фильм не воспроизводится фильм не воспроизводится в

системе или не функционирует программное обеспечение.

Первая категория проблем, как правило, вызвана ошибками, допущенными пользовате-

лем. Проблемы с файлами могут быть вызваны изменением переменных, неправильным при-

имен переменным в экземплярах или некорректным назначением действий. Тести-

рование и сохранение файла в процессе работы над ним поможет быстро идентифицировать

и устранить ошибки такого рода.

Причину возникновения проблем, связанных с системой, выявить несколько сложнее.

Если определенный файл вызывает отказ системы, попробуйте протестировать его в другой

системе. Посмотрите, какие новые приложения вы установили в системе, и подумайте, не

могут ли они быть причиной проблем. Проверьте и параметры дисплея, поскольку их изме-

нение также может привести к возникновению проблем.

Неработающее или некорректно работающее программное обеспечение может свидетель-

ствовать о наличии проблем конфигурации системы. Устанавливая новую или обновленную

версию программы, уверены ли вы в том, что система отвечает соответствующим для этого

требованиям? Опять же, проверьте, возникает ли подобная проблема на другой машине. Если

это так, то проблема заключается в самом программном обеспечении, а если нет, то, вероят-

нее всего, причиной возникновения проблемы является ваша система.

Убедитесь, что в проекте отведено достаточно времени для тестирования и любой требую-

щейся отладки. Во-первых, некорректно воспроизводящимся фильмом никто не сможет вос-

пользоваться, а во-вторых, такой продукт наверняка не улучшит вашу репутацию как дизайнера

или разработчика. Стремление побыстрее выполнить проект в ущерб планированию приведет к

возникновению ошибок, а недостаточное время, выделенное на тестирование, почти неизбежно

приведет к неудовольствию заказчика и отрицательно скажется на дальнейшем бизнесе.

При планировании любых Flash-проектов, независимо от того, насколько они велики и

сколько в них задействовано людей, обязательно необходимо выделить достаточно времени

для тестирования. Процедура тестирования и решения проблем на каждом этапе разработки

позволяет контролировать все нюансы, которые, не будучи разрешенными, на последующих

стадиях разработки могут превратиться в огромную проблему, решить которую будет уже го-

раздо сложнее.

Работая над несколькими фильмами, которые должны будут воспроизводиться все

всегда проверяйте каждый из них и только потом устанавливайте связь между ними. Опять

же, эта процедура поможет сузить, идентифицировать и выявить источник возникновения тех

или иных проблем на ранних стадиях работы над проектом.

При наличии в фильме нескольких сцен протестируйте каждую из них отдельно и при об-

наружении проблемы постарайтесь локализовать место ее возникновения и выяснить причи-

ну отказа.

При переходе от старой версии Flash к версии Flash MX проверьте, что вы используете

правильный синтаксис кода и выражений.

Чтобы узнать, как следует корректно использовать текущую версию

ActionScript, обратитесь к главе 11 "Знакомство с

Регулярно сохраняйте свои проекты под разными именами и в разных местах. Сохранив

корректно воспроизводящуюся предыдущую версию фильма, вы всегда сможете вернуться к

ней и найти точное место, в котором начинается сбой, либо выяснить, внесение каких изме-

нений в сценарий без видимых причин привело к некорректному воспроизведению фильма.

Необходимо отметить, что Flash-файлы никогда не сбоят и не перестают неожиданно ра-

ботать без соответствующего "вклада" со стороны пользователя. Не может быть такого, чтобы

когда-то в процессе разработки кто-то (может быть, даже вы сами) не внес в фильм каких-то

изменений или дополнений. Уверенность в возможности найти ошибку значительно облегча-

ет процедуру ее устранения и требует значительно меньших трудозатрат.

Наличие тщательно разработанного плана работ позволит в нужный момент вернуться к

одной из предшествующих фаз разработки, не затрачивая на это лишних усилий. Каким бы

утопическим не показался этот тезис, примите его во внимание. Хорошее планирование на

ранних этапах разработки поможет выполнить в проект в целом гораздо более успешно.

590 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

МНОГОПЛАТФОРМЕННОЕ ТЕСТИРОВАНИЕ

Если вы не разрабатываете фильм, предназначенный для строго определенной аудитории,

очень велики шансы, что созданный вами продукт увидят пользователи, работающие на раз-

личных типах машин с самыми разными платформами. По этой причине очень важно быть

уверенным в том, что на каждой из них фильм будет воспроизводиться корректно.

Может показаться, что сейчас мы делаем шаг назад, однако обеспечение доступности

фильма для надлежащей аудитории является неотъемлемой частью планирования проекта.

Если вы хотите, чтобы ваш проект был солидным, то процедура планирования должна быть

выполнена столь же тщательно и кропотливо, как и самой разработки.

После выяснения минимальных системных требований к проекту фильм необходимо все

время тестировать исходя из этих требований.

Лучше всего выполнять тестирование на нескольких машинах, но, к сожалению, это не

всегда возможно. Далеко не каждый разработчик имеет доступ большому количеству раз-

личного качества машин с разными операционными системами. Тем не менее нельзя пред-

полагать, что фильм, превосходно воспроизводящийся на компьютере с операционной сис-

темой Windows 2000, будет столь же безупречным на компьютере Macintosh со старой опера-

ционной системой.

Проблемы, связанные с операционной системой, не отразятся на ваших навыках дизай-

нера и разработчика, но они важны с точки зрения разрешения.

Зная о недостатках системы и планируя способы их обхода в случае невозможности созда-

ния универсального решения, вы сможете сделать свой проект доступным для использования

максимально широкой целевой аудиторией. Если же вы завершите разработку великолепного

фильма, а потом обнаружите, что его могут просматривать только 10% предполагаемых поль-

зователей, то фильм наверняка придется практически полностью переделывать, а это явно

неприемлемая стратегия даже для самых неопытных Flash-дизайнеров и разработчиков.

Говоря простыми словами, чем тщательнее спланирован проект, тем лучший результат

будет достигнут.

ЭФФЕКТИВНЫЕ ПРОЦЕДУРЫ ТЕСТИРОВАНИЯ

Руководствуясь здравым смыслом и предпринимая разумные меры предосторожности для

чтобы затрачивать минимум усилий на выявление и устранение неполадок, наилучших

результатов тестирования можно добиться, следуя приведенным ниже советам. Их можно ис-

пользовать в качестве основных правил эффективного тестирования.

• Для тестирования собственных творений всегда пользуйтесь командой

Movie фильм). В отличие от остальных процедур, имеющих

ограниченные возможности, данный путь лучше всего позволяет смоделировать за-

конченный фильм. Все ссылки, звуки и элементы навигации должны быть в полном

порядке. Использование данной команды является оптимальным способом быстрого

и легкого выявления проблем.

При обнаружении ошибок попытайтесь выделить проблемную область фильма в от-

дельный файл, а потом посмотрите, продолжает ли проблема существовать. Этот тест

поможет понять, связана ли проблема с определенной областью фильма или с какими-

то другими частями проекта.

• Протестируйте весь фильм на другом компьютере. Этот тест подскажет, связана ли

имеющаяся проблема с используемым аппаратным обеспечением, и даже поможет

выявить, связана ли она с версией Flash, установленной на данном компьютере.

• Протестируйте файл на сервере. Если проблемы обнаружатся на одном сервере, по-

пробуйте протестировать фильм на другом. Этот тест подскажет, связана ли проблема

с исходным сервером или с серверами вообще.

ГЛАВА 25. ТЕСТИРОВАНИЕ, ОТЛАДКА и УСТРАНЕНИЕ ПРОБЛЕМ 591

• При наличии ошибок, связанных с серверами, проверьте наличие на проблемном сер-

вере соответствующих типов связанных с расширением . Подробная ин-

формация по этому вопросу представлена на Web-узле Macromedia по адресу

• Если в проблемный фильм или проект включен код то прежде чем впа-

дать в панику по поводу устранения ошибки, проверьте правильность синтаксиса,

присвоения имен и использования знаков пунктуации. Все эти ошибки вызывают ка-

жущиеся очень значительными проблемы, решение которых на самом деле требует

минимального количества усилий.

ОПТИМИЗАЦИЯ

Несмотря на то что оптимизация файлов не относится напрямую к решению проблем,

данную процедуру, во избежание возникновения ошибок, все же желательно выполнять. Как

уже было сказано, профилактика всегда лучше, чем лечение. Определенные методики опти-

мизации основываются исключительно на здравом смысле, но, тем не менее, помогают сэко-

номить время и избежать последующей головной боли.

Во Flash не требуется выполнять все операции самостоятельно, поскольку встроенные функ-

ции публикации автоматически удалят дублируемые контуры и добавят их в конечный файл всего

один раз. Подробная информация о сжатии файлов в целях уменьшения размера и времени загруз-

ки приведена в главе 30 "Оптимизация, публикация и экспортирование фильмов".

Об оптимизации фильмов также рассказывается в главе 30 "Оптимизация,

публикация и экспортирование фильмов".

ТЕСТИРОВАНИЕ ПРОИЗВОДИТЕЛЬНОСТИ ЗАГРУЗКИ

Тестирование производительности загрузки фильма позволяет убедиться, что фильм

можно будет просматривать надлежащим образом. Нет ничего хуже, когда обнаруживается,

что фильм, который вы так тщательно планировали и скрупулезно создавали, воспроизводит-

ся с паузами, когда плейер не может достичь заданной частоты смены кадров.

Можете воспользоваться подпрограммой Bandwidth profiler (Профайлер полосы пропус-

кания), с помощью которой создается графический отчет о загрузке, чтобы увидеть, какое ко-

личество данных пересылалось в каждом кадре. Такой отчет составляется на основе заданной

скорости соединения. Фильм следует протестировать на как можно большем количестве раз-

ных машин и с различными скоростями соединения. Если это невозможно, Flash попытается

смоделировать подобные условия.

Для тестирования производительности загрузки выполните следующие действия.

1. Из меню Control (Управление) выберите либо пункт Test Movie (Тестировать фильм),

либо Test Scene (Тестировать сцену).

2. Из меню Debug (Отладка) выберите скорость соединения, при которой вы хотите вы-

полнить тестирование. Чтобы задать свои собственные параметры, откройте диалого-

вое окно Custom Modem Settings (Настройка параметров модема), выполнив команду

Настройка).

3. Из меню View (Вид) выберите пункт Bandwidth (Полоса пропускания), в результате

чего будет создано графическое представление настроек.

Изменить способ отображения данных профайлером можно путем изменения настроек

меню View, в котором содержатся следующие опции.

• •

592 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

• Show Streaming (Показать поток). Переключение воспроизведения между имитацией

Web-соединения и его отсутствием. Изменение данной настройки в процессе воспро-

изведения приводит к повторному запуску фильма.

• Streaming Graph (Потоковая диаграмма). Показывает, какой из кадров приостановит

воспроизведение. Блоки кадров показаны разными цветами. Обычно первый кадр боль-

ше остальных, поскольку в нем содержится больше информации. Щелчок на любом кад-

ре диаграммы приведет к отображению данных кадра на панели в левой части окна.

• Frame by Frame Graph (Покадровая диаграмма). Показывает любые кадры, которые

приводят к приостановке воспроизведения. Красная линия, подобная той, что на

рис. 25.1 расположена на отметке 100 В, является направляющей. Все кадры выше этой

линии вызовут приостановку фильма, а остальные кадры будут загружаться нормально.

Во Flash можно создать текстовый файл с покадровой разбивкой данных конечного файла

фильма. Для этого из меню File (Файл) выберите пункт Publish Settings (Параметры публи-

кации), а затем установите флажок в поле опции Generate Size Report (Генерировать отчет о

размере). В результате Flash создаст текстовый файл с тем же именем, что и файл . la. На-

пример, файлу f la будет соответствовать файл txt.

ПОИСК И УСТРАНЕНИЕ НЕПОЛАДОК В КОДЕ ACTIONSCRIPT

Как и любой другой язык сценариев, время от времени дает сбои. Чем осто-

рожней вы будете обращаться со сценарием, тем большего количества проблем удастся избе-

жать. Не важно, насколько опытным пользователем ActionScript вы являетесь, — определен-

ные действия вызваны исключительно здравым смыслом и помогут избежать ловушек. При-

веденные ниже советы помогут работать логически и своевременно устранить проблемы.

• Сопровождайте код ActionScript подробным комментарием о том, как он должен рабо-

тать. Комментарии помогут другим разработчикам не запутаться в вашем тщательно

разработанном коде, а при работе над большими проектами помогут запомнить, поче-

му код создан именно таким образом.

Рис. полосы пропускания позволяет локализовать проблем-

ную область в файлах фильма

ГЛАВА 25. ТЕСТИРОВАНИЕ, ОТЛАДКА и УСТРАНЕНИЕ ПРОБЛЕМ 593

• Присваивайте элементам кода имена, несущие логическую нагрузку. При наличии 15

или 20 различных кнопок присвоение имени button для какой-то из них будет со-

вершенно бессмысленным. Имя по крайней мере, описы-

вает этот элемент в целом. Каждое из слов, составляющих имя элемента, начинайте с

прописной буквы. Это сделает имена более доходчивыми.

• Убедитесь в том, что присвоенные имена несут смысловую нагрузку, особенно это каса-

ется переменных. Опять-таки, полезная информация, содержащаяся в имени перемен-

ной, поможет при выявлении неполадок. Так, переменную, содержащую информацию

об электронной почте, гораздо лучше назвать чем просто email.

Помните, что для просмотра всех элементов фильма и кода ActionScript предназначена

панель Movie Explorer (Проводник фильма).

Подробно об устранении неполадок в коде ActionScript рассказывается в

главе 11 "Знакомство с ActionScript".

ИСПОЛЬЗОВАНИЕ ОТЛАДЧИКА

Итак, вы предприняли все разумные меры для того, чтобы фильм воспроизводился кор-

ректно, но все равно что-то не так. Пришло время вооружиться инструментами Flash, предна-

значенными для выявления ,и устранения проблем, причины возникновения которых выхо-

дят за рамки обычного здравого смысла.

Встроенная во Flash MX подпрограмма Debugger (Отладчик) имеет гораздо лучшие харак-

теристики по сравнению с отладчиком, существовавшим в версии Rash 5. Следовательно,

данная подпрограмма является гораздо более мощным инструментом.

Моей любимой характеристикой отладчика является возможность его работы как с ло-

кальными, так и с серверными файлами. При открытии панели Debugger (посредством ко-

манды Movie) не только автоматически запускается сама подпрограмма, но и

загружается текущий фильм в режиме тестирования. На рис. 25.2 показан экран отладки.

КОНТРОЛЬНЫЕ точки и ПРОХОЖДЕНИЕ по ним

Контрольные точки управляют фильмом в процессе его воспроизведения во Flash-

плейере. Они позволяют протестировать сценарии, вызывающие проблемы, внести необхо-

димые исправления и снова протестировать фильм. Пусть, к примеру, код содержит ряд

предложений, и вы знаете, что в нем есть ошибка, но не уверены, где именно. Добавив кон-

трольные точки перед каждым предложением кода, можно пройти по очереди по всем ним и

выяснить, где возникает ошибка.

Прохождение по коду от одной контрольной точки к другой гарантирует, что вы сможете

устранить ошибку на одном участке кода, а затем перейти к следующей потенциально про-

блемной области.

Задать контрольные точки можно как в самом файле . с целью их постоянного ис-

пользования, так и в пределах отладчика. Если для задания контрольных точек используется

отладчик, то они действительны только в течение текущего сеанса, а затем удаляются.

ЗАДАНИЕ и УДАЛЕНИЕ КОНТРОЛЬНЫХ ТОЧЕК

Чтобы использовать отладчик для задания или удаления контрольных точек, в окошке сце-

нариев на панели Actions (Действия) найдите строку кода, в которую необходимо вставить кон-

трольную точку. Вероятнее всего, вставка будет производиться в начале блока предложений, на-

пример предложений которые не работают надлежащим образом. Затем откройте ме-

ню Debug Options (Параметры отладки) и выберите соответствующий параметр меню.

ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

Список отображения

Строка состояния

Переменные

Список

просмотра

The Player that

nay be adjusted. Click

Continue to the

Окно просмотра кода

Рис. 25.2. Отладчик позволяет поэтапно пройти по коду фильма с це-

лью поиска и устранения ошибок

Для задания или удаления контрольных точек на панели Debugger выполните следующие

действия.

1. Найдите строку кода, в которой следует добавить либо удалить контрольную точку.

2. Щелкните на кнопке Toggle Breakpoint (Включить контрольную точку) или Remove

All Breakpoints (Удалить все контрольные точки), которые расположены над окном

просмотра кода.

3. В качестве альтернативного способа можно открыть меню параметров и выбрать из

него подходящий пункт.

4. Когда плейер остановится в контрольной воспользуйтесь управляющими кноп-

ками (рис. 25.3) для прохождения по коду.

ПОШАГОВОЕ ПРОХОЖДЕНИЕ по КОДУ

Процесс перемещения по коду от одной контрольной точки к другой называется пошаго-

вым прохождением. В начале сеанса отладки Flash-плейер автоматически приостанавливается,

чтобы вы могли управлять сеансом. Если контрольные точки заданы посредством панели Ac-

tions, щелкните на кнопке Play (Воспроизведение). Тогда воспроизведение фильма будет вы-

полняться до достижения первой контрольной точки.

Если контрольные точки заданы в среде отладки, то для перемещения к первой из них

следует воспользоваться управляющими кнопками.

В процессе перемещения по коду содержимое, отображаемое на панели Debugger, изме-

няется. Список просмотра, переменные, локальные элементы и свойства изменяются в соот-

ветствии с отображаемыми текущими данными кода. В окошке просмотра кода желтой

стрелкой помечается место остановки.

Панель, расположенная над окошком просмотра кода (см. рис. 25.3), позволяет управлять

процедурой

ГЛАВА 25. ТЕСТИРОВАНИЕ, ОТЛАДКА и УСТРАНЕНИЕ ПРОБЛЕМ 595

Stack

The paused so

to the movie.

25.3. управляющие кнопки для отладки фильма на панели

• Step In (Шаг в). Эта кнопка применима только к функциям, заданным пользователем.

После щелчка на ней отладчик перемещается или делает шаг внутрь функции.

• Step Out (Шаг из). Эта кнопка функционирует только в случае, если уже сделан шаг в

функцию.

• Step Over (Шаг через). С помощью этой кнопки отладчик перемещается вперед на од-

ну строку кода независимо от функций.

• Continue (Продолжить). После щелчка на данной кнопке фильм продолжает воспро-

изводиться с его текущего места и до следующей контрольной точки.

• Stop Debugging (Прекратить отладку). После щелчка на этой кнопке фильм продол-

жает воспроизводиться во Flash-плейере, но отладчик не функционирует.

Окно OUTPUT

Окно Output (Вывод данных), которое открывается после выполнения команды Win-

было разработано специально для того, чтобы помочь решить проблемы, обна-

руженные в фильме. Синтаксические ошибки, например, отображаются в окне Output авто-

матически. Воспользовавшись командами List Objects (Перечислить объекты) и List Variables

(Перечислить переменные), можно расширить диапазон отображаемой информации, что даст

большие возможности поиска и устранения проблем.

Использование команды List Objects является самым простым способом поиска целевых

путей и имен экземпляров. При работе в текстовом режиме в окне вывода автоматически

отображаются любые синтаксические ошибки в коде, которые можно сразу же исправить и

затем продолжить тестирование. Команду Trace Action (Отследить действие) можно исполь-

зовать для передачи определенной информации в окно вывода во время фактического вос-

произведения фильма. Данная команда будет подробнее рассмотрена далее в этой главе.

Работать с информацией, отображаемой в окне Output, можно с помощью меню парамет-

ров, расположенного в правом верхнем окна.

Элементы данного меню соответствуют выполнению следующих команд.

• Сору (Копировать). Содержимое окна помещается в буфер обмена.

• Clear (Сбросить). Производится сброс содержимого окна Output.

596 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ

• Save to (Сохранить в файл). Содержимое окна Output сохраняется в виде тексто-

вого файла с целью выявления и устранения ошибок.

• Print (Печать). Выполняет печать содержимого окна Output.

• Find (Найти). Осуществляет поиск строки текста.

• Find Again (Найти далее). Повторяется предыдущий поиск.

РАБОТА с ПЕРЕМЕННЫМИ в ОКНЕ OUTPUT

При тестировании фильма можно воспользоваться командой List Variables (Перечислить

переменные), в результате выполнения которой в окне Output отображается список текущих пе-

ременных. Основное отличие использования этой команды от отладчика заключается в том, что

список без повторного применения данной команды обновляться не будет. Каждый раз, когда

необходимо отобразить обновленные данные, следует воспользоваться командой List Variables.

На рис. 25.4 показан список переменных фильма. Обратите внимание на то, что вверху

списка перечислены глобальные переменные.

В списке переменных показаны также свойства, созданные с помощью метода

Obj и активизируемые посредством метода set или get. Они отображаются

дом с остальными свойствами объекта, а отличить их можно по наличию строки получения/задания.

ИСПОЛЬЗОВАНИЕ ДЕЙСТВИЯ

Использование действия отслеживания в сценарии позволяет передавать информацию из

тестируемого фильма в окно Output. Чаще всего действие отслеживания выполняется для

того, чтобы проверить, был ли успешным вызов функции. Наиболее распространенная при-

I Options

Level

Variable »

-

{

],

]

]

[function '

Рис. 25.4. При выполнении команды List Variables в окне вывода отображается

список переменных фильма с указанием свойств каждой из них

ГЛАВА 25. ТЕСТИРОВАНИЕ, ОТЛАДКА и УСТРАНЕНИЕ ПРОБЛЕМ 597

чина ненадлежащего воспроизведения Flash-фильма заключается в том, что указан непра-

вильный путь к видеоклипу, переменной, объекту или функции. Даже такая кажущаяся про-

стой ошибка может привести к тому, что переменные будут иметь неправильные значения, а

обращение к функциям будет выполняться некорректно или не выполняться вообще. Про-

тестировать этот аспект позволяет действие отслеживания.

Изъясняясь терминами сценариев, действие отслеживания похоже на оператор alert в

JavaScript. Это действие можно использовать для передачи определенной информации или

примечаний о программе с целью их отображения. После этого кадр воспроизводится в тес-

товом режиме.

Для применения действия отслеживания в качестве параметров необходимо использовать

выражения. В окне Output будет отображено значение выражения.

СРЕДСТВА ДИСТАНЦИОННОЙ ОТЛАДКИ

Хотя отладку фильма можно выполнить в любом из трех типов Rash-плейера

(автономном, подключаемом модуле или Active X), подготовку к этой операции необходимо

провести при публикации файла, но не позже.

Если в диалоговом окне Publish Settings (Параметры публикации) не установить опцию

отладки, то дистанционно активизировать экран отладки будет невозможно.

Для задания свойств удаленной отладки выполните следующие действия.

1. Выполните команду Settings публикации), в резуль-

тате чего откроется одноименное диалоговое окно (рис. 25.5).

2. В диалоговом окне Publish Settings выберите вкладку Flash и установите флажок в по-

ле опции Debugging Permitted (Отладка разрешена).

3. В поле Password (Пароль) введите пароль. Этот пароль гарантирует, что доступ к экра-

ну отладки сможете получить только вы или те люди, с которыми вы сотрудничаете.

Теперь все готово к публикации фильма на сервере.

4. Выгрузите вновь созданный файл . в то же самое место на что и файл .

import

0 ' ' 100

Audio

Audio Event Mono

О

( ]

et]

25.5. Для включения дистанционной отладки необходимо

сначала установить флажок в поле опции разрешения отладки

диалогового окна Publish Settings

598 ЧАСТЬ IV. РАСШИРЕННЫЕ СЦЕНАРИИ ACTIONSCRIPT

5. Bo Flash выполните команду а затем из меню параметров панели

выберите пункт Enable Remote Debugging (Разрешить дистанционную отладку).

На После выполнения описанных выше действий Flash создаст новый файл с тем

же именем, что и файл . Этот файл имеет расширение . и является

очень важным для дистанционной отладки.

Теперь отладку фильма можно выполнять дистанционно.

АКТИВИЗАЦИЯ ОБРАЗОМ

Предполагая, что файл . swd правильно выгружен в то же самое место на сервере, что и

файл процедура удаленной отладки будет работать превосходно. Если файл не

найден, то функция пошагового прохождения кода не будет выполняться, даже несмотря на

то, что будет открыто окно отладчика.

Хотя вы работаете с удаленным файлом, сначала необходимо открыть программу Flash MX.

1. В окне броузера (или Flash-плейера) откройте удаленно расположенный .

Обратите внимание на то, что открывается файл . а не . f la.

2. Откроется диалоговое окно Remote Debug (Дистанционная отладка). Если оно не от-

крывается, это значит, что не найден файл . swd. В этом случае необходимо открыть

контекстное меню фильма и выбрать из него пункт Debugger (Отладчик).

3. В диалоговом окне Remote Debug выберите соответствующую опцию в зависимости от то-

го, установлены ли средства разработки Flash и плейер отладчика на одной машине. Если

указанные средства установлены на разных машинах, введите IP-адрес другой машины.

Щелкните на кнопке ОК и подождите, пока будет установлено соединение с файлом

. Когда будет отображено соответствующее приглашение, введите пароль, кото-

рый был задан ранее (см. выше подраздел "Средства дистанционной отладки").

В окне отладки должен быть виден список отображения фильма.

ДО СИХ ПОР ОСТАЛИСЬ ПРОБЛЕМЫ?

В этой главе были рассмотрены встроенные средства тестирования и отладки Flash-

файлов. Если описанные здесь средства и советы по устранению проблем, рассматриваемые в

конце каждой из глав, вам не помогли, воспользуйтесь нижеприведенными советами.

Начните с посещения узла Macromedia com). Центр поддержки (Flash

Support Center) является превосходным источником не только полезных советов и подсказок,

но также технических заметок, связанных с определенными проблемами. Кроме того, можно

присоединиться к форумам, посвященным Flash, задать вопросы и найти ответы, касающиеся

проблем, которые вы не смогли решить самостоятельно.

Форумы и другие типы поддержки расположены в соответствующей части Web-узла

Macromedia. Если вы хотите попасть прямо туда, обратитесь по адресу

media

Кроме того, на Web-узле Macromedia приведены ссылки на другие узлы, предлагающие по-

мощь и советы опытных Flash-дизайнеров и разработчиков. Независимо от уровня вашей квали-

фикации, есть вероятность того, что проблема, с которой вы столкнулись, уже была кем-то решена.

Одним из самых приятных моментов работы с Flash и другими продуктами от Macromedia

является то, что люди, использующие их, готовы поделиться информацией и помочь решить

возникающие проблемы.

ГЛАВА 25. ТЕСТИРОВАНИЕ, ОТЛАДКА и УСТРАНЕНИЕ ПРОБЛЕМ 599

ЧАСТЬ

РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ

с помощью FLASH

этой

Глава 26. Локальная связь

Глава 27. Взаимосвязь с сервером

Глава 28. XML-данные

ГЛАВА 26

ЛОКАЛЬНАЯ связь

В ЭТОЙ ГЛАВЕ...

Управление броузером 603

Вызов функций JavaScript 605

Управление проектором 614

Взаимосвязь с программой Director 615

Хранение информации локально 620

Взаимосвязь Flash-фильмов 622

Возможные проблемы 622

УПРАВЛЕНИЕ БРОУЗЕРОМ

Hash-фильмы могут воспроизводиться в одном из нескольких окружений, наиболее распро-

страненным из которых является Flash-плейер в Web-броузере. Кроме того, Flash-фильм может

выполняться в виде автономного проектора или внутри фильма Macromedia Director. Во всех

перечисленных случаях фильм может разными способами взаимодействовать с окружением.

В данной главе мы рассмотрим каждое окружение и способы взаимосвязи фильма с ним.

Flash-фильмы могут функционировать подобно HTML-дескриптору <А при просмотре

в Web-броузере, являясь элементом навигации броузера и изменяя отображаемую страницу. Кроме

того, они могут влиять на страницу, отображаемую в других окнах и фреймах броузера.

ИСПОЛЬЗОВАНИЕ КОМАНДЫ GETURL

Основным инструментом управления броузером является команда Эта команда

отправляет сообщение броузеру, указывая ему на необходимость загрузки новой страницы с

заданного URL. Исполнение команды getURL подобно щелчку на ссылке в дескрипторе

<А броузера.

В приведенном ниже сценарии кнопки команды используются для загрузки стра-

ницы, имеющей имя

on (release) {

}

это унифицированный указатель информационного ресурса, который является

единственным необходимым параметром команды getURL.

Существуют два типа URL: относительные и абсолютные. Относительный URL может

быть локальным файлом, как, например, в предыдущем примере. Он также

может задавать относительный путь к файлу или каталогу.

Примером относительного URL, указывающим файл в каталоге, является

В данном случае указан файл newpage.html, находящийся в

папке

Абсолютный URL представляет собой полный путь к файлу или каталогу на сервере.

Примером абсолютного html.

Команду getURL с относительным URL можно использовать для загрузки страницы на

том же сервере, на котором находится текущая Web-страница. Кроме того, относительный

URL можно использовать для загрузки страницы, когда она находится на локальном жестком

диске или когда фильм выполняется как проектор.

На Помните о том, что Flash-плейер не выполняет фактическую загрузку страницы.

Он отправляет сообщение броузеру, который затем выполняет всю необходи-

мую работу.

Абсолютный URL используется в команде getURL только при наличии соединения с

Internet, поскольку в этом случае, как правило, производится обращение к узлу на Web-

сервере, а не к странице на локальном компьютере.

Поскольку сила команды getURL заключена не во Flash, а в Web-броузере, то в качестве

параметра команды можно использовать любой элемент, который броузер сможет распознать

как адрес. Например, если вы хотите, чтобы броузер перечислил файлы, находящиеся на

FTP-сервере, то можно использовать URL, подобный ftp://ftp.myserver.com/. Если

данный броузер поддерживает FTP и искомый то будут перечислены

находящиеся на нем файлы.

ЦЕЛЕВЫЕ ОКНА и ФРЕЙМЫ

. , Вторым параметром команды getURL является целевой объект. Им может быть окно и

фрейм броузера, а также специальная команда.

Во всех Web-броузерах можно открывать несколько в каждом из которых будет ото-

бражена страница со своим URL. Эти окна могут быть разных размеров и содержать различ-

ные панели инструментов (это зависит от того, как были открыты окна и какие настройки

были выполнены пользователем). Чтобы отобразить несколько URL в одном окне броузера,

его необходимо разделить на фреймы. Это делается на уровне HTML с помощью специаль-

ных HTML-дескрипторов. В каждом фрейме может содержаться страница со своим URL, из-

менение которой не повлияет на содержимое остальных фреймов. В большинстве броузеров в

качестве альтернативы URL в адресную строку можно вводить специальные команды. Эти

команды изменяют поведение броузера или позволяют получить информацию о нем.

Чтобы задать имя окна или фрейма в качестве параметра команды getURL, сначала необ-

ходимо присвоить имена фреймам и окнам броузера, а эта процедура требует применения

определенного планирования при создании HTML-страниц.

604 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

Предположим, имеется страница, состоящая из двух фреймов. В левом фрейме располагает-

ся небольшая панель навигации, а в большом правом фрейме — содержимое страницы. Фрейму

с содержимым можно присвоить имя contentFrame. В навигационном фрейме может содер-

жаться Flash-фильм с кнопками навигации. Одна из этих кнопок может указывать фрейму

contentFrame на необходимость перехода к новой странице, например, как показано ниже.

on (release) {

Процедура указания целевого фрейма очень проста. Всего одна команда разрешает одно-

му окну броузера, содержащему управлять страницей (URL), отображаемой в

другом окне. Так, в основном окне броузера может содержаться фильм, управляющий мень-

шим всплывающим окном.

СОЗДАНИЕ новых окон БРОУЗЕРА

Если использовать команду getURL с несуществующим целевым объектом, то броузер

создаст для отображения содержимого новое окно. Например, если целевым объектом явля-

ется newWindow, а окна с таким именем не существует, то откроется новое окно, которому

будет присвоено имя newWindow.

Когда такое окно существует, к нему можно обращаться по имени, т.е. окно newWindow в

качестве целевого объекта можно использовать неоднократно. При первом обращении к

newWindow броузер создаст это окно. При каждом последующем обращении будет изменять-

ся только его содержимое. Таким образом, используя одно и то же имя, можно создать новое

окно и впоследствии изменять его содержимое. HTML-содержимое можно показывать поль-

зователю путем создания и повторного использования одного и того же окна.

ИСПОЛЬЗОВАНИЕ СПЕЦИАЛЬНЫХ ЦЕЛЕВЫХ ОБЪЕКТОВ

Помимо задействования имен, можно воспользоваться одним из четырех специальных

целевых объектов. Их имена начинаются с символа нижнего подчеркивания. Специальные

целевые объекты перечислены ниже.

• _sel Эквивалентен отсутствию целевого параметра. Содержимое отображается в те-

кущем окне или во фрейме.

• Указывает на фрейм, расположенный на один уровень выше относительно

текущей страницы.

• _top. Указывает на в котором располагается текущий кадр или страница.

• _blank. Создает новое окно. Использование данного целевого объекта является един-

ственным способом гарантированного открытия нового окна независимо от имен те-

кущих окон.

Чтобы после щелчка на кнопке открылось новое окно, воспользуйтесь следующим сценарием:

on (release) {

Вызов ФУНКЦИЙ JAVASCRIPT

Несмотря что команда getURL позволяет загружать с помощью Flash-фильма новые страни-

цы, практически полностью управлять броузером можно посредством команды С ее по-

мощью можно отправлять сообщения в сценарии JavaScript броузера. Кроме того, Rash-фильм также

может получать сообщения из сценариев JavaScript, содержащихся на Web-странице.

ГЛАВА 26. ЛОКАЛЬНАЯ связь 605

ПРОБЛЕМЫ, СВЯЗАННЫЕ с JAVASCRIPT

Прежде чем рассмотреть взаимодействие Rash и JavaScript, необходимо выяснить, какими

недостатками обладает JavaScript. Основным недостатком является тот факт, что один и тот

же блок кода может не функционировать в некоторых вариациях броузеров.

Для реализации взаимосвязи Flash и JavaScript необходимо наличие программного блока,

содействующего ей. Для броузеров Internet Explorer, работающих под управлением Windows,

таким блоком программного обеспечения является Для старых версий Netscape

Communicator таковым является модуль LiveConnect. Оба модуля являются частью соответст-

вующих броузеров.

Хотя Active X является частью броузера Internet Explorer в Windows, он не является его ча-

стью на платформе Macintosh. LiveConnect является частью броузера Netscape версии 4.7 и

более ранних, но не является частью Netscape 6 как для Macintosh, так и для Windows. Из-за

этого существует несколько вариаций, в которых команда f работать не будет.

К ним относятся версии Netscape для Windows и большинство броузеров для Macintosh.

Можно предположить, что любые другие броузеры, такие как iCab или Opera, также не под-

держивают взаимодействие Flash и JavaScript. Только по этой причине большинство разра-

ботчиков избегают взаимодействия Flash и JavaScript.

На Если вы решили использовать команду f разместите предупрежде-

ние для пользователей Macintosh и Netscape, чтобы они знали, что в их броузе-

рах фильм воспроизводиться корректно не будет.

ИЗМЕНЕНИЕ ДЕСКРИПТОРА OBJECT/EMBED

Чтобы Flash и JavaScript могли взаимодействовать, сначала для соответствующей

ки Flash-фильма необходимо изменить дескриптор OBJECT/EMBED на Web-странице. С этой

целью лучше всего использовать диалоговое окно Publish Settings (Параметры публикации),

открывающееся посредством одноименной команды меню File (Файл). В диалоговом окне

следует открыть вкладку HTML и из раскрывающегося меню Template (Шаблон) выбрать оп-

цию Flash with При выборе этой опции нужная информация автоматически

размещается в дескрипторе

Подробная информация о параметрах публикации приведена в главе 30

"Оптимизация, публикация и экспортирование фильмов".

Однако разработчики должны точно знать, какие данные следует добавлять в дескрипто-

ры, поскольку им необходимо размещать Flash-фильм на собственных страницах, а не в шаб-

лонах Macromedia.

И в дескриптор OBJECT, и в дескриптор EMBED необходимо включить параметр ID. Этот

параметр представляет собой просто основную часть каждого дескриптора. Например, если

речь идет о фильме la, то сжатый Flash-файл будет

swf. Следовательно, параметр ID должен быть задан равным

Ниже приведен полный пример дескриптора OBJECT/EMBED с па-

раметрами ID.

<OBJECT

VALUE=high>

606 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

quality=high bgcolor=#FFFFFF

Добавление параметров ID — не единственное изменение, вносимое в дескрипторы. В де-

скриптор EMBED необходимо еще добавить предложение которое

также приведено в данном примере.

JAVASCRIPT

Изменение дескриптора OBJECT/EMBED является только первым шагом. На страницу не-

обходимо также поместить определенный базовый код JavaScript, чтобы она могла принимать

сообщения из Flash-фильма. Такие блоки JavaScript служат в качестве "мостика" между Flash

и

Все Flash-сообщения поступают в функцию которая называется

Однако точное имя этой функции зависит от имени фильма. Например, если фильм называ-

ется то функция JavaScript должна называться

Большинство базовых сценариев подобно приведенному ниже.

<SCRIPT

function args) {

// Здесь указывается код

}

</SCRIPT>

Однако такой сценарий будет работать только в броузерах версий Netscape 3.x и 4.x. В бро-

узерах Internet Explorer он работать не будет, поскольку они не содействуют взаимодействию

Flash и JavaScript. Но Flash может взаимодействовать с VBScript — собственным языком сце-

нариев Internet Explorer. В свою очередь, VBScript может взаимодействовать с JavaScript. Сле-

довательно, необходимо настроить систему, в которой сообщение передавалось бы из Flash в

VBScript, а из VBScript — в JavaScript.

Такая система сделает код более сложным. Сначала необходимо проверить, установлен ли

в системе пользователя броузер Internet Explorer. Если это так, то в код необходимо добавить

функцию VBScript, для чего используется команда document

if && != -1

!= -1

navigator. indexOf ("Windows == -1) {

error resume next

command,

args) ) ,-

call

НАСТРОЙКА JAVASCRIPT для ВЗАИМОДЕЙСТВИЯ с

Теперь все готово для начала передачи сообщения из Flash в JavaScript. Но чтобы отпра-

вить сообщения обратно во Rash, необходимо знать местонахождение адресата. Мы уже ука-

ГЛАВА 26. ЛОКАЛЬНАЯ связь 607

ID фильма в дескрипторах OBJECT и EMBED, но, к сожалению, броузеры Netscape и IE

трактуют их по-разному.

Броузеры Netcsape считают Rash-фильм частью документа, поэтому адрес фильма необ-

ходимо указывать как Броузеры Internet Explorer исполь-

зуют только ID, а

Чтобы облегчить жизнь, для одного из этих обращений в использующемся по умолчанию

шаблоне HTML Flash задается новая переменная Для этого

применяется следующий код:

var InternetExplorer = -1;

var communicationtestsObj =

InternetExplorer ? communicationtests :

Таким образом, функция может возвращать данные в переменную communication-

testsObj , независимо от того, какой броузер установлен в системе пользователя. Использова-

ние такого синтаксиса JavaScript не является широко распространенной практикой, поэтому

применяется и другой способ, который выполняет ту же самую роль, но является более удобочи-

таемым, особенно для пользователей, не имеющих большого опыта работы с JavaScript:

if != -1) {

var communicationtestsObj = communicationtests;

} else {

var communicationtestsObj =

ПЕРЕДАЧА СООБЩЕНИЙ из FLASH в БРОУЗЕР

Для передачи сообщений из фильма в броузер необходимо воспользоваться командой

f scommand. В качестве примера можно привести следующий сценарий кнопки:

on (release) {

("alert",

}

Функция f scommand передает в JavaScript два параметра, первым из которым является

команда, а вторым— данные. В приведенном ранее примере функции JavaScript

можно увидеть, что эти параметры представлены в

виде command и args.

Ни один из параметров не будет ничего означать для JavaScript до тех пор, пока вы не на-

пишете какой-то код для их обработки. Например, приведенная ниже функция обрабатывает

команду alert путем создания предупредительного окна JavaScript, содержимым которого

является параметр args.

function args) {

if (command == "alert") {

}

Естественно, в броузере Internet Explorer этот код будет работать только при наличии кода

VBScript, описанного ранее в этой главе.

Пример такого кода приведен в демонстрационном фильме f la.

Весь необходимый код JavaScript содержится в HTML-файле html.

Запустите фильм на HTML-странице в своем броузере. Заполните поле в верхней части

608 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

фильма, а затем на красной кнопке. Введенный текст будет отправлен в функцию

JavaScript, которая затем отобразит пользователям предупредительное окно.

Например, если ввести текст "Hello то вы должны увидеть диалоговое окно,

которое будет выглядеть приблизительно так, как показано на рис.

ПЕРЕДАЧА СООБЩЕНИЙ из БРОУЗЕРА во FLASH

С передачей сообщений из Flash в JavaScript связана только одна команда a

для передачи сообщений из JavaScript во Flash предназначено множество команд, основной

из которых является SetVariable. Приведенная ниже функция передает строку с именем

броузера в переменную фильма romJavaScript.

<SCRIPT

function

</SCRIPT>

Рис. Данное

Результатом выполнения этого сценария является то, что

теперь переменная fromJavaScript фильма

содержит значение константы Flash-фильма с

JavaScript appName. Для этого требуется, чтобы броузером Internet Explorer

параметры ID дескрипторов OBJECT/EMBED фильма были ус-версии Windows

тановлены в значения communicationtests.

Результаты выполнения этого сценария можно увидеть в фильме

f la. На HTML-странице имеется простая кнопка, которая вызыва-

ет функцию JavaScript Эта функция, в свою очередь, передает значение

appName во Flash-фильм, где оно будет отображено в динамическом текстовом

связанном с переменной

SetVariable является одной из многих функций, которые можно вызвать в JavaScript и

которые повлияют на Flash-фильм. Ниже приводится перечень остальных функций.

• GetVariable Извлекает значение переменной на корневом

уровне фильме.

• Перемещает фильм в кадр с указанным номером.

См. также

• Возвращает значение true, если фильм воспроизводится в данный

момент.

• слой.

• у, После того как фильм промасштабирован (См. Zoom), с помощью

значений х и у этой команды можно выполнить панорамирование. Если аргумент

mode установлен в значение 0, то х и у являются пикселями. Если аргумент mode ус-

тановлен в значение 1, то х и у являются процентными величинами.

• Возвращает значения от 0 до 100, сообщая JavaScript о том, какая

часть фильма загрузилась.

• Play Аналогична команде play на корневом уровне Flash-фильма. См. также

• Rewind Отправляет корневой уровень фильма обратно к кадру 1.

ГЛАВА 26. связь 609

• SetVariable Устанавливает переменную корне-

вого уровня фильма в значение значение.

• top, bottom). Альтернатива функции Zoom. Масшта-

бирует фильм так, что его прямоугольный контур заполняет текущую область фильма.

• StopPlay Аналогична команде stop на корневом уровне Flash-фильма. См. также

TStopPlay.

• (цель, Исполняет весь сценарий (кроме функций),

существующий в указанном кадре. Может выполняться на корневом уровне либо в ви-

деоклипе. См. также

• TCallLabel (цель, Аналогична функции TCallFrame, но вме-

сто номера кадра используется его имя.

• Frame Возвращает номер текущего кадра видеоклипа.

• Возвращает имя текущего кадра видеоклипа.

• Возвращает значение свойства видео-

клипа. Это значение будет представлено в виде строки. См. список свойств в

табл. 26.1, а также

• Аналогична функции

TGetProperty, но возвращает числовое значение.

• Передает видеоклип в кадр с определенным

номером. См. также TGotoLabel.

• TGotoLabel Передает видеоклип в кадр с определен-

ным именем. См. также TGotoFrame.

• Аналогична команде play для видеоклипа. См. также Play.

• TSetProperty свойство в видео-

клипе. См. список свойств в табл. 26.1, а также TGetPropertyAsNumber.

• TStopPlay Аналогична команде stop в относящейся к видео-

клипу. См. также StopPlay.

• Возвращает фильма. (

• Масштабирует фильм на указанную величину.

См. также и Pan.

Некоторые из этих команд являются функциями, использующими параметр целевого

объекта. Такие команды и функции не всегда работают на корневом уровне фильма. Однако

параметр цель позволяет указать видеоклип фильма.

Значение означает корневой уровень фильма. Если вы хотите указать видеоклип,

имеющий имя используйте параметр целевого объекта

Если вы хотите указать видеоклип, имеющий имя myOtherClip, который находится внутри

клипа myMovieClip, используйте параметр целевого объекта

Таким образом, функции TPlay и О выпол-

няют одну и ту же задачу.

И функция TGetProperty, и команда TSetProperty в качестве параметра принимают

В этом случае было бы неплохо использовать синтаксис ActionScript, по-

добный _х и _alpha, но, к сожалению, это невозможно. Вместо этого необходимо использо-

вать специальный набор символов, отображающих свойства ActionScript. Их полный пере-

чень приведен в табл.

610 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

ТАБЛИЦА 26.1. ПОЛУЧЕНИЕ свойств ACTIONSCRIPT с помощью JAVASCRIPT

Свойство ACTIONSCRIPT

_х

_У

_xscale

_yscale

visible

width

height

rotation

dropTarget

_url

Символ JAVASCRIPT

X_POS

Y_POS

Y_SCALE

ALPHA

VISIBLE

WIDTH

HEIGHT

ROTATE

NAME

URL

Помимо всех этих команд и функций, Flash-фильм автоматически инициирует два собы-

тия. Событие OnProgress отправляет процентное значение загруженного фильма в

JavaScript в процессе его загрузки. Подобным образом событие при-

нимает значения представляющие соответственно состояния загружающегося,

инициализированного, загруженного, интерактивного и завершенного фильма.

КРУГОВЫЕ СООБЩЕНИЯ

Очень часто возникает необходимость запросить у броузера данные из Flash-фильма. Та-

кая операция проходит в два этапа. Сначала фильм отправляет сообщение в JavaScript. Это

сообщение затем инициирует JavaScript для передачи данных обратно в фильм.

Предположим, необходимо, чтобы броузер отправил в фильм свое имя. Начнем с применения

команды f scommand в фильме. Эту операцию выполнит код, подобный приведенному ниже.

Далее на Web-странице понадобятся все ранее упоминавшиеся стандартные параметры: ID,

параметр функция JavaScript и "мостик" VBScript.

Приведенная ниже функция принимает сообщение из фильма и передает его обратно.

function • args) {

var = InternetExplorer ? :

if (command == {

if (args == "appName") {

Когда фильм передает на страницу команду страница исполняет предыду-

щую функцию. Она проверяет переменные command и args. Если этими переменными яв-

ляются sendMelnfo и appName, то свойство JavaScript передается в

где оно появляется в виде значения переменной returnValue.

ГЛАВА 26. ЛОКАЛЬНАЯ связь

АЛЬТЕРНАТИВНЫЕ МЕТОДИКИ

Еще один способ взаимосвязи Flash и броузера основывается на том факте, что большин-

ство броузеров воспринимают команды JavaScript, указанные в их адресной строке, располо-

женной вверху окна. Этим фактом можно воспользоваться для того, чтобы обойти упоми-

навшиеся ранее ограничения, которые имеют системы Macintosh и броузеры Netscape при

реализации взаимосвязи с JavaScript.

Например, можно открыть броузер и ввести в адресной строке javascript:

При нажатии клавиши (Macintosh) или <Enter>

(Windows) должен быть выполнен сценарий JavaScript, указанный после двоеточия. В резуль-

тате будет получено предупредительное окно.

Когда Flash передает команду на самом деле выполняется передача строки в ад-

ресное поле броузера. Поэтому введя и какой-то сценарий JavaScript, вы смо-

жете инициировать его выполнение.

Вы можете выполнять команды JavaScript или даже вызывать функции JavaScript, которые

были определены на странице. Эта методика применима к большинству броузеров, в том

числе и к последним версиям Netscape для Windows и Internet Explorer для Macintosh. Вы

сможете быстро протестировать любой броузер, введя в его адресную строку команду

Несмотря на то что эта методика хороша для отправления сообщений из Flash в броузер,

она не поможет, если необходимо отправить сообщения из броузера во Flash. Кроме того, она

имеет и другие недостатки, например, частая замена содержимого текущего окна броузера ре-

зультатами вызываемой функции JavaScript.

ЗАДАНИЕ ВОПРОСОВ с помощью JAVASCRIPT

JavaScript позволяет легко выполнять простые задачи, связанные с вводом данных. На-

пример, с помощью всего одной команды можно быстро задать вопрос. Посредством коман-

ды JavaScript вы получите небольшое диалоговое окно с кнопками и Cancel

(Отмена). После щелчка на кнопке ОК возвращается значение true.

Доступ к этой функции JavaScript можно получить с помощью команды scommand. На-

пример, эта команда используется в следующем сценарии кнопки:

on (release) {

"Вы действительно хотите перейти к следующему

}

Затем на Web-странице можно поместить приведенный ниже сценарий. Помните о вклю-

чении всех других необходимых элементов, таких как ID, и мостика

VBScript. Приведенный ниже код подразумевает, что идентификатором фильма является

function args) {

var askquestionObj = InternetExplorer ? askquestion :

if (command == {

if {

612 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

На рис. 26.2 изображено созданное диалоговое окно подтверждения. В различных версиях

броузера его внешний вид может слегка варьироваться.

Чтобы задать вопрос, представляющий собой короткую строку, можно также воспользо-

ваться командой JavaScript prompt.

СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ окон

При взаимодействии Flash и JavaScript чаше всего необходимо открывать новые окна бро-

узера. Хотя окно можно открыть и с помощью команды это не позволяет управлять

размером и внешним видом окна. Для этого понадо-

бится JavaScript.

Демонстрационный фильм

позволяет протестировать открытие пользователь-

ских окон. Вы сможете изменять буквально любой

параметр окна, а для его открытия использовать

кнопки, расположенные в нижней части экрана.

В коде нет ничего особенного. Он

объединяет в себе различные настройки окна в виде

одной "функциональной" переменной. Для испол-

нения JavaScript необходимо указать URL, имя окна

и перечень функций.

Код ActionScript отправляет эти значения в JavaScript в виде одной строки, содержащей

URL, имя и функции, разделенные точкой с запятой. Поскольку между Flash и JavaScript мо-

жет передаваться только один аргумент, три параметра объединяются в одну строку, как по-

казано в приведенном ниже примере.

Рис. 26.2. Данное диалоговое окно

подтверждения было создано путем

взаимодействия Flash-фильма с бро-

узером Internet Explorer версии 6.0

для Windows

on (release)

features

features

features

features

features

features

features

features

features

features

{

= "1

+=

+=

+=

+=

+=

+=

+=

+=

+=

+=

+=

+=

,

Команда wlndow.open

Большинство функциональных параметров команды отображают или скрывают

элементы, такие как адресная строка, панель инструментов, полосы прокрутки и т.п. Броузеры

Netscape требуют указания параметров а броузеры парамет-

ров left и top. Более подробная информация о команде имеется в справочных

материалах по JavaScript, в частности на Web-узлах.

С другой стороны, использует команду it для того, чтобы разбить строку на

три части. Затем для создания окна из этих частей используется команда open:

ГЛАВА 26. ЛОКАЛЬНАЯ связь 613

function args) {

var openwindowObj = InternetExplorer ? :

if (command == {

var argsArray=

Другой способ заключается в том, что мы забываем о стандартной взаимосвязи

и JavaScript и используем команду j в сочетании с getURL. От Web-

страницы вам ничего не нужно. Просто измените последнюю строку сценария кнопки с

f на приведенный ниже код.

var

Необходимо, чтобы строка выглядела так, как при задании переменной. В противном слу-

чае результат команды open будет помешен в текущее окно броузера. Это означает,

что Flash-фильм будет заменен на [Object]

Если вы склоняетесь к применению более продвинутой методики, то в начале фильма отправь-

те текстовое сообщение в JavaScript. Затем JavaScript отправит сообщение обратно в фильм, что

равноценно установлению переменной j в значение true. Если в системе поль-

зователя установлен броузер, поддерживающий взаимосвязь ActionScript и то перемен-

ная j sCommunication дает значение true, а это означает, что вы можете отправлять и получать

сообщения. Если этого не происходит, воспользуйтесь альтернативной методикой. если

вы хотите окно броузера, можно воспользоваться командой j либо открыть

обычное окно, указав целевой объект в качестве параметра команды getURL.

УПРАВЛЕНИЕ ПРОЕКТОРОМ

Команда f scommand функционирует совершенно по-другому, если она выполняется внутри

Flash-проектора. В этом случае сообщения передаются в плейер проектора, который восприни-

мает ограниченный, но полезный набор команд. Например, проектор может самостоятельно

изменить свои размеры или завершить сеанс, когда пользователь щелкает на кнопке.

МОДИФИКАЦИЯ ОКНА

При использовании команды f scommand в проекторе все равно необходимо указать два па-

раметра: command и arguments. Однако команды в проекторе являются жестко закодирован-

ными, поэтому выбирать их приходится из ограниченного набора. Команда fullscreen уве-

личивает проектор до полного размера монитора пользователя. Она растягивает содержимое

Flash-фильма так, чтобы оно соответствовало новому размеру окна. В результате фильм будет

занимать целый экран так, что не останется даже места для границ окна или строки заголовка.

Чтобы увеличить проектор до размеров полного экрана, воспользуйтесь следующей командой:

Чтобы вернуться к исходному размеру проектора, воспользуйтесь командой

Кроме того, можно указать, будет ли масштабироваться фильм внутри окна. Для отключе-

ния масштабирования воспользуйтесь такой командой:

,

614 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

После этого, когда проектор займет весь фильм будет оставаться в исходных разме-

рах, располагаясь по центру окна. Это относится и к случаю, когда пользователь перетаскива-

ет окно за угол в целях его расширения или сжатия. Чтобы снова включить масштабирование,

воспользуйтесь следующей командой:

f true)

СОКРЫТИЕ КОНТЕКСТНОГО МЕНЮ

Чтобы открыть контекстное меню в проекторе, пользователь может щелкнуть мышью,

удерживая клавишу <Cmd> (Macintosh), либо щелкнуть правой кнопкой мыши (Windows).

Это меню позволяет пользователю приостановить фильм или изменить его громкость. Чтобы

отключить данную функцию в проекторе, воспользуйтесь следующей командой:

Если вы не хотите, чтобы пользователь мог регулировать различные параметры фильма,

данное меню следует отключить. Чтобы вернуться к его отображению, воспользуйтесь командой

Обратите внимание на то, что отключение данной функции не приводит к полному от-

ключению контекстного меню. Пользователь все равно сможет иметь доступ к категориям

Settings (Настройки) и About (О программе), но он не сможет управлять фильмом.

Если вы хотите отключить данные контекстные меню при воспроизведении фильма в

броузере, снимите флажок с поля опции Display Menu (Отображать меню), расположенный

во вкладке HTML диалогового окна Publish Settings. При этом в дескрипторы OBJECT и

EMBED будет вставлен параметр menu со значением false. Эти дескрипторы на HTML-

страницу можно вставить и вручную.

ДРУГИЕ КОМАНДЫ

Команда quit предназначена для выхода из проектора. Второй параметр в команде

f scommand обязателен для указания, несмотря на то, что фактически он не нужен. Его мож-

но ввести следующим образом:

f scommand( )

С помощью функции f scommand можно запускать внешние приложения. Для этого не-

обходимо подать команду и указать путь к приложению:

Пользуйтесь данной командой с осторожностью. На момент написания этой книги я не

смог заставить ее работать на своем компьютере. Может быть, вам повезет больше.

ВЗАИМОСВЯЗЬ с ПРОГРАММОЙ DIRECTOR

Одной из наиболее сильных сторон Flash является возможность внедрения фильмов в

ложение Macromedia Director в качестве элементов изобразительного ряда. Можно также ска-

зать, что эта же возможность является одной из самых сильных сторон приложения Director.

Когда Rash-фильм внедрен в Director, можно передавать сообщения между и

Lingo, языком программирования внутри Director.

В приложение Macromedia Director 8.5 могут быть внедрены фильмы Flash 5, что дает воз-

можность реализации всех способов взаимодействия, о которых пойдет речь в этом разделе.

На момент чтения вами этой книги Director может быть обновлен и поддерживать Flash MX,

благодаря чему могут появиться новые способы взаимосвязи.

ГЛАВА 26. ЛОКАЛЬНАЯ связь 615

ВЗАИМОСВЯЗЬ

Отправлять сообщения в Lingo можно двумя способами, причем в обоих используется ко-

манда В первом случае сообщения передаются в предварительно заданный обработ-

чик Lingo, являющийся эквивалентом приложения Director. Сообщение пе-

редается посредством приведенного ниже сценария кнопки.

on (release) {

this is a

}

В приложении Director в спрайт, содержащий Flash-фильм, необходимо поместить сцена-

который иногда называют поведением. В нем должен содержаться обработчик

on getURL, как показано в приведенном ниже примере.

on getURL me, stringFromFlash

alert stringFromFlash

end

Параметр me является использующимся в Lingo средством связи обработчика с объектом

спрайта. Вторым параметром является строка, передаваемая из Flash; в данном случае это все,

что стоит после команды

Передавать можно любую нужную строку, например имя кадра, к которому должно пе-

рейти приложение Director, или значение, в которое следует установить текстовое поле. В ре-

зультате обработчик Lingo перейдет к кадру, имя которого указывается при обращении Flash:

on getURL me, frameToJumpTo

go to frame

end

Еще одним, более прогрессивным способом обращения к Director из Flash является ис-

пользование команды а не Это позволяет направить сообщение в опреде-

ленный обработчик, присоединенный к спрайту. Например, приведенный ниже код во Flash-

фильме вызовет обработчик

Код со стороны Director будет следующим:

on myHandler me

-- сделать что-нибудь

end

Если вы хотите передать параметры в обработчик Lingo, добавьте их в строку getURL:

myHandler

Если вы хотите использовать кавычки, поставьте перед ними символы косой черты, чтобы

не интерпретировал кавычки, а передавал их вместе со строкой:

myHandler

Посредством команды можно настроить помещенное в спрайт поведение так,

чтобы оно имело несколько разных функций, каждая из которых определялась бы собствен-

ным обработчиком.

616 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

ВЗАИМОСВЯЗЬ

Процедура передачи данных из Lingo во flash-фильм, внедренный внутрь изобрази-

тельного ряда, аналогична передаче данных с Web-страницы. При этом

похожий набор команд.

В данном подразделе рассматриваются команды, использующиеся для того, чтобы опре-

делить, насколько Flash-фильм готов к воспроизведению. Когда объект Flash внедряется в

фильм Director, вероятно, что он сразу же будет доступен. Однако Director можно использо-

вать и для создания объекта Flash, связанного с внешним Flash-файлом. В этом случае Flash-

фильм будет представлять собой поток данных, такой же, как и на Web-странице.

Чтобы определить, готов ли Flash-фильм к воспроизведению, воспользуйтесь свойством

percentstreamed:

if flash = 100 then

Чтобы определить, был загружен определенный кадр, воспользуйтесь функцией

f Свойство rameCount подскажет, сколько всего кадров содержится в фильме.

Чтобы подробнее узнать о том, что происходит при загрузке объекта Flash, можно вос-

пользоваться свойством state. Ниже приводится перечень его возможных значений.

• 0 — не загружен;

• 1 — загружается заголовок;

• 2 — загрузка заголовка завершена;

• 3 — загружается мультимедиа;

• 4 — загрузка мультимедиа завершена;

• — ошибка.

После загрузки фильма можно воспользоваться элементом rameRate для получения

значения частоты смены кадров. На панели инспектора свойств программы Director можно

выбрать объекты и Flash и изменить их частоту кадров так, чтобы она совпадала с

частотой смены кадров фильма Director. За более подробной информацией по этому вопросу

обратитесь к документации Director.

Ускорение показа графического изображения Flash

Многие разработчики, работающие в программе Director, используют Flash-фильмы для замены

растровых изображений. В этом случае Flash-фильм представляет собой всего лишь статичное

изображение, а не анимацию. Поскольку содержимое Flash-ряда не будет обновляться в каж-

дом кадре, воспроизведение фильма Director можно ускорить. Для этого следует установить

свойство static элемента изобразительного ряда или спрайта в значение

Код Lingo для управления Flash-фильмом можно использовать несколькими способами.

Команды play и stop применяются к спрайту и выполняют ту же самую роль, что и

команды play и stop во Flash. Приведенный ниже сценарий кнопки инициирует воспроиз-

ведение Flash-фильма в спрайте 7.

on me

end

Для перемещения Flash обратно в кадр 1 можно воспользоваться командой rewind

Чтобы выяснить, какой кадр фильма является активным в данный момент, воспользуйтесь

свойством Чтобы преобразовать любой номер кадра в имя, воспользуйтесь функцией

ГЛАВА 26. ЛОКАЛЬНАЯ связь 617

Функцией, выполняющей обратное преобразование, является

indLabel Она возвращает номер кадра, содержащий указанное имя. Чтобы определить,

воспроизводится ли фильм в данный момент, используется свойство playing.

Для управления воспроизведением фильма предназначена функция goToFrame кото-

рая переносит Flash-фильм к кадру с указанным именем или номером. Кроме того, свойство

спрайта можно установить в значение номера кадра.

Если необходимо выяснить значение свойства Flash-фильма, воспользуйтесь функцией

getProperty Эта функция в качестве аргументов принимает и целевой объект, и специ-

альный символ свойства. Например, чтобы выяснить значение свойства _х видеоклипа

можно применить код

х =

В табл. 26.1 перечислены специальные имена каждого основного свойства видеоклипа.

К сожалению, в Lingo приходится использовать другой набор имен свойств. Из следующей

строки станет достаточно очевидно, с каким свойством связан каждый из символов Lingo:

#posX, ttscaleX, ttscaleY, ttrotate, ttalpha, tfname,

tfheight, #dropTarget, tttotalFrames, ttcurrentFrame, и

Для изменения любого свойства видеоклипа можно воспользоваться функцией

Например, для задания свойства _alpha видеоклипа можно приме-

нить следующий код:

С помощью Lingo можно получать и задавать собственные переменные, но данная

методика применима только к переменным корневого уровня. Так, для получения пере-

менной можно использовать такую команду:

Для задания переменной на корневом уровне можно воспользоваться командой

Самой мощной во взаимосвязи является команда Она

няет код в кадре Flash-фильма на корневом уровне. Например, посредством при-

веденной ниже строки можно выполнить сценарий ActionScript в кадре 5 Flash-фильма.

Любые команды в кадре будут выполняться, как если бы Flash-фильм только что

достиг этого кадра. Таким образом, функции не будут выполняться, если в кадре они не

будут специально вызваны.

Тем, кто работал с Hash 4, знакома эта функциональная возможность. Дело в том, что во

Hash 4 нет функций. Вместо этого код помещался в различные кадры Hash-фильма, а для его

исполнения в кадрах использовалась команда

Комбинируя команды setVariable и call, можно инициировать исполнение любого

элемента Hash-фильма. если вы хотите вызвать функцию ActionScript с парамет-

рами hello и 79, воспользуйтесь командой setVariable, чтобы установить переменные

paraml и в значения hello и 79. После этого для обращения к сценарию в кадре X

618 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

используется команда Данный кадр просто примет переменные и

param2 и передаст их в функцию, которую необходимо выполнить:

Кроме того, Lingo может инициировать функции print и

посредством передачи сообщения с этими именами во Flash-спрайт. Эти функции работают

точно как и при реализации функции печати в ActionScript:

Еще одной интересной функциональной возможностью программы Director является

способность перенаправлять любые команды передачи сообщений Flash на определенный

видеоклип. Для этого сначала подается команда tellTarget. Кроме того, последователь-

ность сообщений необходимо завершить командой Таким образом, для вы-

зова сценария ActionScript в кадре 5 видеоклипа можно применить такой код:

Чтобы заставить Flash-фильм перейти к какому-либо кадру, применяется код

На заметку Ранее уже упоминалось, что версия Director 8.5.1 поддерживает только фильмы

Flash 5. Однако после выхода новой версии программы, способной работать с

фильмами Flash MX, вероятно, появится и возможность непосредственного об-

ращения к функциям.

КОМАНДЫ LINGO

Перечисленные ниже команды Lingo позволяют передавать сообщения или получать дан-

ные об элементе Flash-фильма. Здесь пропущены команды, которые влияют на внешний вид

спрайта или элемента. Программисты Lingo могут легко найти их сами на панели инспектора

свойств программы Director.

• См. tellTarget.

• findlabel Данная функция возвращает номер кадра, соответствую-

щий имени данного кадра.

• Это свойство представляет номер текущего кадра Flash-фильма. Его можно и

проверять, и задавать.

• Данное свойство возвращает общее число кадров на временной шкале Flash.

• rameRate. Это свойство возвращает частоту смены кадров Flash-фильма.

• Данная функция возвращает значение true, если ука-

занный кадр Flash-фильма уже был загружен.

• getFlashProperty Данная функция извлекает значение свой-

ства видеоклипа. Для указания свойства используются следующие символы: ttposx,

#posY, ttscaleX, frvisible, #rotate, ftalpha, #name, ftwidth, ttheight,

ГЛАВА 26. ЛОКАЛЬНАЯ связь 619

fttarget, ttdropTarget, ttcurrentFrame и

f

• Данная функция возвращает имя кадра.

• getVariable Данная функция значение перемен-

ной текущего уровня, как правило, корневого. См. также tellTarget.

• goToFrame Данная функция переносит текущую временную шкалу в кадр с

указанным именем или номером. См. также tellTarget.

• percentStreamed. Это свойство возвращает значение в диапазоне от 0 до 100, ука-

зывающее, какая часть фильма готова к воспроизведению.

• play Данная команда начинает воспроизведение Flash-фильма. См. также

tellTarget.

• playing. Это свойство возвращает значение true, если Flash-фильм воспроизводится.

• rewind Данная команда возвращает Flash-фильм к кадру 1.

• (цель, свойство, Данная команда задает значе-

ние свойства видеоклипа. Символы, использующиеся для использования в качестве

свойств, приведены в описании команды getFlashProperty.

• setVariable Данная команда задает значение пе-

ременной на текущем уровне. См. также tellTarget.

• state. Это свойство возвращает значение от 0 до 4 или См. перечень, приведен-

ный в подразделе "Взаимосвязь Director-Flash".

• stop Данная команда останавливает воспроизведение в текущей временной шкале.

См. также tellTarget.

• tellTarget Данная команда направляет все последующие обращения Flash

на определенный видеоклип фильма. Она особенно полезна для реализации команд

play, stop, goToFrame, setVariable и getVariable. Чтобы снова направить об-

ращения на корневой уровень, воспользуйтесь командой endTellTarget.

ХРАНЕНИЕ ИНФОРМАЦИИ ЛОКАЛЬНО

Одной из методик, чаще всего обсуждающихся разработчиками работающих

во Flash 4 и Flash 5, была реализация взаимосвязи с JavaScript с целью задания cookie-файлов

на машине пользователя. Данная методика позволяла фильмам хранить такую информацию,

как имя пользователя или максимальный счет, набранный в процессе игры. Однако в связи с

применением JavaScript эта методика работала не во всех броузерах.

Во Flash MX имеется встроенное средство хранения небольших блоков данных на машине

пользователя. Эта функция, именуемая локальным коллективным объектом, аналогична cookie

в JavaScript, но она является полностью встроенной во Flash.

Операция по созданию локального коллективного объекта занимает несколько строк кода

и является относительно простой. Сначала необходимо создать объект. Затем его свойство ус-

танавливается в нужное значение. И наконец, необходимо заставить Flash сохранить значе-

ние на жестком диске компьютера пользователя. Ниже приведен пример кода.

=

=

620 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

Первая строка кода выполняет одну из двух функций. В первую очередь производится по-

пытка получить доступ к коллективному объекту mySharedOb j ect на локальном диске ком-

пьютера пользователя. Если объект находится на жестком диске, то код устанавливает myso

как ссылку объект. Если его на жестком диске нет, код создает новый объект.

Каждый коллективный объект имеет важное свойство data. Это — место, в котором хра-

нится информация. Для создания нового свойства data просто присвойте ему значение, как

сделано во второй строке кода.

Последняя строка подает команду которая необходима для того, чтобы сообщить

Flash об изменении коллективного объекта и о необходимости обновления файла на жестком

диске компьютера пользователя.

При первом использовании команды применительно к коллективному объекту

пользователь увидит диалоговое окно Macromedia Flash Player Settings (Параметры Mac-

romedia Flash Player), показанное на рис. 26.3, в котором запрашивается разрешение на хра-

нение данных на жестком диске.

Ком information

on

Для внедрения этой функции никаких операций с ко-

дом выполнять не нужно. Отключить эту функцию тоже

нельзя. Пользователь может отклонить запрос или устано-

вить предельный объем данных. Если данные не были за-

писаны по какой-то из этих причин, команда вер-

нет значение false. Если пользователя запрашивают о

разрешении, вы получите результат pending. ,

Рис. 26.3. Диалоговое окно

Можно указать минимальный размер файла, который Flash Player Settings

команда flush зарезервирует для коллективного объекта внутри Flash-

процессе ожидания решения Если размер фильма при первой попытке со-

превысит этот объем, диалоговое окно откроется хранения коллективного объекта

снова и запросит разрешение пользователя на хранение

большего количества данных.

Получить данные из коллективного объекта так же просто, как и задать объект. Если для

своего фильма вы еще не назначили коллективный объект глобальным, то начать нужно с

этого шага. Затем доступ к свойству можно получить следующим образом:

mySO =

=

Если коллективный объект еще не существует или если отсутствует свойство

мы получим значение

Каждый раз при создании нового коллективного объекта он располагается так, что доступ

к нему могут получить только фильмы с одного и того же Web-узла. По умолчанию доступ к

коллективному объекту могут получить только запросы из одного и того же фильма. Однако,

указав полный путь к коллективному объекту, вы добьетесь того, что доступ к нему смогут

получить и другие фильмы с того же узла.

Например, если Flash-фильм расположен на узле

то путь к коллективному объекту на жестком диске пользователя бу-

дет Доступ к объекту можно получить с помощью следующего кода:

mySO =

Эта строка кода позволяет фильмам коллективно использовать информацию в пределах

всего сеанса пользователя или при повторном сеансе.

ГЛАВА 26. ЛОКАЛЬНАЯ связь 621

ВЗАИМОСВЯЗЬ FLASH-ФИЛЬМОВ

Еще одним способом взаимодействия, о котором вам следует знать, является взаимосвязь

двух фильмов в одном и том же броузере.

На Взаимосвязь двух фильмов может быть реализована только в случае, если

фильмы находятся на одном и том же узле.

Для реализации такого взаимодействия сначала необходимо настроить принимающий

фильм для приема входящих сообщений. Эта операция выполняется путем задания нового

объекта локального соединения. Затем для подготовки к приему входящих сообщений ис-

пользуется команда connect:

= new

Далее необходимо создать функции для обработки входящих сообщений:

{

сделать что-то с myString

}

Фильм, отправляющий сообщение, создаст объект локального соединения и будет ис-

пользовать команду send для передачи сообщений. Первым параметром является имя соеди-

нения принимающего фильма. Вторым параметром является имя сообщения, соответствую-

щее вызываемой функции. Последним параметром являются отправляемые данные.

myLC = new

"Hello

Если вы планируете отправить только одно короткое сообщение, то для закрытия соеди-

нения можете использовать команду close:

Внимание! На момент написания этой книги локальные коллективные объекты в реальных

ситуациях использовались разработчиками достаточно редко. Информация о

последних разработках и "подводных камнях" содержится в технических при-

мечаниях Macromedia и на Web-узлах разработчиков.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему не работает

Чтобы такая взаимосвязь заработала, необходимо выполнить несколько действий: задать

параметры ID дескрипторов OBJECT и EMBED, параметр swLiveConnect дескриптора

EMBED, а также включить функцию JavaScript для получения сообщения и функцию

VBScript — для передачи сообщения из VBScript в JavaScript. Если хотя бы одно из этих дейст-

вий пропущено или в нем допущена ошибка, взаимосвязь работать не будет. Кроме того, про-

верьте, поддерживает ли такую взаимосвязь ваш броузер.

Взаимосвязь работает компьютере, но не работает

на других машинах.

622 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

Вероятно, пользователи работают с броузерами, не поддерживающими такой тип взаимо-

связи. Кроме того, в их броузерах может быть просто отключена поддержка JavaScript или

ActiveX. Некоторые организации в целях безопасности по умолчанию отключают на своих

компьютерах эту функцию.

Некоторые пользователи сообщают, что мой локальный коллективный объект у них не работает.

Некоторые компьютеры, особенно в школах и библиотеках, настроены так, что сохране-

ние локальных данных броузерами или Flash не разрешается.

Когда я работаю с в программе Director, воспроизведение фильма Director

существенно замедляется.

Фильмы Director воспроизводятся со скоростью, почти в 40 раз превышающей скорость

Flash-фильмов. Поэтому добавление Flash-фильма в приложение Director действительно мо-

жет существенно снизить скорость воспроизведения фильма Director. По возможности вы-

полните максимально большую обработку данных в Lingo и как можно меньшую в элементе

Flash. Кроме того, не забывайте установить свойство static для любого Flash-элемента, не

являющегося анимацией.

ГЛАВА 26. ЛОКАЛЬНАЯ связь 623

ГЛАВА 27

ВЗАИМОСВЯЗЬ с СЕРВЕРОМ

В ЭТОЙ

Загрузка текстовых данных 625

Внедрение данных на HTML-страницу 628

Загрузка динамических данных 630

Отправление данных 631

Возможные проблемы 633

Flash за работой: отправление электронной почты из Flash 634

ЗАГРУЗКА ТЕКСТОВЫХ ДАННЫХ

Существует множество способов передачи данных фильмом Macromeida Flash и

сервером, из которых можно выбрать наиболее приемлемый для себя. Фильмы могут считы-

вать простые текстовые файлы или данные с HTML-страницы. Эти данные не обязательно

должны поступать из статичного источника. Фильмы также могут загружать обновленные

данные из и баз данных. Можно даже пересылать данные обратно на сервер.

Во Flash MX представлен новый способ загрузки данных с сервера. Он называется объек-

том Данный объект занял место использовавшейся ранее функции Loadvars и ее

разновидностей.

ЗАГРУЗКА ДАННЫХ с помощью ОБЪЕКТА LOADVARS

Для получения блока данных с сервера необходимо просто создать объект LoadVars, а за-

тем подать команду load следующим образом:

var myLoadVars = new

В приведенном выше коде в качестве примера загружаемого файла используется

data.txt. Этот текстовый файл должен иметь специальный формат:

Обратите внимание на применение двух специальных знаков:

равенства и Знак равенства разделяет имя свойства и его значение. Знак ампер-

стоит после значения свойства. В текстовый файл можно поместить сколько угодно пар

свойство-значение. Например:

Строку не нужно заключать в кавычки. Кроме того, внутри строк могут быть вставлены

символы разрыва строки, которые будут включены в значение свойства, как показано в при-

веденном ниже примере.

проверка

многострочной переменной,

переданной во

После загрузки этих данных свойства добавляются в объект LoadVars. Так, в приведен-

ном выше примере добавляется свойство со значением 7. Проверить его можно следующим

образом:

Подробная информация о строках приведена в главе 12 "Управление

переменными, данными и типами данных".

ИСПОЛЬЗОВАНИЕ ОБЪЕКТА LOADVARS

При использовании команды load вы не увидите немедленных результатов. Сначала

Flash запрашивает файл с сервера, а затем необходимо подождать, пока он загрузится. И

только после этого можно прочитать содержащуюся в нем информацию. Весь процесс может

занять от нескольких долей секунды до нескольких секунд.

Как узнать, когда завершилось выполнение команды load? Для этого существуют два

способа.

Можно проверить, дает ли свойство loaded объекта LoadVars значение true, но для

этого потребуется неоднократно проверить свойство loaded. Вместо этого можно использо-

вать событие объекта LoadVars и создать функцию, которая будет выполняться при

завершении загрузки. Ниже приведен пример.

myLoadVars = new

{

results =

Данный сегмент кода, который, к примеру, присоединен к кнопке в имеющемся на при-

лагаемом компакт-диске демонстрационном файле la, установит значение перемен-

ной results равным результату исполнения функции toString. Данная функция при ис-

пользовании с объектом LoadVars покажет свойства объекта в виде одной длинной строки.

Результат выглядит следующим образом:

Файл txt содержит строку

626 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

Здесь порядок переменных обратный. Кроме того, символы преобразованы так, чтобы

использовались знаки перехода, похожие на те, что используются при работе с данными

Internet. Например, %20 означает число 20, равное десятичному числу 32,

и является кодом символа пробела.

Типы MIME

Любые даты следует хранить на сервере в виде типа MIME orm-

Типы MIME определяют, какие типы файлов данных содержатся на сервере. Обычный

текстовый файл представляется как text/html. Flash-фильмы должны корректно обрабаты-

вать оба типа файлов, но в предыдущих версиях программы возникают проблемы с типом

text/html. При возникновении каких-либо вопросов об этих типах MIME обратитесь к своему

Web-мастеру.

Ход загрузки большого файла данных можно отслеживать с помощью Объект

LoadVars имеет свойства getBytesTotal и которые можно использо-

вать для создания панели отображения хода загрузки. Однако в большинстве случаев файлы

данных имеют слишком маленькие размеры, и необходимости отображения хода их загрузки

просто не возникает.

Вопросы безопасности

Flash может считывать данные только с того сервера, на котором расположен Flash-фильм. Это

утверждение не является истинным при тестировании фильма во Flash MX или автономном

проекторе, но при просмотре фильмов через Internet такое ограничение накладывается. Поэто-

му по причинам безопасности вы не сможете использовать Flash для загрузки данных с одного

узла на другой.

СТАРЫЙ СПОСОБ ЗАГРУЗКИ ПЕРЕМЕННЫХ

Стоит упомянуть и о старом методе получения данных с сервера. Дело в

том, что очень многие разработчики, научившиеся программировать в старых версиях Flash,

до сих пор по привычке продолжают им пользоваться.

Метод LoadVariables похож на объект LoadVars, но вместо хранения получаемых дан-

ных внутри своего объекта он создает переменные и заполняет ими видеоклип, в котором рас-

положен, или корневой уровень, если он находится там. Метод выглядит следующим образом:

Если рассматривается тот же файл txt, что и в предыдущем примере, то будут соз-

даны и занесены в видеоклип переменные а, Ь и с.

При использовании метода LoadVariables обнаруживаются два его основных недостат-

ка. Во-первых, данные не хранятся компактно внутри объекта LoadVars, а разбросаны по

переменным на текущем уровне. Во-вторых, для работы с переменными после их загрузки

нельзя создать события, подобные onLoad. Вместо этого нужно использовать обработчик

что не всегда удобно.

И еще более серьезная проблема при работе с методом LoadVariables заключается в том,

что при его использовании для отправления данных (со вспомогательным вторым параметром

GET или POST) все переменные передаются на текущий уровень. Это означает, что необходимо

создавать специальный видеоклип только для хранения данных, подлежащих отправке. В по-

добных ситуациях работать с объектом LoadVars значительно проще. Далее в этой главе мы

рассмотрим, как использовать объект LoadVars для отправки данных обратно на сервер.

ГЛАВА 27. ВЗАИМОСВЯЗЬ с СЕРВЕРОМ 627

ВНЕДРЕНИЕ ДАННЫХ НА HTML-СТРАНИЦУ

Наиболее надежным и эффективным способом передачи данных с сервера в фильм явля-

ется внедрение данных на Web-страницу в то место, с которого фильм сможет легко их счи-

тать. Эта процедура реализуется путем помещения данных в параметры src/movie дескрип-

торов и EMBED на Web-странице. Например, типовой параметр OBJECT фильма будет

выглядеть следующим образом:

Кроме того, в список определений переменных после имени фильма можно поместить

вопросительный знак:

В результате три переменные, начиная с pageVarl, будут установлены в соответствую-

щие значения. Это происходит сразу же после загрузки фильма, поэтому можно ожидать, что

эти значения будут присутствовать в момент начала выполнения сценария. Все переменные

будут находиться на корневом уровне.

Включение переменных с помощью метода loadMovIe

Методика помещения переменных после имени файла применима и к командам

Flash-фильму можно указать на необходимость загрузки нового фильма, включить в команду

вопросительный знак и затем объявить переменные. В результате новый фильм будет загружен

с указанным набором переменных. Например:

Те же самые данные необходимо указать и после параметра src дескриптора EMBED. В про-

тивном случае переменные смогут получить только пользователи Windows, работающие с бро-

узером Internet Explorer. Ниже приведен полный дескриптор OBJECT/EMBED с переменными,

заданными для его обеих частей.

<OBJECT

NAME=movie

</EMBED>

628 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

Просмотреть данную страницу в действии можно с демонстрационных файлов

и

Данная методика достаточно мощная серверной поддержки. Например, с ее помощью

можно Rash-фильм с заголовком Web-узла. Внутри фильма можно зарезервировать ме-

сто для отображения заголовка страницы, на которой этот фильм появляется. Созданное дина-

мическое текстовое поле можно связать с переменной, заданной на Web-странице. В результате

переменная на одной странице может принимать значение My Home Page, а на

другой — my Links. Обе страницы используют один и тот же Flash-фильм, но с различными

значениями переменной titleText, заданной в параметрах src/movie. Один и же фильм

с заголовком может выполняться на всех Web-страницах.

Кроме того, с помощью данной методики в фильм можно передавать динамические дан-

ные. Самым простым примером является передача в фильм текущего времени. Объект Date

ссылается на время, установленное на компьютере пользователя. Как правило, оно установ-

лено правильно, но может быть легко изменено на любое другое значение. Если ваш Web-

узел достаточно популярен, то велики шансы, что каждый день на него будут заходить посе-

тители, на компьютерах которых дата и время установлены неправильно. Кроме того, даже

посетители, на компьютерах которых дата и время установлены правильно, могут жить в раз-

ных часовых поясах. Что же нужно сделать для того, чтобы отобразить точную дату и время в

том виде, в каком они установлены на сервере?

Правильное время можно отобразить с помощью серверного включения. Серверное

включение представляет собой маленький дескриптор, который помещается на Web-

страницу для добавления небольшого количества данных или целого файла перед отправле-

нием пользователю. Пользователь видит готовую страницу, которая внешне никак не отлича-

ется от обычной Web-страницы, но ее HTML-код написан специальным образом так, чтобы

сервер знал, и куда следует включать.

Серверные включения

Серверные включения разрешены не на всех Web-серверах. Чтобы выяснить, включена ли

данная функция, и уточнить, нужны ли для ее поддержки какие-то специальные настройки, обра-

титесь к администратору своего сервера или к Internet-провайдеру. Например, многие серверы

не поддерживают серверные включения для файлов . html, а только для файлов .

Чтобы воспользоваться серверными включениями для отправления во Flash-фильм теку-

щего времени, параметр src/movie необходимо изменить так, чтобы он выглядел следую-

щим образом:

Серверным включением является часть Если

сервер корректно анализирует синтаксис файла серверного включения, он увидит данный

код и заменит его текущим значением даты и времени. Результат может выглядеть так:

Sunday, 24-Feb-2002 10:18:19

Изменения вносятся до того, как страница будет отправлена пользователю. Если вы про-

смотрите исходную страницу, то увидите фактическую дату и время и никаких признаков того,

что на реальной HTML-странице фактически появляется дескриптор серверного включения.

Демонстрационные файлы shtml и f la не будут рабо-

тать, если запустить их с жесткого диска компьютера или с прилагаемого к книге компакт-

диска, поскольку вы не передаете их через Web-сервер. Выгрузите файлы . shtml и . swf в

тестовый каталог на узле и просмотрите их в действии. Если в динамическом текстовом поле

вместо значений даты и времени вы увидите дескриптор echo, то это означает, что серверное

включение в вашей системе не поддерживается.

Использование серверных включений представляет собой самый простой способ добавления

динамических данных на Web-страницы. В настоящее время стали популярными и другие техно-

логии, такие как Active Server Pages (ASP), Java Server Pages (JSP), Personal Home Pages (PHP),

ГЛАВА 27. ВЗАИМОСВЯЗЬ с СЕРВЕРОМ 629

и ColdFusion. Любую из них можно использовать для создания динамических Web-

страниц, содержащих пользовательские переменные, подлежащие передаче во Rash-фильм.

Основной недостаток передачи данных в фильм с помощью параметров src/movie за-

ключается в том, что, как правило, данные должны быть краткими и что пользователь может

увидеть их, просмотрев исходный код Web-страницы, которую он посещает.

ЗАГРУЗКА ДИНАМИЧЕСКИХ ДАННЫХ

Использование динамически создаваемых Web-страниц является лишь одним из способов

наполнения фильмов динамическими данными. Помимо этого, для получения данных из ди-

намически созданного источника можно также использовать объект Чтобы его

можно было использовать, необходимо написать серверную программу, которая называется

также общим шлюзовым интерфейсом, или пишутся на многих

языках, таких как Perl, С и Java. Поскольку обучение этим языкам выходит за рамки данной

книги, мы постараемся рассматривать самые простые примеры, в частности, с применением

Perl, поскольку этот язык наиболее распространенный и понятный.

Рассмотрим пример получения с сервера текущего времени. Написанная с этой целью на

языке Perl программа выглядит так:

print

$time =

print

exit

Если вы хотите испытать эту программу на своем сервере, необходимо предпринять не-

сколько действий. Данный сценарий есть в файле имеющемся на прилагаемом к

книге компакт-диске. Выгрузите его на свой Web-сервер. Если на вашем сервере CGI-

сценарии могут выполняться только в специальном каталоге необходимо выгрузить

сценарий в этот каталог. Затем необходимо задать разрешения для исполнения сценария.

Написание

Если вы уже растерялись, это означает, что, вероятно, вы никогда не писали В

этом случае я настоятельно рекомендую обратиться за помощью к своему Web-администратору

или кому-нибудь, имеющему опыт написания Малейшая вариация конфигурации

вашего сервера может привести к тому, что программа без помощи опытного программиста не

заработает.

Теперь направьте свой броузер к месту расположения CGI-программы в Web. Вы должны

увидеть страницу, выглядящую приблизительно так:

Sun Feb 24 2003

Если на странице отображено сообщение об ошибке, это означает, что либо сервер не

сконфигурирован для исполнения CGI-программ, либо не заданы надлежащим образом раз-

решения. Есть еще множество мелких причин, по которым программа, написанная на языке

Perl, может не работать: Perl не установлен на сервере, он находится не в каталоге

/usr/bin/perl, файл Time.pl не был выгружен как текст т.п. Самый лучший способ

решения этих проблем — обратиться за помощью к человеку, который пользовался этими

программами раньше.

Теперь, когда есть программа Perl, генерирующая простую Web-страницу, которую может

использовать броузер, можно внести такие изменения, чтобы она могла использоваться Flash.

Первым шагом будет использование для возвращаемых данных соответствующего типа

MIME. Для этого предназначена вторая строка кода. В данном случае задан тип /html,

но нужно указать

630 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

Следующим шагом будет указание выходных данных в формате

Ниже приведена результирующая программа.

print

$time =

print

exit 0;

Чтобы Flash-фильм мог считывать эти данные, воспользуйтесь объектом Но-

вый сценарий будет похож на приведенный в начале настоящей главы:

on {

myLoadVars = new

= {

=

}

Этот код можно увидеть в демонстрационном фильме f la. Когда пользова-

тель щелкает на кнопке, фильм вызывает файл Flashtime и получает возвращаемое им

значение. Результат должен выглядеть приблизительно следующим образом:

Time=Sun Feb 24

Затем свойство currentTime объекта myLoadVars копируется в переменную корневого

уровня currentTime. Эта переменная связана с динамическим текстовым полем, что позво-

ляет увидеть полученный результат.

Чтобы фильм мог работать на сервере, необходимо выгрузить файл Flashtime.pl, за-

дать его разрешения и выгрузить файлы и Flashtime. swf. Все они

должны быть размещены в одном каталоге.

Очень важно понимать, что время, отображаемое во Flash-фильме, является отражением

реального времени, установленного на сервере, т.е. время будет разным при каждом запуске

фильма. Теперь Flash-фильм и вправду загружает динамические данные.

Установка времени является самым простым примером использования динамических

данных. Начиная с этого момента возможность использования подобных данных целиком за-

висит от ваших навыков серверного программирования. Описанную простую программу Perl

можно заменить на такую, которая считывает информацию из базы данных и возвращает

данные более сложного вида. Например, программа может возвращать случайный набор про-

стых вопросов или последние биржевые котировки.

Процедура передачи данных из Flash обратно на сервер похожа на процедуру передачи

данных на сервер с HTML-страницы. Если ранее вы уже передавали информацию подобным

образом, то наверняка знаете, что для возможности реализации приема и записи отправлен-

ной информации на другой стороне линии передачи должна размещаться

Вы также должны что используются два протокола: GET и POST.

Метод GET является самым простым. Если он применяется, то увидеть это можно в адрес-

ной строке броузера. Например, в ней может содержаться URL, использующий метод GET

для отправления данных на сервер:

В данном случае выполняется передача двух блоков данных в сценарий cgi.

Последующая обработка данных целиком зависит от сценария.

ГЛАВА 27. ВЗАИМОСВЯЗЬ с СЕРВЕРОМ 631

Ниже приведен пример подобного сценария. В данном случае сценарий, написанный на

языке Perl, захватывает входную строку GET и записывает ее в файл txt. В броузер

возвращается текст

$input_data =

txt")

print OUTFILE

print

print

Исходным URL могут быть данные, вводимые пользователем, начиная от стандартной

HTML-ссылки до HTML-формы, в которой используется метод GET.

Данные берутся из части стоящей за вопросительным знаком, которую также называ-

ют строкой запроса. Команда open открывает файл txt. Перед именем файла стоит

символ означающий, что новые данные будут присоединены к имеющимся в файле. Затем

выполняется запись информации, сопровождаемой символом разделителя строк. После закры-

тия файла записывается слово Данное сообщение заменяет текущую Web-страницу

в броузере. Оно свидетельствует о том, что выполнила свою работу.

Чтобы этот сценарий работал на сервере, необходимо выгрузить файл и пус-

той текстовый файл txt. Для обоих файлов необходимо задать разрешения. Затем

файлы можно протестировать в броузере, вводя в URL различный текст после вопроситель-

ного знака. Любые вводимые данные должны быть записаны в файле.

Записывать данные в файл посредством объекта LoadVars. Кроме load в объекте

имеется также команда send. Приведенный ниже сценарий кнопки собирает три

значения переменных в объект LoadVars и передает их в

on (release) {

= new

=

=

=

}

Первым параметром команды send является местоположение Вторым

параметром является целевое окно, в котором будут содержаться результаты, возвращенные

В данном случае целевое окно означает, что полученные резуль-

таты должны заменить текущую страницу, в том числе и Flash-фильм. Третьим параметром

является либо либо в зависимости от метода, ожидаемого CGI-программой.

Предположим, что вы не хотите заменять страницу и Flash-фильм результатами, возвра-

щаемыми CGI-программой, а хотите, чтобы Flash-фильм продолжался. Тогда вместо коман-

ды send следует использовать команду sendAndLoad. Вторым параметром этой команды яв-

ляется не целевое окно броузера, а другой объект LoadVars.

В исходном объекте LoadVars содержатся переменные, подлежащие отправке, а во вто-

ром — возвращаемые данные. Ниже приведен пример.

on (release) {

myLoadVars = new

myLoadVarsReceive = new

=

632 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

=

= {

// сделать что-нибудь с информацией

}

}

Для отправления значений переменных на сервер можно также воспользоваться методом

POST. Фактически этот метод более предпочтителен, поскольку он позволяет передавать

длинные строки. Метод GET, в зависимости от броузера и сервера, накладывает определен-

ные ограничения на размер передаваемой строки.

Чтобы в программе Perl считать информацию, переданную с помощью метода POST, стро-

ку, в которой задаются входные данные необходимо заменить на такую:

read $input_data,

Теперь программа Perl будет считывать данные стандартного входящего потока, посту-

пающего с помощью метода POST. Больше в программу не нужно вносить никаких измене-

ний. Естественно, что во Flash-фильме необходимо изменить команды load, send или

sendAndLoad, чтобы вместо метода GET использовался метод POST.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Мои сценарии Perl не выполняются на сервере. Что я делаю неправильно ?

Важно понимать, что отличается от Flash-программирования.

Если электрику нужно провести водопровод для того, чтобы иметь возможность проклады-

вать провода, он не будет делать это сам, а обратится к водопроводчику. Некоторые Flash-

программисты могут дополнительно освоить навыки написания CGI-программ, а другим эта

задача покажется тяжелой. При возникновении проблем лучше всего обратиться за помощью

к людям, обладающими опытом решения подобных задач.

Когда я запускаю фильм во Flash MX, он корректно связывается с сервером. Но когда

я выгружаю его в Web, он перестает работать.

Убедитесь в том, что объект пытается получить данные с того же самого сервера.

Если Flash-фильм пытается обратиться к файлу или сценарию другого домена, он наверняка не

будет работать. Однако Flash MX и проектор могут взаимодействовать с любым сервером.

Я включаю переменные в дескриптор OBJECT фильма. В броузере Internet Explorer

под Windows все работает нормально, а в других переменных нет.

Вероятно, вы забыли добавить переменные в параметр src дескриптора EMBED или допус-

тили опечатку в дескрипторе EMBED, а не в дескрипторе Броузер Internet Explorer для

использует дескриптор и игнорирует дескриптор EMBED, тогда как Netscape и

другие броузеры используют дескриптор EMBED и игнорируют дескриптор OBJECT.

Я уверен, что моя написана правильно и должна работать, но я не

могу заставить Flash загрузить из нее данные.

Вы можете и всегда должны тестировать свои в броузере с помощью

HTML. Для программ, использующих метод GET, переменные можно добавлять в адресную

строку броузера. Для программ, использующих метод POST, можно создать простую HTML-

страницу с которая вызывала бы так же, как это должен делать

ГЛАВА 27. ВЗАИМОСВЯЗЬ с СЕРВЕРОМ 633

Flash-фильм. Единственное изменение, которое необходимо внести в — это

задать тип MIME как text/html. Если протестировать CGI-программу таким образом, вы

сможете определить, происходит ли проблема из или из Flash-фильма.

FLASH ЗА РАБОТОЙ: ОТПРАВЛЕНИЕ ЭЛЕКТРОННОЙ почты

из FLASH

Распространенной задачей, которую приходится решать разработчикам Flash, является

возможность отправки электронной почты непосредственно из Flash-фильма. Обычно элек-

тронная почта отправляется посредством полнофункциональной почтовой программы, уста-

новленной на компьютере пользователя, например, такой как Microsoft Outlook. Однако

Flash-фильм выполняется в броузере, а не в почтовой программе. А броузеры, как правило,

вообще не имеют встроенных функций отправки электронной почты.

Чтобы из Flash-фильма можно было отправить электронную почту, ее необходимо заста-

вить пройти через сервер. Фактически фильм должен передать информацию на сервер, кото-

рый выполнит всю остальную работу.

Имеющийся на прилагаемом компакт-диске файл содержит несколько тек-

стовых полей и кнопку Submit (Отправить). Кнопка, содержащая приведенный ниже сцена-

рий, соберет данные из текстовых полей и отправит их в CGI-программу Для того

чтобы свойства могли быть считаны с сервера, в ней используется

Единственным свойством будет result, содержащее строку в случае, если электронная

почта была отправлена.

on (release) {

// задание переменных для отправки

= new

=

= email;

= subject;

=

// задание подлежащего получению

myLoadVarsReceive = new loadVars О;

= {

// переход к кадру, в зависимости от возвращенного сообщения

if == "OK") {

} else {

gotoAndStop

}

// отправка электронной почты

myLoadVarsReceive,

}

На сервере программа Email установит связь с серверной программой отправления

почты. Эта небольшая программа позволяет отправлять электронную почту

с сервера.

Программа отправления почты установлена не на всех серверах. Кроме того,

она может быть установлена на сервере, но немного в другом месте. Если вы

не уверены, обратитесь за помощью к администратору сервера.

634 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

Мне не хотелось бы уделять слишком много времени обучению Perl, однако в приведен-

ном ниже коде даны комментарии, которые позволят увидеть, какую функцию выполняет тот

или иной блок кода. Некоторые участки кода даже похожи

# местоположение почтовой программы сервера

$mailprog =

адрес, по которому следует отправить электронную почту

$mailto =

# заголовок для отправления результата обратно во Flash

print

получение данных по методу POST

read

# разбивка полученных данных в массив

и удаление кодировки знаков переключения

®data_array =

foreach $data_item (®data_array) {

($tag,$val) =

$val =- s/\+/

$val =-

=

# связь с почтовой программой сервера

open (MAIL, die open

# запись сообщения

print MAIL "From:

print MAIL "Subject:

print MAIL

close

сообщение обратно во Flash

print

exit

Стоит задуматься, нужна ли на самом деле заказчику возможность отправки электронной

почты. Например, если вы создаете игру и хотите, чтобы ее участники имели возможность за-

ключать пари, то с помощью данной методики можно легко отправить имя пользователя и его

электронный адрес посредством электронной почты. Однако вместо этого можно создать ба-

зу данных и хранить в ней записанные имена.

ГЛАВА 27. ВЗАИМОСВЯЗЬ с СЕРВЕРОМ 635

ГЛАВА 28

XML-ДАННЫЕ

ЭТОЙ

Знакомство с XML 637

Синтаксический анализ XML-данных 639

Создание XML-данных 643

Импортирование XML-документов 644

Отправление XML-документов на сервер 646

646

Возможные проблемы 647

Flash за работой: простое XML-приложение 647

ЗНАКОМСТВО XML

Последние несколько лет тема XML является наиболее актуальной среди компьютерных

разработчиков. Тем не менее лишь немногие знают, что такое XML и как им пользоваться.

В приложение Flash MX включен ряд функций, позволяющих импортировать, экспорти-

ровать и обрабатывать XML-данные. Эти функции являются одними из наиболее мощных,

хотя и недостаточно широко используемых инструментов Flash.

XML (Extensible Markup Language — расширяемый язык разметки) представляет собой

простой способ хранения информации баз данных. Данные хранятся в виде простых тексто-

вых файлов. Для описания данных используются дескрипторы, во многом похожие на деск-

рипторы описания данных HTML-страницы.

Язык XML похож на HTML. Рассматривая его под таким углом, легко понять, что он из себя

представляет. При этом следует также знать, что между языками XML и HTML существует

много отличий. HTML используется для описания Web-страницы, a XML можно использовать

для описания чего угодно. В HTML имеется ряд предварительно заданных дескрипторов, таких

как <Р>, и <А>, тогда как предварительно заданных дескрипторов нет вообще.

Теперь рассмотрим простой пример Приведенный ниже код описывает склад продуктового

магазина, на котором имеется пять яблок (apple), семь апельсинов (orange) и два персика (peach).

<inventory>

<fruit>

</fruit>

Дескриптор, в который заключен весь код, имеет имя inventory (склад). В документе

может быть больше одного дескриптора верхнего уровня. Например, помимо inventory, в

нем могут быть дескрипторы cash (касса), supplies (поставщики) и employees

(работники). Из данного кода следует, что в настоящий момент этот XML-документ касается

только склада, поэтому в нем есть только один узел верхнего уровня.

Узлами называются элементы XML-документа. Дескриптор inventory является узлом.

Он имеет один дочерний узел, (фрукт), который, в свою очередь, имеет три своих до-

черних узла: apples, oranges и peaches.

Узлы, подобные inventory, и apples, называют XML-узлами. Узлы, подобные и 2,

называют текстовыми узлами. XML-узел имеет имя, но не имеет значения. Обычно вместо значения

он имеет несколько дочерних узлов. Текстовый узел, наоборот, не имеет имени, но имеет значение.

На рис. графически представлен описанный XML-документ. Каждый прямоугольник

представляет собой узел. Если один прямоугольник расположен внутри другого, это означает,

что он является дочерним для большего прямоугольника.

Первым шагом на пути к использованию XML-

документов является понимание того, как следует

перемещаться внутри документа. Например,

inventory является головным узлом, a —

дочерним для него. В свою очередь fruit имеет

три дочерних узла, первым из которых является

apples. Узел apples имеет один дочерний тексто-

вый узел со значением 5.

Таким образом, 5 — это первый дочерний эле-

мент apples, являющегося первым дочерним эле-

ментом friuts, являющегося первым дочерним

элементом inventory, являющегося первым до-

черним элементом документа.

Поскольку это описание слишком многословно, вам может показаться, что при работе с

XML всегда приходится иметь дело с такими длинными цепочками. Однако есть способ их со-

кратить. Существует основное правило XML, позволяющее превратить сложные документы в

простые. Оно гласит, что все XML-узлы являются, по сути, более мелкими XML-документами.

Поэтому узел apple можно считать самостоятельным документом. В этом случае головным

узлом является apples, а его дочерним элементом будет текстовый узел со значением 5. В ос-

тавшейся части этой главы для анализа XML-данных будет применяться данная методика.

inventory fruit

apples

oranges

peaches

Рис. Графическое представление

XML-документа продуктового магазина

XML

Одним из самых важных аспектов XML является его удобочитаемость как компьютерами,

так и людьми. Это отличает его от других языков представления баз данных, в которых либо

используется двоичный код, либо данные совершенно недоступны для чтения.

638 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

Таким образом, вы легко можете самостоятельно создать и отредактировать простой

XML-документ, воспользовавшись обычным текстовым редактором, например Notepad

(Блокнот) или Однако в большинстве случаев XML-документы создаются в дру-

гих программах. Передавать XML-данные могут многие серверные программы управления

базами данных. Некоторые приложения баз которые вы запускаете на компь-

ютере, имеют функцию экспортирования в XML.

Чтобы XML-документ мог быть считан во Flash, он должен быть правильно создан. Это оз-

начает, что должен быть соблюден определенный набор правил, некоторые из которых явля-

ются очевидными.

Все дескрипторы XML-документа должны иметь соответствующие закрывающие деск-

рипторы, т.е. дескриптору <apples> должен соответствовать закрывающий дескриптор

Кроме того, дескрипторы должны быть расположены в правильном порядке.

Например, порядок является правильным, а по-

рядок ruitxapples>2</f ruitx/apples> и в последнем случае син-

таксический анализ документа не будет проведен корректно.

Весь XML-документ можно поместить в одну строку, без дескрипторов и символов обры-

ва строки. Но при этом документ может стать "нечитабельным" для пользователей. Во

Flash MX существует возможность игнорировать символы табуляции и обрыва строки. Чтобы

избавиться от пробелов во Flash 5, приходится писать специальный код.

Дескрипторы в XML имеют не только значения или дочерние узлы, но и атрибуты. На-

пример, если в дескрипторе необходимо указать больше информации, чем просто apples,

можно использовать атрибут для задания более специфичного параметра:

<apples

Bo Flash атрибуты помечают одинарными, а не двойными кавычками.

XML во FLASH

XML во Flash используется по двум причинам. Во-первых, это облегчает взаимодействие с

другими системами. Если, к примеру, в фильм необходимо передать информацию из медицин-

ской базы данных, существует большая вероятность того, что администратор этой базы данных

совершенно не знаком с Flash, но имеет познания в области XML. Данные можно представить в

формате XML и использовать для передачи информации. Во многих случаях в базах дан-

ных или в сетях связи, доступ к которым необходимо получить из Flash, уже используется XML.

Во-вторых, функциональные возможности XML гораздо лучше подходят для обработки

больших и сложных данных, чем другие части Flash.

Например, если необходимо считывать массив данных, то как бы это можно было сделать

без Можно воспользоваться объектом для считывания данных в виде боль-

шой строки, а затем разбить эту строку в массив с помощью команды split. Но этот подход

слишком медленный. Его не ускорит даже написание собственной альтернативы команды

split. Либо же данные можно считывать в виде десятков и сотен переменных, но этот под-

ход является трудно организуемым.

С помощью XML-объекта можно быстро считывать и легко получать доступ к большому коли-

честву данных. Этот подход оптимален для получения и отображения информации из базы данных.

Например, его можно использовать для считывания ряда вопросов игры или отображения данных

пользователя в его базе данных. Выполнение тех же самых операций с помощью обычных пере-

менных и массивов будет гораздо медленнее и потребует значительно больших усилий.

СИНТАКСИЧЕСКИЙ АНАЛИЗ

Как же получить XML-данные во Flash? Для этого должен быть перенесен

во Flash и преобразован в XML-объект, который можно использовать в ActionScript. Преобра-

28. 639

ние текста в другой формат, как в данном случае, называют синтаксическим анализом. В сле-

дующих подразделах описываются основные функции XML-объекта и способы их применения

для получения и считывания XML-данных.

ПРЕОБРАЗОВАНИЕ ТЕКСТА в XML

Самым легким способом создания XML-объекта является преобразование небольшого

участка надлежащим образом отформатированного текста в XML. Эта операция заключается

в создании нового XML-объекта и наполнении его текстом:

myText +=

= new

Эту же самую операцию можно выполнить с помощью команды

myText =

myText +=

myXML = new

Хотя операция по созданию XML из текста, уже находящегося внутри Flash-фильма, име-

ет ограниченное применение, этот подход хорош для знакомства с XML. Далее в этой главе

мы расскажем о том, как импортировать XML-документы больших размеров из внешних

файлов и программ.

ИССЛЕДОВАНИЕ XML-ДАННЫХ

В предыдущей функции команда trace предназначена для вывода имени узла первого

дочернего элемента в документе. Поскольку в файле содержится пример про-

дуктового магазина, описанный ранее в этой главе и представленный на рис. 28.1, легко пре-

дугадать, что в результате должно быть выведено имя inventory. Узел inventory является

первым дочерним элементом XML-объекта.

На заметку Работая с имейте в виду, что некоторые термины обозначают одно и то

же. Например, и во Flash обозначают одно и то же;

узел XML-объекта — это то же самое, что и другой

Свойство f irstChild возвращает первый дочерний узел XML-документа. С помощью

подобного массиву свойства childNodes можно получить любой дочерний узел. Таким об-

разом, f irstChild и childNodes [0] означают одно и то же.

Помните, что узел XML-объекта представляет собой другой XML-объект. Узлы могут

представлять собой либо XML-узлы с именами и дочерними элементами, либо текстовые уз-

лы без имен или дочерних элементов, но имеющие значения.

Для получения имени XML-узла можно воспользоваться свойством nodeName, а для по-

лучения значения текстового узла — свойством Value.

Ниже перечислены различные XML-свойства, которыми можно воспользоваться для по-

лучения дочерних элементов, имен и данных XML-объектов.

• f irstChild. Возвращает первый дочерний элемент узла. То же самое можно полу-

чить посредством childNodes

• Возвращает значение true, если узел имеет дочерние элементы.

• lastchild. Возвращает последний дочерний элемент узла. Количество дочерних уз-

лов можно получить с помощью свойства length.

640 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

• next Возвращает следующий узел, если таковой имеется.

• nodeName. Возвращает имя дескриптора XML-узла или значение null, если данный

узел является текстовым.

• nodeType. Возвращает 1, если узел является XML-узлом, либо 3, если он

является текстовым.

• Возвращает значение текстового узла либо null, если узел является

XML-узлом.

• parentNode. Возвращает узел, являющийся родительским для данного.

• Возвращает предыдущий узел, если таковой имеется.

• attributes. Возвращает объект переменной, содержащий атрибуты (если имеются),

либо узел.

• Возвращает структуру дочерних узлов, подобную массиву. Для получе-

ния общего количества узлов можно воспользоваться свойством length, а для указа-

ния определенного узла — квадратными скобками.

Несмотря на простоту примеров, в которых было представлено свойство irstNode, для

навигации по XML-документу чаще всего используют свойство childNodes. Ряд приведен-

ных ниже примеров поможет понять, как следует использовать это свойство для получения

нужной информации. Сверяйтесь с рис. 28.1 или с предшествующим ему текстом.

Данная строка вернет inventory:

[0]

Следующая строка вернет значение null, поскольку первый узел является XML-узлом,

который имеет имя и содержит дочерние элементы, но сам по себе значения не имеет:

Эта строка вернет

rayXML.childNodes[0].childNodes[0].nodeName

Данная строка вернет apples:

Следующая строка вернет значение null, поскольку узел apples все равно является

XML-узлом и не имеет значения, а имеет только имя и дочерние элементы:

Чтобы получить значение содержащееся в узле e, необходимо взглянуть дочерний эле-

мент этого узла, которым является текстовый Приведенная ниже строка вернет значение

В связи с тем, что текстовые узлы не имеют имен, при попытке получить имя такого узла

будет возвращено значение

Узел fruit имеет три дочерних элемента. определить, анализируя свойство

length узла childNodes. Приведенная ниже строка вернет 3, поскольку узел

имеет три дочерних элемента.

ГЛАВА 28. XML-ДАННЫЕ 641

Получить имя второго дочернего элемента узла каковым является узел orange,

можно следующим образом:

Чтобы определить, является ли элемент XML-узлом или текстовым узлом, можно исполь-

зовать свойство Например, узел apple является XML-узлом, и приведенная ниже

строка вернет значение 1.

С другой стороны, узел, имеющий значение 5, является текстовым, и приведенная ниже

строка вернет значение

ОБЛЕГЧЕНИЕ ОБРАЩЕНИЯ XML

Некоторые из строк приведенного выше примера уже являются достаточно длинными, и

это при том, что рассмотрен был простой пример. что было бы, если бы доку-

мент имел еще несколько уровней. Мы получили бы строки, содержащие полдесятка обра-

щений к узлам childNodes. Все эти обращения могли бы сделать код слишком длинным и

запутанным.

К счастью, существует более простой способ углубиться в структуру XML-документа и полу-

чить нужные данные. Предположим, например, что необходимо получить количество яблок,

имеющихся в магазине. Ниже приведен код, с помощью которого можно решить данную задачу.

inventory =

fruit =

apples

appleCount =

=

Несмотря на то что данный код ненамного короче, чем строка с многочисленными обраще-

ниями к узлам childNodes, понять его гораздо легче. Кроме того, если далее необходимо будет

получить количество апельсинов, то у вас в наличии уже есть готовая переменная

ОБРАЩЕНИЕ к АТРИБУТАМ

Помимо дочерних элементов, XML-узлы могут также иметь атрибуты. Например, приве-

денный ниже XML-документ имеет атрибут с именем type, который имеет значение

<test

. Чтобы получить значение атрибута, необходимо знать его имя. Ниже приведен код с об-

ращением к атрибуту из предыдущего примера.

Свойство attributes фактически возвращает объект переменной, представляющий со-

бой перечень имен свойств и значений. Если вы хотите увидеть все имена свойств и значения

указанного атрибута, можете воспользоваться кодом, подобным приведенному ниже.

=

in myAttributes) {

642 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

XML-ДАННЫХ

позволяет создать XML-документ с нуля или изменить уже существующий. По-

сле создания пустого объекта к нему можно добавить узлы посредством множества команд.

Однако процедура создания XML-объекта немного беспорядочна. Начнем с простого

примера и создадим небольшой XML-документ, который выглядит так:

<test>123</test>

Сначала необходимо следующим образом создать XML-объект:

= new

Затем необходимо добавить узел с именем test. Эта процедура выполняется в два этапа.

Первый из них заключается в создании узла:

=

На данном этапе создается узел с именем test. Даже несмотря на то, что он является ча-

стью объекта фактически это ничего не дает. Его все равно необходимо присоединить

к узлу. В связи с тем, что в данном случае мы имеем дело с новым пустым XML-объектом,

только сам объект является узлом:

Для создания текстового узла, который будет дочерним для узла test, необходимо вос-

пользоваться немного другой командой:

textNode =

Теперь данный узел необходимо добавить к test в качестве дочернего элемента. К сча-

стью, для обращения к этому узлу все еще можно воспользоваться переменной testNode:

Для проверки заданных команд можно воспользоваться функцией toString и отпра-

вить XML-документ в окно Output:

В демонстрационном файле f la показан описанный пример с фруктами, реали-

зованный с помощью ActionScript. Ниже приведены другие команды, которые можно ис-

пользовать для модификации XML-объекта.

• Добавляет узел, который был создан с помощью команды

createElement или createTextNode.

• Создает копию узла. Если параметр глубина имеет значение

true, то копируются все дочерние элементы и последующие потомки.

• createElement Создает новый XML-узел. Этот узел не будет являться

частью документа до применения команды appendChild или ore.

• createTextNode Создает новый текстовый узел. Этот узел не

будет являться частью документа до применения команды appendChild или

insertBefore.

• (узел, Вставляет узел, созданный с помощью коман-

ды createElement или createTextNode.

• removeNode Удаляет дочерний узел.

ГЛАВА 28. 643

СОЗДАНИЕ и МОДИФИКАЦИЯ АТРИБУТОВ

Пока что за пределами команд о модификации оказались способы добавления или

изменения атрибутов. Модифицировать атрибуты простого. Достаточно присвоить

значение создаваемому или модифицируемому узлу. Например:

= 42;

Для создания простого XML-объекта с атрибутами, например <test

можно воспользоваться приведенным ниже кодом.

= new

testNode =

=

text =

ИМПОРТИРОВАНИЕ

В большинстве случаев использования XML-документов они фактически импортируются

извне Flash-фильма. В качестве XML-документов могут выступать текстовые файлы, распо-

ложенные на сервере или сгенерированные серверными

Внимание! XML-документы можно загружать только из того же домена, в котором находит-

ся Flash-фильм. Из других узлов XML-документы загрузить нельзя. Это справед-

ливо только в том случае, если фильм выполняется в броузере.

В некоторых случаях XML-объект подобен объекту В нем для загрузки данных

из внешнего файла или программы можно воспользоваться командой load.

Однако вместо файла формата он должен быть в формате XML.

Если файл является корректным XML-документом, он будет немедленно проанализирован

как XML-объект.

Теперь рассмотрим следующий пример. Приведенный ниже код, будучи помещенным в

первый кадр фильма, создаст новый XML-объект и загрузит его в фильм. Между этими двумя

командами я задал свойство ignoreWhite и установил его в значение true. Это означает,

что в документе будут проигнорированы символы табуляции и символы разрыва строки. Если

не установить это свойство, то вам придется написать XML-документ вообще без символов

табуляции и пустых строк или же в XML-объекте будут содержаться всевозможные нежела-

тельные текстовые узлы.

myXML = new

= true;

Команда не завершает задачу немедленно. Вам придется подождать до тех пор, пока

текстовый файл не будет загружен и проанализирован. Даже если все файлы находятся на ло-

кальном жестком диске вашего компьютера, то все равно доступ к следующей строке кода

нельзя будет получить слишком быстро.

XML-объект, как и объект LoadVars, имеет событие onLoad. Можно определить функ-

цию, которая будет запущена сразу же по завершении загрузки. Ниже приведен пример.

644 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

= new

= true;

.

myXML.onLoad = {

}

Еще один способ сообщения о том, что XML-файл был заключается в исполь-

зовании свойства loaded XML-объекта. Оно вернет значение true только после завершения

импортирования.

Кроме того, имеется еще ряд команд, предназначенных для отслеживания хода выполне-

ния загрузки большого документа. Ниже приводится их полный список.

• getBytesLoaded. Возвращает общее число битов, загруженных на данный момент.

• getBytesTotal. Возвращает общее число битов XML-файла.

• Возвращает значение только после того, как загрузится весь документ.

• status. Возвращает значение 0, если загрузка была выполнена успешно. Другие воз-

можные значения представлены в табл.

ТАБЛИЦА 28.1. ЗНАЧЕНИЯ, ВОЗВРАЩАЕМЫЕ с помощью КОМАНДЫ

Код ЗНАЧЕНИЕ

Анализ завершен без ошибок

Дескриптор CDATA не завершен

XML-дескриптор

-4 Дескриптор DOCTYPE не завершен

•5 Компонент не завершен

Плохо сформирован XML-элемент

• Нехватка памяти

-8 Параметр атрибута

-9 Начальный дескриптор не имеет соответствующего закрывающего дескриптора

-1° Найден конечный дескриптор без соответствующего начального дескриптора

Событие onLoad наступает после того, как произойдет следующее. Во-первых, должен

полностью загрузиться текстовый файл, содержащий XML. Во-вторых, XML-документ дол-

жен быть проанализирован как XML-объект.

Однако XML-текст можно перехватить, не анализируя. С этой целью используется собы-

тие onData, которое позволяет захватить данные до их анализа. Затем данные можно анали-

зировать самостоятельно, хотя перед этим придется создавать определенные пользователь-

ские функции. Ниже приведен пример.

= {

}

В данном примере код не выполняет никаких функций, которые нельзя было бы выпол-

нить с помощью обычной команды load. Однако видно, как выполнить некоторые нетриви-

альные задачи. Например, если серверная программа возвращает XML-документ, в начале

которого имеется дополнительная строка, то ее можно изъять из параметра xmlText до его

передачи в команду

ГЛАВА 28. XML-ДАННЫЕ 645

После того как XML-документ был проанализирован посредством команды load или

из него можно извлекать всевозможную информацию с помощью одного из при-

веденных ниже свойств.

• При использовании стандартов XML в начале каждого XML-документа

должен быть XML-дескриптор. Данное свойство возвращает строку, содержащую этот

дескриптор.

• Еще одним стандартным дескриптором XML-документов является

! DOCTYPE. Данное свойство вернет строку со значением этого дескриптора.

ОТПРАВЛЕНИЕ НА СЕРВЕР

После создания XML-документа с помощью его необходимо отправить об-

ратно в серверную программу для хранения или обработки. Эту операцию можно выполнить

с помощью команд send и

Эти две команды выполняют те же функции, что и при использовании с объектом

LoadVars. Команда send отправляет полный XML-объект обратно в адрес сервера. Если в

ней изменен второй параметр, как в приведенном ниже примере, то текст, возвращенный

будет передан в другой фрейм или в окно броузера.

send :

На заметку Если XML-данные необходимо передать на сервер с использованием специфиче-

ского типа то перед использованием команды send или sendAndLoad свой-

ство XML-объекта можно в значение нужного типа MIME.

В приведенной выше строке кода в качестве возвращаемого целевого элемента указан

элемент Это означает, что Web-страница будет целиком заменена содержимым,

возвращаемым серверной программой. Если второй параметр опустить, то операция объяв-

лена не будет и продолжится воспроизведение Flash-фильма.

Информация об объекте LoadVars приведена в главе 27 "Взаимосвязь с

сервером".

Применение команды sendAndLoad означает, что вторым параметром должен быть еще

один XML-объект. Этот новый объект получит возвращаемый с сервера XML как если бы

использовалась команда load.

= new

myXML. send returnXML)

Если вы хотите отследить ход загрузки в returnXML, необходимо использовать события

onData и onLoad объекта returnXML, а не объекта myXML.

тематически связаны с XML-объектами только в том, что и в тех и в других

используются данные формата XML. Однако в объекте XML Socket для получения и коллек-

тивного использования данных не применяются команды load и send. Вместо них для со-

единения с серверной программой используется команда connect.

Серверная программа сокета отличается от тем, что она выполняется все-

гда, а не только при ее вызове. Это означает, что сервер все время должен ожидать входящих со-

646 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

единений. Затем для установления соединения Flash-фильм использует команду connect. По-

сле установления соединения XML-данные можно передавать в обоих направлениях в режиме

реального времени. Сервер может передавать данные в фильм даже в случае, если фильм их не

запрашивает. Эта методика известна под названием технологии принудительной накачки.

Большинство атрибутов, которые необходимо знать для использования XML-сокетов, не

относятся к Flash или В этом случае требуется писать серверную программу,

обычно на языке Java или C++. Кроме того, необходимо хорошо ориентироваться в том, как

работают серверы и По этой причине мы не будем подробно рассматривать функ-

ционирование XML-сокетов.

Если для связи Flash с сокетами используется сторонняя то ее поставщик

должен предоставить документацию о том, как использовать для взаимосвязи с

его продуктом.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

После импортирования XML-документа я не могу найти узлы, которые должны

быть на месте. Есть ли способ удостовериться в том, что операция импортирования

выполняется ?

Существует много способов проверки документа после его импортирования. Проще всего

воспользоваться функцией toString с командой trace для передачи XML-объекта в ок-

но Output. Кроме того, можно проверить свойство status объекта. Если в каком-то из случа-

ев возникли это означает, что в XML-документе имеются ошибки. Необходимо

построчно просмотреть документ, чтобы найти пропущенный или написанный с ошибкой

дескриптор, либо использовать стороннее средство создания XML.

После импортирования XML-документа у меня получилось очень много пустых тек-

стовых Почему это произошло?

Любые пробелы, имеющиеся в документе, например символы возврата или табуляции,

будут преобразованы в немного бесполезные текстовые узлы, если перед анализом документа

не установить свойство ignoreWhite в значение

могу получить имя узла, но не могу получить значение этого же узла. Почему?

Узлы не имеют имен и значений. Они имеют или имена, или значения. Существует веро-

ятность того, что вы фактически ищете не значение, а текстовый узел, дочерним

для узла, имеющего имя.

FLASH ЗА РАБОТОЙ: ПРОСТОЕ XML-ПРИЛОЖЕНИЕ

XML, в первую очередь, считается технологией баз данных. Flash редко используется для ра-

боты с базами данных, но благодаря возможностям XML такие операции можно выполнять.

В данном примере мы рассмотрим создание простой программы управления базой дан-

ных. Эта программа позволяет пользователю вводить новые записи в базу данных, перечис-

лять записи в базе данных и редактировать записи. Кроме того, можно загрузить из внешнего

файла полную базу данных.

Окончательная версия программы содержится в демонстрационном файле la.

Рассмотрим ее и проанализируем код.

В первом кадре содержатся две строки, инициализирующие базу данных. Первая строка создает

пустой XML-объект, вторая устанавливает в значение о глобальную переменную Эта пе-

ременная будет использоваться для отслеживания записи, которую редактирует пользователь.

ГЛАВА 28. XML-ДАННЫЕ 647

database = new

numToEdit = 0;

Во втором кадре содержатся четыре кнопки: Load Books (Загрузить книги), List Books

(Перечислить книги), New Book (Новая книга) и Edit Book (Редактировать книгу). Кроме

того, в данном кадре содержится команда

Динамическое поле связано с переменной total. Приведенные ниже две строки кода

помещают в данное поле общее количество записей XML-объекта.

t =

total = "Total Number of

В каждой из четырех кнопок содержится простой обработчик on с командой

gotoAndStop. После щелчка на кнопках выполняется переход соответственно к кадрам

load, list, new или edit.

В кадре load содержится простой сценарий загрузки XML-документа из файла

Этот файл должен храниться в том же каталоге, что и Flash-фильм. На

'мом к книге компакт-диске имеется демонстрационный файл Books

database = new

= true;

= {

}

После загрузки и анализа файла фильм вернется к кадру меню. Если вы хотите написать бо-

лее надежную версию кода, можете выполнить проверку свойства status базы данных. Если

оно даст любое значение, отличное от воспользуйтесь возвращенных значе-

ний, приведенных в табл. и сообщите пользователю, что было сделано неправильно.

Как выглядит запись этой базы данных? В файл xml включены три записи. Вот

первая из них:

<book

<title>Deathworld</title>

<author>Harry Harrison</author>

<copies>l</copies>

Главный узел имеет имя book (книга). Он имеет один атрибут isbn. Имеется четыре до-

черних узла: title (название), author (автор), copies (экземпляры) и price (цена). Каж-

дый из них имеет один дочерний текстовый узел.

Файл может содержать множество подобных записей. Каждый узел book является дочер-

ним элементом XML-документа.

В кадре new не содержится большое количество кода. Данный кадр является совокупно-

стью текстовых полей ввода данных пользователем. Код просто сбрасывает предыдущие

чения полей, устанавливая переменные, с которыми они связаны, в значения пустых строк:

isbn =

title =

author =

copies =

price =

На рис. 28.2 изображен кадр new. Вы видите поля, которые может заполнять пользователь

для каждой записи.

648 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ с помощью FLASH

Total Number of Books: 0

Рис. 28.2. Кадр new позволяет пользователю вводить запи-

си в базу

В нижней части кадра new имеются две кнопки. Первая отменяет действие, игнорируя

введенные данные и возвращаясь к кадру меню. Вторая кнопка создает XML-узлы, необхо-

димые для добавления записи в базу данных. Ниже приводится полный код этой кнопки.

Проанализируйте его построчно и выясните, как создается и добавляется каждый элемент.

on (release) {

// создать узел book с атрибутом isbn

book

= isbn;

// добавить название книги

node =

text =

// добавить автора книги

node =

text =

// добавить число экземпляров книги

node

text =

node

// добавить цену книги

node =

text =

// добавить книгу к XML

ГЛАВА 28. XML-ДАННЫЕ 649

Следующим является кадр list. Он содержит большое динамическое текстовое поле,

связанное с переменной Оно задано многострочным, без переносов, так что в нем

можно отобразить много строк, каждая из которых будет представлять книгу.

Код данного кадра циклически проходит по всем XML-записям и получает значение тек-

стового узла, являющегося дочерним для узла title (заголовок). Эти значения добавляются

в переменную booklist с символом новой строки после каждой

=

{

book =

titleNode =

title =

booklist += title +

}

Этот код можно изменить так, чтобы отображать не только название книги. Например,

чтобы добавить в каждую строку имя автора, необходимо получить дочерний текст второго

(номер 1) дочернего элемента узла book. Либо же можно поместить номер узла book в начало

строки, в результате чего книги будут пронумерованы. Чтобы получить ISBN книги, взгляни-

те на атрибут узла book. Полный синтаксис номера ISBN выглядит так:

Последний кадр фильма, edit, похож на кадр new в том смысле, что он имеет те же самые

текстовые поля ввода данных. Но на этот раз в поля будут заранее внесены функции. Это дает

значения записи, соответствующей параметру и помещает их в переменные,

связанные с полями:

function {

book =

isbn =

title =

author =

copies =

price =

}

Сценарий кадра завершается вызовом функции populateForEdit для задания полей

текущей записи. Однако пользователь может воспользоваться одной из двух кнопок в нижней

части экрана, чтобы перейти к следующей или предыдущей записи. Сценарий кнопки пере-

хода к предыдущей записи выглядит следующим образом:

on (release) {

if (numToEdit < 0) numToEdit = 0;

}

Ниже приводится пример сценария кнопки перехода к следующей записи,

on (release) {

if (numToEdit > {

numToEdit =

Кнопка применения действий принимает значения полей ввода данных и применяет их к

записи в базе данных XML:

650 ЧАСТЬ V. РЕАЛИЗАЦИЯ ВНЕШНИХ СВЯЗЕЙ с помощью FLASH

on (release) {

book =

= isbn;

= title;

= author;

= copies;

[3] =

}

Кнопка выполнения вернет пользователя обратно к меню, игнорируя любые изменения,

внесенные в поля ввода данных. В качестве альтернативного варианта эта кнопка может ис-

пользоваться и для применения изменений, и для возврата к меню. В этом случае будет необ-

ходима кнопка отмены.

На этом рассмотрение программы завершено. Здесь преднамеренно опущено описание спо-

соба сохранения введенных данных. Загрузить данные во Flash очень легко, а вот сохранить их

во внешнем файле гораздо сложнее. Одним из вариантов является сохранение данных в виде ло-

кального коллективного объекта. Но тогда эти данные будут доступны только в определенном

Flash-фильме. Если вы стремитесь именно к такому результату, тогда все в порядке.

Локальные коллективные объекты рассматривались в главе 26 "Локальная

В еще одном способе сохранения базы данных серверная программа, ко-

торая будет принимать XML-объект из команды send или Если вы имеете опыт

написания подобных серверных программ, то легко освоите и эту методику. В противном случае

для выполнения подобной задачи вам потребуется помощь серверного программиста.

ГЛАВА 28. 651

ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

В ЭТОЙ

Глава 29. Печать Flash-фильма

Глава 30. Оптимизация, публикация и экспортирование фильмов

ГЛАВА

ПЕЧАТЬ FLASH-ФИЛЬМА

В ЭТОЙ ГЛАВЕ...

Печать содержимого Flash 655

Подготовка файлов к печати 656

Создание кнопки Print 663

Возможные проблемы 667

Flash за работой: невидимые чернила 668

ПЕЧАТЬ СОДЕРЖИМОГО FLASH

Печать многих типов содержимого таких как анимация, видео и аудио, может пока-

заться невыполнимой задачей. Разве можно зафиксировать и эффективно отобразить на бу-

маге мультимедийное содержимое фильма? Однако нельзя не учитывать тот факт, что поль-

зователям может понадобиться распечатать части Rash-узлов. Такие элементы, как подтвер-

ждение заказа, инструкции, длинные фрагменты текста и данные формы, должны

предусматривать возможность вывода на печать.

Учитывая многообразие типов содержимого Flash-узлов, очень важно уметь управлять па-

раметрами печати. Как и в вопросах, касающихся доступности и используемости узлов, на

разработчиках и дизайнерах, работающих с Flash, лежит ответственность за обеспечение

средств печати важных фрагментов Flash-узлов.

Печать Web-содержимого может привести к нежелательным и непредсказуемым результатам.

Прежде всего, Web-содержимое предназначено для отображения в Web, а не для печати. Особенно

это касается содержимого Flash. Вложенная сущность большей части Flash-содержимого может

привести к тому, что процедура печати покажется совсем непростой операцией. Поэтому очень

важным этапом является подготовка Flash-содержимого (по крайней мере, его части) к печати.

ПОДГОТОВКА ФАЙЛОВ к ПЕЧАТИ

Содержимое Flash можно распечатывать из Flash-плейера двумя способами: из контекст-

ного меню внутри Flash-плейера или посредством действия печати, как правило, на

кнопке, из Flash-фильма. Доступ к контекстному меню (рис. 29.1) можно получить, либо

щелкнув мышью и удерживая при этом нажатой клавишу <Ctrl> (Macintosh), либо щелкнув

правой кнопкой мыши (Windows) на Flash-фильме в окне броузера.

Процедура печати посредством контекстного меню имеет определенные ограничения.

Распечатать можно только кадры основной временной шкалы. Вложенные видеоклипы, а

также эффекты прозрачности и применения цветов не распечатываются. На данный способ

печати можно полагаться только в том случае, если фильм имеет одну шкалу либо

если подлежащее печати содержимое расположено исключительно в основной временной

шкале и к нему нельзя применить цветовые эффекты.

Для достижения наилучших результатов постарайтесь спланировать, какое содержимое можно

будет выводить на печать, еще на этапе компоновки фильма. Если вы планируете разрешить печать

только определенного содержимого, убедитесь, что его можно будет надлежащим образом распеча-

тать на бумаге нужного формата. При публикации фильма возможности регулировать параметры

размеров, масштабирования и выравнивания уже не будет.

Подробно о параметрах публикации рассказывается в главе 30 "Оптимизация,

публикация и экспортирование фильмов".

НАЗНАЧЕНИЕ МЕТОК КАДРОВ

Flash позволяет указать, какие кадры фильма следует распечатывать. По умолчанию рас-

печатываются все кадры основной временной шкалы. Однако их число можно ограничить,

присвоив метки только тем кадрам, которые вы хотите сделать доступными для печати. Эта

возможность позволяет сделать процедуру печати более дружественной по отношению к

пользователю. Если помимо традиционного статического содержимого в фильме содержится

и мультимедиа, можно указать, чтобы для печати были доступны только статические элемен-

ты. Нет совершенно никаких причин раздражать пользователей, позволяя им распечатывать

содержимое, которое все равно не будет распечатано хорошо.

Чтобы указать, какие из выделенных кадров должны быть доступными для печати, вы-

полните следующие действия.

Контекстное меню

Рис. Одним из способов печати является выбор опции Print из

контекстного меню Flash-плейера

656 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

1. Выделите кадр, который необходимо сделать доступным для печати, щелкнув на нем в

основной временной шкале фильма.

2. Выделив кадр, щелкните в поле Frame (Кадр) на панели инспектора свойств и введите

метку как показано на рис. 29.2.

На Если кадр, который вы не хотите распечатывать, следует за кадром, помечен-

ным для печати, то, для того, чтобы была сброшена метка в последующие

нераспечатываемые кадры необходимо вставить пустой ключевой кадр.

ОТКЛЮЧЕНИЕ ФУНКЦИИ ПЕЧАТИ

Чтобы отключить функцию печати фильма, необходимо воспользоваться контекстным

меню, так как возможности отключить печать с помощью кнопки Print (Печать) броузера не

существует. Задачу по отключению печати можно также выполнить посредством меток кад-

ров. Чтобы предотвратить печать фильма, выполните следующие действия.

1. Выделите кадр в основной временной шкале.

2. Выделив кадр, щелкните в поле Frame (Кадр) на панели инспектора свойств и введите

метку

3. Протестируйте фильм и убедитесь, что в его контекстном меню команда Print не явля-

ется активной (рис. 29.3).

Рис. 29.2. Кадры, подлежащие печати, назначаются путем присвоения им метки

ГЛАВА 29. ПЕЧАТЬ FLASH-ФИЛЬМА 657

Player 6...

Рис. 29.3. Для отключения функции печати назначьте для кадра метку ! #р. При этом будет отклю-

чена опция печати в контекстном меню Flash-плейера

Функцию печати можно отключить и в диалоговом окне Publish Settings (Параметры

публикации), указав, что контекстное меню Rash-плейера отображать не нужно. Для откры-

тия диалогового окна Publish Settings выполните команду Settings, а затем вы-

берите вкладку HTML. В группе опций Playback (Воспроизведение) снимите флажок с поля

опции Display Menu (Отображение меню), как показано на рис. 29.4. Однако имейте в виду,

что при этом не будут отображаться все элементы контекстного меню Flash-плейера.

ИЗМЕНЕНИЕ РАСПЕЧАТЫВАЕМОГО Фонового ЦВЕТА

Flash-плейер распечатывает фоновый цвет, заданный в диалоговом окне Document Prop-

erties (Свойства документа). Однако, если для печати доступно ограниченное число кадров,

то их можно распечатывать так, что фоновый цвет будет отличаться от фонового цвета ос-

тальных кадров фильма. Для изменения выводимого на печать фонового цвета выполните

следующие действия.

1. Создайте новый слой под всеми слоями доку-

мента, в которых были кадры, предна-

значенные для печати. Присвойте этому слою

имя color (фоновый цвет).

2. В кадр, помеченный для печати в слое фоно-

вого вставьте ключевой кадр.

3. Выберите инструмент Rectangle (Прямо-

угольник) и укажите цвет заливки, который будет

использоваться в качестве фонового. В слое фонового цвета нарисуйте контур, размер которого

будет больше рабочего поля (рис. 29.5).

4. Если последующие кадры не помечены для печати, не забудьте вставить пустые ключевые

кадры. В противном случае в них проявится фоновый цвет кадров, подлежащих печати.

0 Start

Рис. 29.4. Чтобы опубликовать фильм

без контекстного меню Flash-плейера, в

диалоговом окне Publish Settings сними-

те флажок с поля опции Display

658 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

5 10 25 30 35 40 45 60 65

Рис. 29.5. Для изменения фонового цвета, выводимого на печать, нарисуйте покрывающий

все рабочее поле контур, залитый нужным цветом

ОПРЕДЕЛЕНИЕ ОБЛАСТИ ПЕЧАТИ

Flash позволяет указать область печати внутри фильма. По умолчанию область печати оп-

ределяется границами рабочего поля, но можно задать и три другие области.

• Чтобы в качестве области печати назначить отдельное окошко в любом распечатывае-

мом кадре, в любом кадре назначьте это окошко, присвоив кадру метку

• Чтобы для всех распечатываемых кадров в качестве области печати назначить состав-

ное окошко, задайте аргумент Мах для действия печати.

• Чтобы задать окошко для каждого кадра, для действия печати назначьте параметр Frame.

Для назначения окошка печати выполните следующие действия.

1. Откройте новый файл и с одной стороны рабочего поля нарисуйте простой контур, как

показано на рис. 29.6.

Если вы хотите опубликовать и распечатать фильм на этом этапе, то область печати бу-

дет равна размерам рабочего поля фильма (рис. 29.7).

2. Над текущим слоем фильма добавьте еще два слоя. Для этого щелкните на кнопке In-

sert (Вставить слой), расположенной внизу списка слоев.

3. Присвойте среднему слою имя border (граница). Выберите инструмент Rectangle

(Прямоугольник) и в исходном слое нарисуйте прямоугольник, имеющий контур, но

не имеющий заливки (рис. 29.8).

4. Присвойте верхнему слою имя labels (метки). На панели инспектора свойств в каче-

стве метки кадра укажите (рис. 29.9).

ГЛАВА 29. ПЕЧАТЬ FLASH-ФИЛЬМА

Рис. 29.6. Процедуру назначения окошка печати начните с помещения содержимого в

кадры, подлежащие печати

of

Рис. Если размеры ограничительного окошка не указаны, то об-

ласть печати будет определяться размерами рабочего поля фильма

660 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ

Рис. 29.8. Контур внутри кадра можно назна-

чить в качестве ограничительного окошка об-

ласти печати

метка кадра

Для создания окошка, ограничивающего область печати,

для кадра задайте метку #Ь

5. Сохраните файл под именем la и протестируйте фильм. Для тестирова-

ния печати откройте SWF-файл в броузере и из контекстного меню Flash-плейера вы-

берите команду Print. Кадр должен быть масштабирован так, чтобы созданная граница

заполняла область печати (рис.

Чтобы создать составное ограничительное окошко, в котором для определения общей облас-

ти используются объекты всех распечатываемых слоев, выполните следующие действия.

ГЛАВА 29. ПЕЧАТЬ FLASH-ФИЛЬМА 661

Рис. 29. JO. Когда кадр назначен в качестве ограничительного окош-

ка, его содержимое масштабируется так, чтобы заполнить об-

ласть печати

1. Откройте файл . la. В слое border щелкните рядом с именем правой

кнопкой мыши (Windows) или щелкните мышью, удерживая нажатой клавишу <Ctrl>

(Macintosh). Из контекстного меню выберите пункт Delete Layer (Удалить слой). В

данном примере для назначения ограничительного окошка используется

2. Во всех оставшихся слоях выделите кадр 3 и вставьте пустые кадры нажав клавишу <F5>.

3. Щелкните в кадре 2 слоя, содержащего контур, а затем вьщелите кадры 2 и 3, щелкнув в

3, удерживая при этом клавишу <Shift>. Щелкните правой кнопкой мыши

(Windows) или щелкните мышью, удерживая нажатой клавишу <Ctrl> (Macintosh), и из

контекстного меню выберите пункт Covert to KeyFrames (Преобразовать в ключевые

кадры), как показано на рис.

4. В слое контура выберите кадр 2. Переместите контур по рабочему полю. Повторите эту

же в кадре 3, перемешая контур в разные участки рабочего поля (рис.

5. Сохраните файл под именем f la.

Чтобы завершить создание составного ограничительного окошка, необходимо создать

кнопку печати.

662 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

Create Motion

Insert Frame

Remove Frames

Keyframe

Insert Blank Keyframe

Convert to Keyframes

Convert to Keyframes

Cut Frames

Copy Frames

Frames

Clear

Select All Frames

I

• Properties

Рис. Выделите диапазон кадров, удерживая нажа-

той клавишу Откройте контекстное меню,

щелкнув правой кнопкой мыши или щелкнув

мышью, удерживая нажатой клавишу (Macintosh),

а затем выберите команду Convert to Keyframes

fi

Puc. Составное ограничительное окошко будет содержать объ-

екты, находящиеся в различных местах распечатываемых слоев

ГЛАВА 29. ПЕЧАТЬ FLASH-ФИЛЬМА 663

СОЗДАНИЕ кнопки PRINT

Создание кнопки печати с присоединенным действием печати позволяет в максимальной

степени управлять процедурой печати фильма. Действие Print позволяет распечатывать кад-

ры, располагающиеся в нескольких временных шкалах. Каждое действие Print применяется к

одной временной зависимости, однако можно использовать несколько кнопок печати. На пе-

чать будут выводиться и цветовые эффекты, а кроме того, имеется возможность распечаты-

вать кадры в виде векторных или растровых изображений.

Чтобы добавить действие Print к фильму и (в данном случае) завершить создание состав-

ного ограничительного окошка области выполните следующие действия.

1*. Откройте файл bounding2 . la.

2. Вставьте новый слой, щелкнув на кнопке Insert Layer, расположенной внизу перечня

слоев. Присвойте слою имя button (кнопка).

3. В данном слое выделите кадр 1 (если вы не хотите выводить на печать каждый кадр, то

кадр 1 должен быть ключевым) и создайте кнопку печати (рис.

10 К 25 35 40 50 60

Instance Of: print

as

Создайте кнопку печати, к которой можно будет присоединить действие Print

Подробная информация о кнопках представлена в главе 6 "Символы, экземп-

ляры и элементы библиотек".

664 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

1. Выделите экземпляр кнопки и запустите модуль Editor (Редактор

выполнив команду или нажав кла-

вишу <F9>. Из всплывающего меню ActionScript, расположенного в правом верхнем

углу панели Actions, выберите пункт Normal Mode (Обычный режим).

2. В левой части панели Actions щелкните на папках Actions и Printing (Печать), после чего дваж-

ды щелкните на элементе чтобы передать действие Print в окно редактора (рис.

3. Из всплывающего меню Print (расположенного в правой части панели Actions) выбери-

те пункт As Vectors (Как векторы). При выборе данной опции печать будет выполнена

с более высоким качеством, но при этом эффекты прозрачности и цветовые эффекты

выведены не будут. В качестве альтернативного варианта можно выбрать пункт As Bit-

map (Как растр), при котором данные эффекты будут выводиться на печать, но если

кадр разрешено масштабировать, то качество печати может оказаться более низким.

4. Из раскрывающегося меню Location (Местонахождение) выберите шкалу,

кадры которой необходимо распечатать. Выберите элемент Target (Целевой элемент) и

щелкните на расположенном рядом поле. Введите this и установите флажок в поле

опции Expression (Выражение). В качестве альтернативного варианта можно выбрать

пункт Level (Уровень), который используется для указания номера уровня основной

временной шкалы или загруженного клипа. Номер уровня нужного клипа вводится в

поле Location. Любое целевое местоположение, как Level, так и Target, можно тракто-

вать как выражение, установив флажок в поле опции Expression.

5. Из раскрывающегося меню Bounds (Границы) выберите пункт Мах. Завершенный

сценарий изображен на рис. Параметр границ (Movie (Фильм), Мах или Frame

определяет ограничительное окошко распечатываемых кадров. При выборе па-

раметра Movie в качестве области печати всех кадров будет использоваться ограничи-

тельное окошко объекта в кадре с меткой #Ь. При выборе параметра Мах для определе-

ния составного ограничительного окошка, охватывающего местоположения всех объ-

ектов, используются все объекты в распечатываемых кадрах. При выборе параметра

Frame создаются отдельные ограничительные окошки для объектов в каждом распеча-

тываемом кадре, и объекты в каждом кадре масштабируются так, чтобы заполнить об-

ласть печати в соответствии с параметром, выбранным из меню Dimensions (Размеры)

диалогового окна Publish Settings (Параметры публикации).

for

Actions

Gp Movie Control

Movie Control

® print

Functions

Щ Actions

Functions

(28

Lint 2:

Movie

,т

Рис. Для доступа к действиям печати в окне ActionScript Editor щелкни-

те на папках Actions и Printing

ГЛАВА 29. ПЕЧАТЬ FLASH-ФИЛЬМА 665

Location: Target 5

•

29. /5. Завершенное действие Print, предназначен-

ное для создания составного ограничительного окошка

1. Выделите кадр 3 в слое labels. Нажмите клавишу <F6>, чтобы вставить ключевой кадр.

Откройте окно ActionScript Editor, нажав на клавишу <F9>, и вставьте действие stop

2. Сохраните фильм под именем и протестируйте его. Откройте SWF-

файл в броузере и щелкните на кнопке Print. Обратите внимание на то, что каждая

страница распечатывается в пределах области, заданной на небольшом участке экрана,

а кнопки являются общими для всех кадров (рис.

Подробная информация о загрузке видеоклипов и уровней приведена в

ве 17 "Демонстрация мощи видеоклипов". О написании сценариев рассказы-

вается в главе 11 "Знакомство с ActionScript".

Preview of ing

print me

666 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

Preview

print me

29.16. Задание области печати в виде составного ограничи-

тельного окошка приводит к тому, что она охватывает местопо-

ложение содержимого каждого кадра

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Почему Flash игнорирует ограничительное окошко, установленное в пределах кадра с

меткой, а область печати страниц получается гораздо больше указанной?

Проверьте сценарий и убедитесь в том, что в пределах действия Print не вы-

бран параметр Мах или Frame. При выборе этих параметров ограничительное окошко, за-

данное в кадре с будет игнорироваться.

Несколько пользователей сообщили, что они не могут распечатать содержимое

моего узла. могу выяснить причину ошибки.

Пользователи, на компьютерах которых установлены версии Flash-плейера, предшест-

вующие 4.0.20 (Macintosh) и 4.0.25 (Windows), не смогут распечатать содержимое узла. Если

вы предполагаете, что у посетителей вашего узла могут быть установлены старые версии

плейеров, добавьте к своему фильму сценарий обнаружения плейера.

ГЛАВА 29. ПЕЧАТЬ FLASH-ФИЛЬМА 667

Процедура создания сценариев обнаружения описана в главе 12 "Управление

переменными, данными и типами данных".

FLASH ЗА РАБОТОЙ: НЕВИДИМЫЕ ЧЕРНИЛА

Действие Print позволяет даже распечатывать видеоклипы, параметр видимости которых

установлен в значение false. Это означает, что видеоклипы, существующие в пределах

фильма, во время воспроизведения видны не будут. Для их вывода на печать в действии Print

требуется указать целевое местоположение видеоклипа. Преимущество данного решения заключается

в возможности сохранения предыдущих элементов экрана при одновременном

обеспечении доступного для печати содержимого.

ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

ГЛАВА 30

ОПТИМИЗАЦИЯ, ПУБЛИКАЦИЯ

И ЭКСПОРТИРОВАНИЕ ФИЛЬМОВ

В ЭТОЙ ГЛАВЕ...

Тестирование фильмов 669

Оптимизация фильмов 671

Задание параметров публикации 673

Экспортирование различных форматов файлов 684

Возможные проблемы 686

Flash за работой: использование именованных анкеров 686

ТЕСТИРОВАНИЕ Фильмов

Завершив проектирование и разработку Rash-фильма, очень важно его протестировать и

в каком виде данный фильм увидят пользователи. Если этому не уделить долж-

ного внимания, то они могут и не получить доступа к содержимому. К счастью, Flash позво-

ляет легко смоделировать представление узла пользователям и обнаружить потенциальные

проблемные области.

ИСПОЛЬЗОВАНИЕ МОДУЛЯ BANDWIDTH PROFILER

Модуль Bandwidth Profiler полосы пропускания) позволяет протестировать

фильм, моделируя поток содержимого таким образом, как если бы он поступал через Internet.

Эта функция позволяет выявить проблемные области фильма и выяснить, какое содержимое

необходимо оптимизировать. Целью выполнения данной операции является достижение

максимально возможного качества при минимально возможном размере файла.

Show

Frame By Frame

• • -

Для доступа к модулю Bandwidth Profiler выполните следую-

щие действия.

1. Протестируйте фильм, выполнив команду Movie

фильм) или нажав комбинацию

<Cmd+Retum> (Macintosh) либо (Windows). При

этом будет создан SWF-файл, который откроется в новом окне.

2. Выполните Profiler (рис. 30.1).

Окно модуля Bandwidth Profiler откроется над SWF-файлом,

как показано на рис. 30.2. В его левой части указаны данные о

фильме, такие как его размеры, частота смены кадров, длитель-

ность выполнения предварительной загрузки первого кадра; здесь

же указывается и скорость модема. В правой части окна Bandwidth

Profiler указывается диаграмма, на которой каждый кадр фильма

представлен в виде отдельного столбца. Высота столбца соответст-

вует размеру файла каждого кадра. Горизонтальная красная линия,

проведенная на уровне 400 В (см. рис. 30.2), представляет отметку, в которой при заданной ско-

рости модема поток содержимого будет выполняться в режиме реального времени. Любой кадр,

столбец которого находится над этой линией, не будет воспроизводиться до тех пор, пока его со-

держимое не загрузится.

Рис. Протестируйте

фильм и команду

Bandwidth Profiler,

чтобы смоделировать поток

Flash-фильма

,

.

13 KB

'• '

1

9 E)

Loaded: (15 [

10* •

!

•

30.2. Модуль Bandwidth Profiler моделирует поток содержимого при разных скоростях модема

670 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

Setting 4 (2.3

5 KB/s)

Setting

Для изменения скорости модема, указанной в левой части окна Bandwidth Profiler, из ме-

ню (Отладка) выберите нужную скорость (рис. 30.3). На сегодняшний день минималь-

ная скорость соединения в большинстве случаев составляет 56 К.

Кроме того, имеется возможность предварительно просмотреть

воспроизведение фильма, причем его содержимое будет появляться

по мере загрузки. Для отображения потока содержимого выполни-

те команду Streaming содержимое).

Фильм будет воспроизводиться так, как если бы он загружался с

помощью модема, скорость которого выбрана посредством меню

Debug. В левой части окна Bandwidth Profiler указывается

загруженной части фильма, а над диаграммой появляется зеленая

полоса, на процесс загрузки.

Обратите внимание на кадры, в которых поток достигает пиковой

величины. Эти кадры окне Bandwidth Profiler изображены в виде

самых высоких столбцов. Содержимое этих кадров необходимо пе-

репроверить и выяснить, можно ли оптимизировать их с целью

уменьшения требующегося потока. После щелчка на столбце диа-

граммы под окном Bandwidth Profiler будет отображено содержимое данного кадра. Если диаграм-

ма имеет много пиков, особенно в начале фильма, необходимо выполнить предварительную за-

грузку и указать пользователям на то, что выполняется загрузка содержимого.

ИСПОЛЬЗОВАНИЕ ОТЧЕТА о РАЗМЕРАХ для ОПТИМИЗАЦИИ ФАЙЛОВ

Еще одним способом оценки размера элементов фильма является создание отчета о раз-

мерах. Он представляет собой текстовый файл, который можно создать при публикации

фильма. При этом фильм можно разбить на отдельные сцены, символы и встро-

енные шрифты (рис. 30.4).

Чтобы создать отчет о размерах, установите флажок в поле опции Generate Size Report

(Создать отчет о размерах) диалогового окна Publish Settings (Параметры публикации). В

этом случае при публикации фильма будет создан текстовый файл, который сохраняется в

том же самом каталоге, что и файлы и Текстовый файл имеет такое же имя, как и

SWF-файл (рис, 30.5).

Рис. 30.3. Для выбора ско-

рости модема воспользуй-

тесь меню Debug

Подробная информация об диалогового окна Publish Settings

будет представлена ниже, в подразделе "Задание параметров публикации".

ОПТИМИЗАЦИЯ Фильмов

После выявления "громоздких" элементов фильма вернитесь к соответствующим файлам

и попытайтесь их оптимизировать. На размер файла, в первую очередь, влияют такие

элементы, как растровые изображения, звуки и видео.

Для оптимизации растровых изображений проверьте, чтобы они были импортированы с

используемыми в конкретном фильме размерами. Даже если во Flash растровое изображение

промасштабировать до меньшего размера, то размер файла все равно останется таким же, как

и при импортировании. При необходимости изображение можно обрезать в соответствую-

щем внешнем редакторе и заменить рисунок в фильме.

Использующиеся при работе с растровыми изображениями технологии анимации приво-

дят к существенному увеличению размера файла. Постарайтесь минимизировать использова-

ние больших растровых изображений, особенно в анимации, и ограничьте использование

эффектов прозрачности. При выполнении трассировки растрового изображения обязательно

выполните команду

чтобы упростить трассировку и уменьшить размер файла.

ГЛАВА 30. ОПТИМИЗАЦИЯ, ПУБЛИКАЦИЯ и ЭКСПОРТИРОВАНИЕ Фильмов 671

в О .

Movie

i

1

3226

2

2

2

Z

г

г

г

гг

14 2г

Scone 1

Frame Total Bytes

1

3

4

5

в

7

8

9

13470

13472 11

13474 12

13

13478 14

13480 15

1447

Symbol Bytes

771 0

0 0

0

nextBtn

nextBtn

back

Anal Bold

Arlal

0

0 96

0 0

24S 0

0

247 0

0 0

0 0

Format

2133

4879

Puc. 30.4. В отчете о размерах указываются размеры файлов

элементов фильма

Отчет о размерах, сохраненный как

еев

© етвд

•

•

Я

9

-

Я

html

.

6:06 AM

Today.

AM

AM

AM

PH

3:S6 AM

3:56 AM

1:5 AM

9/29/01. 0.07PM

12PM

10/1/01, AM

Л

1

124*

100

4

344

24

Файл с отчетом о размерах генерирует-

ся в процессе публикации фильма и сохраняется в

том же каталоге, что и SWF-файл

672 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

Подробно об импортировании и оптимизации растровых изображений расска-

зывается в главе 4 "Использование растровых изображений во Flash".

Использование символов способствует уменьшению размера файла, поэтому проверьте, чтобы

каждый повторно используемый элемент фильма был преобразован в символ. При выполнении

анимации разнесите статические и анимированные элементы в отдельные слои. В ключевых кад-

рах ограничьте выполняемые операции как можно меньшим участком рабочего поля. И по воз-

можности максимально используйте анимацию с построением промежуточных отображений, по-

скольку при применении этой методики размер файла получается меньшим по сравнению с по-

кадровой анимацией, представляющей собой последовательный ряд кадров.

Работая с векторной графикой, постарайтесь не использовать штрихи, имеющие вид

пунктирных линий, и штрихи, имеющие же цвет, что и заливка. Градиентная и растровая

заливка также увеличивают размер файла, поэтому применяйте их осторожно.

Ограничьте число используемых шрифтов и стилей. Каждый внедренный символ и шрифт

вносят свой вклад в увеличение размера фильма. Поэтому внедряйте только те символы, ко-

торые действительно необходимы.

Для оптимизации звуков отредактируйте их до нужной длины до выполнения импортиро-

вания. Максимизируйте повторное использование звука, если это возможно. Постарайтесь

применять МРЗ-сжатие, поскольку оно позволяет достичь наименьшего размера файла.

Подробная информация об оптимизации анимации приведена в главе 7

"Анимация во Flash". Приемы оптимизации текста описаны в главе 5 "Работа с

текстом", а процедура оптимизации звука — в главе 8 "Использование звука".

После составления и оптимизации фильма его следует опубликовать. Процедура публи-

кации позволяет создать несколько форматов фильма, помимо и HTML-файлов с ко-

необходимым для отображения фильма через Internet.

Для доступа к параметрам публикации выполните команду Settings

публикации), как показано на рис. 30.6.

ИД

New From Template...

.

Open

Open as

Close

Hi '

Save As...

Save As

Revert

Import...

Import to Library...

Export Movie...

Export

Publish Preview

Publish

Page Setup...

Print Margins...

Print...

30.6. Для доступа к диалоговому окну Publish

Settings выполните команду Settings

ГЛАВА 30. ОПТИМИЗАЦИЯ, ПУБЛИКАЦИЯ и ЭКСПОРТИРОВАНИЕ Фильмов 673

Диалоговое окно Publish Settings имеет три вкладки: Formats (Форматы), Flash и HTML.

На рис. 30.7 видно, что во вкладке Formats можно указать дополнительные форматы файла,

помимо создаваемых по умолчанию и HTML.

Для выбора альтернативного формата установите флажок в поле соответствующей опции.

Во вкладке Formats можно выбрать следующие форматы: Flash, HTML, JPEG, PNG,

Windows Projector, Macintosh Projector и Quick Time. В процессе публикации будут созданы

файлы указанных форматов с теми же именами, что и файл и с соответствующими рас-

ширениями. Если вы хотите присвоить файлам другие имена, снимите флажок с поля опции

Use Default Names (Использовать имена по умолчанию) и в соответствующие поля введите

новые имена. При выборе форматов (за исключением проекторов) в диалоговом окне Publish

Settings появится новая вкладка для данного формата. Открыв эту вкладку, можно задать те

или иные параметры для выбранного формата.

ФОРМАТ FLASH

При выборе формата Flash (он выбирается по умолчанию) выполняется экспортирование

SWF-файла. Если вы хотите увидеть SWF-файл в Web, то в броузере должен быть установлен

Flash-плейер. Во вкладке Flash (рис. 30.8) можно выбрать версию плейера. Можно выбрать

одну из предыдущих версий, но тогда некоторые функциональные возможности будут утеря-

ны. Если содержимое фильма не поддерживается предыдущими версиями плейеров, на экра-

не появится сообщение.

Опция Load Order (Порядок загрузки) определяет порядок, в котором загружаются слои

каждого кадра: либо сверху вниз (Top Down), либо снизу вверх (Bottom Up). Эта функция

может оказаться важной при просмотре больших файлов посредством медленных модемов.

Поэтому вам стоит оценить структуру слоев и определить, какой порядок загрузки лучше

всего подходит для того или иного фильма.

При выборе опции Generate Size Report (Создать отчет о размерах) создается отчет с указани-

ем размеров файлов отдельных элементов фильма. Опция Protect from Import (Защитить от импор-

0 GIF Image

PNG

В Windows Projector

В Macintosh

0 QuickTime . : :

..

Use names

При публикации можно выбрать альтернативные форматы Flash-фильма

674 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

запрещает пользователям загружать фильм и импортировать его во Flash в виде доступ-

ного для редактирования файла Опция Omit Trace Actions (Опустить действия трассировки)

при публикации фильма удаляет любые действия трассировки из кода Действия трас-

сировки указываются в окне вывода данных и используются для отладки.

Опция Debugging Permitted (Отладка разрешена) позволяет выполнять удаленную отлад-

ку Flash-фильмов. Чтобы защитить фильм в случае разрешения отладки, вы можете (и долж-

ны) потребовать от пользователя ввести пароль для доступа к операции отладки. Для того

чтобы создать и затребовать пароль, введите его в поле Password (Пароль).

Если из раскрывающегося меню Version (Версия) выбран пункт Flash Player б, то для сжатия

фильма можно установить флажок в поле опции Compress Movie (Сжать фильм). Если версия Flash

Player 6 выбрана изначально, то флажок в поле опции Compress Movie установлен по умолчанию.

Процедура сжатия файла формата Flash 6 очень важна и может существенно уменьшить размер файла,

особенно тех случаях, когда в нем содержится большое количество текста и кодов сценария.

Ползунок JPEG Quality (Качество JPEG) определяет степень сжатия растровых изобра-

жений. Чем выше данная настройка, тем выше качество, но при этом размер файла также бу-

дет большим. Поэкспериментируйте с данным ползунком и найдите оптимальное соотноше-

ние качества и размера файла.

Подробная информация о сжатии растровых изображений приведена в главе 4

"Использование растровых изображений во Flash".

Для задания глобального сжатия потоковых или событийных звуков щелкните на кнопке

Set (Задать), расположенной справа от опции Audio Stream (Аудиопоток) или Audio Event

и укажите тип сжатия, скорость передачи битов и качество. Чтобы выбран-

ные настройки превалировали над любыми отдельными настройками, указанными для зву-

ковых элементов на панели инспектора свойств, установите флажок в поле опции Override

Sound Settings (Подменить настройки звука).

Подробно о сжатии звука рассказывается в главе 8 "Использование звука".

Player 5

Load Bottom up

В

:: . . Import.

. Trace

Permitted

Audio kbps, Mono

•",' sound

30.8. При публикации в формате Flash создается SWF-файл

ГЛАВА 30. ОПТИМИЗАЦИЯ, ПУБЛИКАЦИЯ и ЭКСПОРТИРОВАНИЕ Фильмов 675

ФОРМАТ

Чтобы Flash-фильмы можно было отобразить в броузере, их необходимо внедрить в

HTML-документы. Опции вкладки HTML (рис. 30.9) позволяют указать, каким образом SWF-

файл должен быть отображен в броузере.

Flash создает HTML-документ на основе шаблона, который можно выбрать из раскрывающегося

меню Template (Шаблон), изображенного на рис. Шаблоны включают в себя функции обнару-

жения различных версий Flash, устройств и именованных анкеров, переходить от од-

ного кадра фильма к другому посредством кнопок Forward (Вперед) и Back (Назад) броузера.

Из раскрывающегося меню Dimensions (Размеры) можно выбрать величины, в которых

будут указаны атрибуты дескрипторов ширины и высоты, размещенные в HTML-документе.

При выборе опции Match Movie (Соответствует фильму) размеры будут совпадать с размера-

ми фильма, и в поля Width (Ширина) и Height (Высота) нельзя будет вводить значения вруч-

ную. Выбрав опцию Percentage (Процент) или Pixels вы сможете вводить значе-

ния в поля Width и Height, модифицируя тем самым размеры фильма.

Опции группы Playback (Воспроизведение) позволяют управлять функциями фильма и

способом его воспроизведения. По умолчанию воспроизведение фильма начинается сразу же

после его загрузки. При выборе опции Paused at Start (Приостановка в начале) фильм не

начнет воспроизводиться до тех пор, пока пользователь не щелкнет на кнопке в пределах

фильма или не выберет пункт Play из контекстного меню плейера. По умолчанию флажок в

поле данной опции не установлен.

При выборе опции Loop (Цикл) по завершении воспроизведения фильма воспроизводя-

щая головка вернется к кадру 1, и фильм будет повторяться. По умолчанию функция цикли-

ческого воспроизведения включена. При выборе опции Device Font (Системный шрифт) в

блоках статического текста, шрифт которых помечен как системный, выполняется замена

шрифтов, не поддерживаемых системой.

Элементы раскрывающегося меню Quality (Качество) определяют приоритет воспроизведе-

Publish Settings

!

Template: Flash Only

Playback: Paused At

7

Window Mode: Window

HTML Alignment:

\ ... . •

Device Font. : 7

т .

77,

Exact fit

. Horizontal . .

Flash Alignment: f

Vertical

[Center ' -' 7

Show Warning Messages

публикации фильма посредством опций вкладки HTML генериру-

ется HTML-файл, указывающий, каким образом фильм должен отображать-

ся в броузере

676 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

или качества отображения. Обычно используется заданный по умолчанию параметр High

(Высокое). При выборе параметра Low (Низкое) преимущество отдается воспроизведению в

ущерб качеству, и этом отключается функция сглаживания. Параметр Auto Low аналогичен

Low, но при его выборе производится попытка улучшить качество изображения. К примеру,

может быть включена функция сглаживания, если Flash определит, что процессор пользователя

сможет обработать ее. При выборе опции Medium (Среднее) функция сглаживания применяет-

ся, однако она не затрагивает растровых изображений. При выборе опции Best (Наилучшее)

приоритет отдается качеству отображения без оглядки на воспроизведение. При этом устраня-

ются контурные неровности всего текста и сглаживаются растровые изображения.

Пользователи броузера Internet Explorer 4.0 для Windows с

элементами управления Rash ActiveX могут выбрать из раскры-

вающегося меню Window Mode (Режим окна) параметры про-'

зрачности, размещения и разбиения на слои. При выборе опции

Window (Окно) Flash-фильм будет отображен в своем собствен-

ном окне для реализации самой быстрой анимации. При выборе

опции Windowless (Непрозрачный без окна) фильм не

отображается в окне, а любые элементы HTML-страницы, ко-

торые могли быть размещены сзади окна Flash, перемещаются

таким образом, чтобы они не были видны через

участки Flash-фильма. При выборе параметра Transparent Win-

Detect for Flash

Detect for Flash 5

Detect for Flash

Only

Flash Only For Pocket PC 2002

flash

Flash

Flash FSCommand

Flash with Named

image ••.•••

dowless (Прозрачный без окна) любые фоновые HTML-Рис. Flash создает

элементы будут видны через прозрачные участки Flash-фильма, HTML-документ на основе

что может существенно замедлить анимацию. одного из шаблонов

Элементы раскрывающегося меню HTML Alignment

(Выравнивание HTML) определяют выравнивание фильма относительно окна броузера. По умол-

чанию фильм располагается по центру окна броузера, а если окно броузера меньше фильма, то

фильм обрезается. При выборе опций Left (По левому краю), Right (По правому краю), Тор (По

верху) и Bottom (По низу) фильм выравнивается относительно выбранного края окна броузера.

Элементы раскрывающегося меню Scale (Масштабирование) позволяют разместить фильм

в пределах выбранной области окна броузера. По умолчанию фильм располагается в пределах

назначенной области HTML-документа. При этом его пропорции сохраняются без искажения.

При выборе элемента No Border (Без границы) фильм заполняет всю назначенную область. При

необходимости он может быть масштабирован или обрезан, но его исходные пропорции сохра-

нятся. При выборе элемента Exact Fit (Точное заполнение) фильм заполняет всю назначенную

область без учета исходных пропорций. Параметр No Scale (Без масштабирования) запрещает

масштабирование фильма при изменении размеров окна броузера.

Элементы раскрывающегося меню Flash Alignment (Выравнивание Flash) определяют

выравнивание фильма относительно его окна. При выборе одного из элементов группы Hori-

zontal (По горизонтали) фильм можно выровнять по левому краю, по правому краю и по цен-

тру, а при выборе элементов группы Vertical (По вертикали) фильм можно выровнять по вер-

ху, по низу и по центру окна.

Если в поле опции Show Warning Messages (Показывать предупреждающие сообщения)

установлен флажок, на экран будут выводиться предупреждающие сообщения в случае кон-

фликта HTML-дескрипторов. Данная функция включена по умолчанию.

ФОРМАТ GIF

Помимо стандартных форматов Flash и HTML, фильмы можно сохранять в виде статич-

ных или GIF-файлов. Опции вкладки GIF изображены на рис.

Чтобы указать размеры GIF-файла, введите их в поле Height или Width либо установите

флажок в поле Match Movie, в результате чего размеры GIF-файла будут совпадать с

размерами фильма.

ГЛАВА 30. ОПТИМИЗАЦИЯ, ПУБЛИКАЦИЯ и ЭКСПОРТИРОВАНИЕ Фильмов 677

•

Dimensions: | Match Movie

©Static

Solids

. .''

Transparent: Opaque

Dither: I

Palette

3

Flash-фильмы можно сохранить в виде статичных или

GIF-файлов

Установите переключатель Playback (Воспроизведение) в поле опции Static (Статическое)

или Animated При выборе опции Static сохранит первый кадр филь-

ма в виде GIF-файла. Чтобы указать, что в виде статического GIF-файла следует экспортиро-

вать другой кадр, в файле присвойте этому кадру метку

При выборе воспроизведения становятся активными дополнительные опции,

позволяющие воспроизводить фильм непрерывно или определенное число раз. По умолчанию

Flash экспортирует каждый кадр фильма в виде анимированного GIF-файла. Чтобы указать на-

чальный и конечный кадры, которые следует экспортировать в виде GIF-файлов,

в файле присвойте этим кадрам метки #First (Первый) и (Последний).

Сжатие GIF-изображений осуществляется путем ограничения используемой палитры

цветов. Существует несколько опций отображения GIF-файлов.

• Optimize Colors (Оптимизировать цвета). Из таблицы цветов GIF-файла удаляются

любые неиспользуемые цвета. Эта опция выбрана по умолчанию.

• Interlace (Чередование). GIF-файл отображается в броузере пошагово, по мере загруз-

ки. Не устанавливайте флажок в поле данной опции при работе с анимированными

GIF-файлами.

• Smooth (Сглаживание). К изображению применяется функция устранения контурных

неровностей. Эта функция может улучшить внешний вид изображения, но при поме-

щении изображения на цветной фон вокруг него может образоваться серый ореол.

Кроме того, процедура сглаживания приводит к увеличению размера файла. Данная

опция выбрана по умолчанию.

• Dither Solids сплошные цвета). Моделируются не входящие в

цветовую таблицу GIF. Эта процедура выполняется посредством рассеяния имеющих-

ся цветов.

• Remove Gradients (Удалить плавные цветовые переходы). Выполняется преобразова-

ние градиентных цветов в первый сплошной цвет градиентной заливки. Эта операция

выполняется с целью уменьшения размера файла. Кроме градиентная заливка в

678 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

GIF-файлах может отображаться некачественно. При выборе данной опции внима-

тельно отнеситесь к выбору первого градиентного цвета.

Работая с GIF-файлами, можно задать параметры прозрачности.

• Из раскрывающегося меню Transparent (Прозрачность) выберите пункт Opaque

если хотите, чтобы фон фильма был отображен в виде сплошного

цвета.

• Чтобы фон был прозрачным, выберите опцию Transparent.

• Чтобы задать частичную прозрачность, выберите пункт Alpha (Коэффициент прозрач-

ности) и в соседнем поле введите числовое значение 0 до 255, определяющее сте-

пень прозрачности. Чем меньше значение, тем прозрачнее изображение. Значение 128

соответствует 50% прозрачности.

Элементы раскрывающегося меню Dither (Растрирование) определяют, каким образом

представлены цвета, не входящие в цветовую таблицу.

• При выборе опции None (Нет) предотвращается растрирование, а для цветов, не вхо-

дящих в цветовую палитру, отображаются ближайшие подходящие цвета. При этом

цвета могут существенно искажаться, но размер файла при этом уменьшается.

• При выборе опции Ordered (Упорядоченное) выполняется определенное растрирова-

ние, но оно ограничивается с целью сохранения размера файла.

• При выборе опции (Диффузия) достигаются наилучшие результаты за счет того,

что выполняется свободное растрирование цветов для наилучшего воспроизведения

пропущенных оттенков. Функция диффузии приводит к увеличению размера файла и

времени обработки. Она работает только с Web-палитрой, состоящей из цветов.

Элементы раскрывающегося меню Palette Type (Тип палитры) определяют цветовую па-

литру экспортируемого GIF-файла.

• При выборе опции Web 216 для создания GIF-файла используется палитра безопасных

Web-цветов и выполняется самая быстрая обработка изображения со стороны сервера.

• При выборе опции Adaptive (Адаптивная) выполняется анализ цветов изображения и

создается пользовательская палитра. При выборе данной опции создаются самые точ-

ные цвета, но при этом размер файла будет самым большим.

• Опция Web Snap Adaptive (Адаптивная к диапазону Web) аналогична предыдущей, за

исключением того, что в данном случае к любым близким к данному диапазону цветам

применяется палитра безопасных Web-цветов.

• Опция Custom (Пользовательская) позволяет создать собственную палитру. В связи с

тем, что цвета данной палитры являются предварительно заданными, то созданные с

ее помощью GIF-изображения загружаются так же быстро, как и изображения, соз-

данные с помощью палитры Web Однако для достижения максимального эффек-

та от использования данной опции необходимо обладать определенным опытом и на-

выками создания цветовой палитры.

И наконец, при выборе опции Adaptive или Web Snap Adaptive можно указать число ис-

пользуемых цветов, введя значение в поле Max Colors (Максимальное число цветов). Указа-

ние числа цветов может способствовать уменьшению размера файла, но если число будет

слишком малым, то цвета изображения могут оказаться неточными.

ФОРМАТ JPEG

Flash-фильмы можно также сохранять в формате JPEG, в виде 24-битовых растровых изо-

бражений. Данный формат лучше всего подходит для изображений с плавно переходящими

тонами, таких как фотографии или градиенты. Опции вкладки JPEG показаны на рис.

ГЛАВА 30. ОПТИМИЗАЦИЯ, ПУБЛИКАЦИЯ и ЭКСПОРТИРОВАНИЕ Фильмов 679

Publish

О

Flash-фильм можно сохранить в виде статичного

Как и в случае с форматом GIF, в виде файла JPEG экспортируется первый кадр фильма,

за исключением случаев, когда какому-то другому кадру назначена метка #Static. Размеры

изображения можно задать совпадающими с размерами фильма либо модифицировать их,

введя новые значения в поля Width и Height.

Качество JPEG-файла задается в диапазоне от 0 до 100, при этом по умолчанию выбрано

значение 80. Для задания качества перетащите ползунок Quality либо введите значение в на-

ходящееся рядом поле. Качество отдельных растровых изображений можно задать в диалого-

вом окне Bitmap Properties (Свойства растра). Глобальная настройка, выполненная в диало-

говом окне Publish Settings, применяется только в том случае, если свойства отдельных рас-

тровых изображений заданы так, чтобы использовать сжатие, заданное по умолчанию.

Если в поле опции Progressive (Последовательно) установить флажок, JPEG-

изображения будут отображаться пошагово, по мере их загрузки.

PNG

Формат PNG, или Portable Network Graphic (Портативная сетевая графика), является

"родным" для файлов, созданных в приложении Macromedia Fireworks, и единственным фор-

матом растровых изображений, поддерживающим прозрачность. Опции вкладки ана-

логичные GIF, показаны на рис. 30.13.

Чтобы указать размеры PNG-файла, введите их в поле Height или Width либо установите

флажок в поле опции Match Movie, в результате чего размеры PNG-файла будут совпадать с

размерами фильма.

Сжатие PNG-изображений производится путем ограничения данных о цветах, отобра-

жаемых в изображениях. Для указания количества данных о цвете, приходящегося на каждый

пиксель, выберите нужный элемент из раскрывающегося меню Bit Depth (Битовая глубина):

• 8-bit (8-битовая) — для отображения 256 цветов;

• 24-bit (24-битовая) — для отображения тысяч цветов;

• 24-bit with Alpha (24-битовая с коэффициентом прозрачности) — для отображения ты-

сяч цветов и степени их прозрачности.

680 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

Publish Settings

Width

Dimensions: X g Match Movie

Bit Depth: with Alpha

Optimize Solids

Interlace

Type: Web 216

Max Colors:

Filter None

Flash-фильмы можно сохранять в формате PNG

Чем больше включено данных о цвете, тем больше будет размер файла.

Существует несколько опций отображения PNG-файлов.

• При выборе опции Optimize Colors (Оптимизировать цвета) из таблицы цветов PNG-

удаляются любые неиспользуемые цвета. Эта функция не действует при выборе

адаптивной палитры.

• При выборе опции Interlace (Чередование) отображается в броузере по-

шагово, по мере загрузки.

• При выборе опции Smooth (Сглаживание) к изображению применяется функция уст-

ранения контурных неровностей. Как и в случае с GIF-файлами, при помещении изо-

бражения на цветной фон вокруг него может образоваться серый ореол. Кроме того,

процедура сглаживания приводит к увеличению размера файла.

• Опция Dither Solids сплошные цвета) моделирует цвета, не входящие в

цветовую таблицу PNG. Эта процедура выполняется посредством рассеивания имею-

щихся цветов.

• При выборе опции Remove Gradients (Удалить плавные цветовые переходы) выпол-

няется преобразование градиентных цветов в первый сплошной цвет градиентной за-

ливки. Эта операция выполняется с целью уменьшения размера файла. Кроме того,

градиентная заливка в PNG-файлах может отображаться некачественно. При выборе

данной опции внимательно отнеситесь к выбору первого градиентного цвета.

При выборе 8-битовой глубины активизируется раскрывающееся меню Dither

(Растрирование), определяющее, каким образом представляются цвета, не входящие в цвето-

вую таблицу.

• Опция None (Нет) предотвращает растрирование, а для цветов, не входящих в цвето-

вую палитру, отображает ближайшие подходящие цвета. При этом цвета могут сущест-

венно искажаться, но размер файла при этом уменьшается.

• При выборе опции Ordered (Упорядоченное) выполняется определенное растрирование,

но рассеяние цветов ограничивается с целью сохранения небольшого размера файла.

ГЛАВА 30. ОПТИМИЗАЦИЯ, ПУБЛИКАЦИЯ и ЭКСПОРТИРОВАНИЕ Фильмов 681

• При выборе опции Diffusion (Диффузия) наилучшие результаты достигаются за счет того,

что выполняется свободное растрирование цветов для наилучшего воспроизведения

пропущенных оттенков. Функция диффузии приводит к увеличению размера файла и

времени обработки. Она работает только с Web-палитрой, состоящей из цветов.

Элементы раскрывающегося меню Palette Type (Тип палитры) определяют цветовую па-

литру экспортируемого PNG-файла.

• При выборе опции Web для создания PNG-файла используется палитра безопасных

Web-цветов и выполняется самая быстрая обработка изображения со стороны сервера.

• При выборе опции Adaptive (Адаптивная) выполняется анализ цветов изображения и

создается пользовательская палитра. Эта самая лучшая опция для отображения мил-

лионов цветов при выборе 24-битовой глубины. При выборе данной опции создаются

самые точные цвета, но при этом размер файла будет самым большим.

• Опция Web Snap Adaptive (Адаптивная к диапазону Web) аналогична предыдущей, за

исключением того, что в данном случае к любым цветам, близким к данному диапазо-

ну, применяется палитра безопасных Web-цветов. Данная опция хорошо подходит для

отображения оттенков в 256-цветовой системе при выборе 8-битовой глубины.

• Опция Custom (Пользовательская) позволяет создать собственную палитру. Однако, для

ее эффективного использования необходимо обладать определенным опытом и навыка-

ми создания цветовой палитры. Для указания файла, содержащего пользовательскую па-

литру, щелкните на кнопке, расположенной справа от поля Palette (Палитра).

При выборе опции Adaptive или Web Snap Adaptive можно указать число используемых

цветов, введя соответствующее значение в поле Max Colors (Максимальное число цветов).

Указание числа цветов может способствовать уменьшению размера файла, но если число бу-

дет слишком малым, то цвета изображения могут оказаться неточными.

Элементы раскрывающегося меню Filter Options (Параметры фильтрации) позволяют

указать метод фильтрации, применяющийся для лучшего сжатия экспортируемого PNG-

файла. При фильтрации выполняется построчный анализ данных о цветах.

• При выборе опции None (Нет) функция фильтрации отключена.

• При выборе опции Sub (Под) передается разница между байтами плюс значение соот-

ветствующего байта предыдущего пикселя.

• При выборе опции Up (Над) передается разница между байтами плюс значение соот-

ветствующего байта для пикселя, находящегося непосредственно над данным.

• При выборе опции Average (Средняя), для того, чтобы предсказать значение данного

пикселя, сравниваются соседние пиксели.

• При выборе опции Path (Путь), для того, чтобы предсказать значение данного пиксе-

ля, выполняется расчет функции соседних пикселей.

• При выборе опции Adaptive (Адаптивная) выполняется анализ цветов изображения и

создается пользовательская палитра. Данная опция лучше всего подходит для 24-

битовой глубины, использующейся для отображения тысяч цветов.

Поэкспериментируйте с различными параметрами фильтрации и найдите наиболее эф-

фективное сжатие, подходящее для того или иного изображения.

ФОРМАТ

Flash-фильмы можно сохранять в формате QuickTime 4. При этом сохраняется интерак-

тивность фильма, а в модуле QuickTime воспроизводятся точно так же, как и во

Flash-плейере. Flash-фильмы копируются на отдельную дорожку QuickTime и могут быть

разнесены в слои вместе с другим содержимым QuickTime. Опции вкладки QuickTime пред-

ставлены на рис.

682 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

?

Sound: Use compression Г

None

: '

• Paused start

Play every frame . ..

File:

Puc. 30.14. Flash-фильмы можно сохранять в формате 4

Как и при работе с форматами GIF и JPEG, необходимо указать размеры файла. Устано-

вите флажок в поле опции Match Movie или введите нужные значения в поля Width и Height.

Элементы раскрывающегося меню Alpha регулируют прозрачность Rash-дорожки в пре-

делах QuickTime и не влияют на степень прозрачности Flash-фильма.

• При выборе опции (Степень прозрачности) Flash-дорожка стано-

вится прозрачной, открывая содержимое других дорожек, расположенных позади нее.

• Параметр Сору (Копировать) делает Flash-дорожку непрозрачной, закрывая содержи-

мое других дорожек, расположенных позади нее.

• При выборе параметра Auto (Авто) прозрачность Flash-дорожки устанавливается в за-

висимости от ее места в порядке наложения. Если она находится поверх других доро-

жек, то она будет прозрачной. Если Flash-дорожка находится внизу стека или является

единственной дорожкой, то она будет непрозрачной.

Элементы раскрывающегося меню Layer (Слой) определяют размещения Flash-дорожки в

порядке наложения. При выборе опции Тор (Вверху) Flash-дорожка размещается поверх ос-

тальных дорожек. При выборе опции Bottom (Внизу) Flash-дорожка будет располагаться под

остальными дорожками. При выборе опции Auto Flash-дорожка будет располагаться в зави-

симости от размещения Flash-объектов относительно видеоэлементов в пределах Flash-

фильма. Если Flash-объекты располагаются поверх видеоэлементов, то и Flash-дорожка будет

располагаться вверху. Если Flash-объекты располагаются позади видеоэлементов, то Flash-

дорожка также будет располагаться внизу.

При установлении флажка в поле опции Streaming Sound (Потоковый звук) все потоко-

вые звуки экспортируются из Flash-фильма в звуковую дорожку QuickTime с одновременным

сжатием в соответствии с параметрами QuickTime. Чтобы отрегулировать заданные по умол-

чанию параметры аудиосжатия QuickTime, щелкните на кнопке Settings (Настройки).

Элементы раскрывающегося меню Controller (Контроллер) определяют, каким образом

пользователь сможет управлять фильмом QuickTime. Из данного меню можно выбрать эле-

менты None (Нет), Standard (Стандартный) и QuickTime VR (Видеомагнитофон QuickTime).

ГЛАВА 30. ОПТИМИЗАЦИЯ, ПУБЛИКАЦИЯ и ЭКСПОРТИРОВАНИЕ Фильмов 683

Опции группы Playback определяют воспроизведение фильма. При выборе опции Loop

(Цикл) фильм воспроизводится непрерывно. При выборе опции Paused at Start

(Приостановка в начале) фильм не будет воспроизводиться до тех пор, пока пользователь не

щелкнет на соответствующей кнопке. При установлении флажка Play Every Frame

(Воспроизводить каждый кадр) во время воспроизведения не будет пропущен ни один кадр, а

звук при этом отключается.

Опция File (Файл), в поле которой по умолчанию установлен флажок, объединяет содержи-

мое Flash и импортируемое видео в один фильм QuickTime. В результате этого экспортируемый

фильм QuickTime является самодостаточным и не зависит от связи с внешними файлами.

ЭКСПОРТИРОВАНИЕ РАЗЛИЧНЫХ ФОРМАТОВ ФАЙЛОВ

Команда Export (Экспортировать) позволяет создать во Flash содержимое, которое можно

редактировать в других приложениях. Для экспортирования содержимого выполните коман-

ду Movie фильм) или Image

изображение), как показано на рис.

Insert

New

New From

Open Recent

Open as

Close

Save г

Save

Save As Template...

sew

О

Export Image...

Publish

Publish Preview

Page

Print Margins...

Рис. Содержимое Flash можно экспорти-

ровать в виде фильмов или изображений

В диалоговом окне Export (рис. укажите имя файла, а затем выберите формат файла

и место, в котором его следует сохранить.

Фильмы экспортируются в виде последовательностей, а изображения — в виде отдельных

файлов. Flash-файлы можно экспортировать в следующих форматах.

• Adobe Illustrator ai) идеально подходит для перемещения доступной для редактиро-

вания векторной графики между приложениями для рисования. Формат Illustrator со-

храняет точные кривые Безье, линии и заливку. Поддерживаются функции импорти-

рования и экспортирования форматов Illustrator 5.0, 6.0 и 8.0.

• Формат GIF включает в себя GIF-файлы и последовательно-

сти GIF. Форматы GIF поддерживают изображения и и лучше

всего подходят для векторной графики и непродолжительной анимации.

684 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

Export

As:

FutureSplash

QuickTime

QuickTime

3.6

Illustrator

г.:

30.16. Flash можно во многих форматах

Bitmap используется только в Windows для экспортирования растровых изо-

бражений, которые затем можно использовать в других приложениях.

DXF Sequence и AutoCAD DXF Image экспортируют векторные элементы, ко-

торые можно использовать в DXF-приложениях.

Enhanced MetaFile — новый графический формат, поддерживающий вектор-

ные и растровые данные в Windows 95 и Windows NT.

EPS eps) позволяет экспортировать текущий кадр с целью его размещения в прило-

жениях макетирования, таких как Quark Express, Adobe PageMaker и Microsoft Word.

Flash Movie позволяет экспортировать весь фильм, чтобы разместить его в

других приложениях, таких как Dreamweaver.

FutureSplash Player — оригинальный формат и название Flash до того, как эта

технология стала собственностью Macromedia. Параметры экспортирования соответ-

ствуют параметрам публикации во Flash.

JPEG Sequence и JPEG Image jpg) экспортируют растровые изображения для ис-

пользования в других программах. Соответствующие параметры были описаны выше,

в подразделе "Формат JPEG".

PICT стандартный графический формат Macintosh, поддерживающий век-

торные и растровые данные.

PNG Sequence и PNG Image рпд) — единственный межплатформенный растровый

формат, поддерживающий прозрачность. Он является "родным" форматом приложе-

ния Fireworks.

QuickTime mov) может объединять интерактивное Flash-содержимое и мультиме-

дийное содержимое QuickTime в единый фильм QuickTime, который можно просмот-

реть посредством модуля QuickTi me 4.

QuickTime Video mov) для Macintosh преобразует Flash-фильм в ряд растровых изо-

бражений, внедренных в дорожку QuickTime. Интерактивностью приходится жертво-

вать. Данная опция позволяет редактировать Flash-фильмы в приложениях для редак-

тирования видео.

ГЛАВА 30. ОПТИМИЗАЦИЯ, ПУБЛИКАЦИЯ и ЭКСПОРТИРОВАНИЕ Фильмов 685

• WAV Audio wav) для Windows экспортирует звуковые файлы в единый аудиофайл WAV.

• Windows AVI avi) экспортирует фильм в виде видеофайла для Windows. При выборе

этого формата интерактивность не учитывается. Данный формат эквивалентен форма-

ту QuickTime Video для Macintosh, но для Windows.

• Windows MetaFile — стандартный графический формат Windows.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

В чем отличие экспортирования фильма посредством команды Export от его экс-

портирования при тестировании?

Всякий раз при тестировании фильма (посредством команды Movie) экс-

портируется Экспортирование файла происходит и при обращении к команде Ex-

port. Однако, как вы только что узнали, команда Export является гораздо более мощным ин-

струментом, так как помимо SWF она много других форматов. Во время работы

над фильмом вам придется постоянно его тестировать, а экспортировать фильм в другие

форматы необходимо только один раз — по завершении работы над фильмом.

Почему при просмотре SWF-файла в броузере растровые изображения и шрифты

выглядят размытыми ?

Проверьте, какой элемент выбран из меню (Масштабирование) во вкладке HTML

диалогового окна Publish Settings. Обязательно должен быть выбран элемент No Scale (Без

масштабирования). Если разрешить масштабирование, то размеры растровых изображений, в

том числе и растровых шрифтов, изменятся и это приведет к тому, что они будут выглядеть

размытыми. Кроме того, во вкладке HTML из меню Quality (Качество) обязательно нужно вы-

брать элемент High (Высокое) или Best (Наилучшее).

FLASH ЗА РАБОТОЙ: ИСПОЛЬЗОВАНИЕ ИМЕНОВАННЫХ

АНКЕРОВ

Именованные анкеры позволяют пользователям использовать кнопки Back (Назад) и

Forward (Вперед) броузера для перемещения по фильму. Навигационные функции броузера

выступают в роли вспомогательных средств навигационных систем во Flash-фильмах. Сред-

ства навигации, заданные в фильме, позволяют пользователям перемещаться по фильму для

выполнения различных действий. Однако именованные анкеры позволяют создавать

"закладки" кадров или сцен так, что кнопки броузера реализуют дополнительное управление

воспроизведением фильма.

Внимание! Именованные анкеры функционируют только в броузерах, поддерживающих

команду таких как Internet Explorer для Windows и Netscape 4.

Именованные анкеры назначаются в ключевых кадрах. Для того чтобы указать их, выпол-

ните следующие действия.

1. Откройте законченный фильм.

2. На временной шкале выберите ключевой кадр, который вы хотите использовать в каче-

стве именованного анкера.

686 ЧАСТЬ VI. ВЫХОДНЫЕ ПАРАМЕТРЫ FLASH

3. Если панель инспектора свойств закрыта, откройте ее, выполнив команду Win-

или нажав клавиши или

<Ctrl+F3> (Windows). В поле Frame (Кадр) введите имя.

4. Установите флажок в поле опции Named Anchor (Именованный анкер), расположен-

ной под полем Frame (рис.

5. В ключевом кадре на временной шкале появится пиктограмма именованного анкера

(рис. 30.18). Чтобы именованные анкеры могли функционировать, в диалоговом окне

Publish Settings необходимо выбрать соответствующую опцию. Для этого во вкладке

HTML из раскрывающегося меню Template (Шаблон) выберите пункт Flash with

Named Anchors (Flash с именованными анкерами).

Чтобы кадр именованным анкером,

на панели инспектора свойств установите флажок в по-

ле опции Named Anchor

Рис. Ключевые кадры, именованными

анкерами, помечаются соответствующей пиктограммой

ГЛАВА 30. ОПТИМИЗАЦИЯ, ПУБЛИКАЦИЯ и ЭКСПОРТИРОВАНИЕ Фильмов 687

ПРИЛОЖЕНИЕ А

УЛУЧШЕНИЕ ДОСТУПНОСТИ FLASH

в этом ПРИЛОЖЕНИИ...

Правила доступности

ПРАВИЛА ДОСТУПНОСТИ

До выхода версии Flash MX содержимое Rash было практически недоступно для пользователей,

пользующихся программами считывания данных с экрана, и для пользователей с ослабленным

слухом. В настоящее время Flash Player 6 может взаимодействовать с программами считывания

данных и другими вспомогательными устройствами работы с визуальным содержимым.

Программы считывания данных с экрана позволяют работать с Internet пользователям с

ослабленным слухом. Такие программы могут считывать текст, но они не способны воспроизводить

изображения или анимацию. В связи с тем, что содержимое Flash является недоступным

для программ считывания, очень важно задать параметры доступности для как можно

большего числа элементов Flash MX.

Ниже перечислены пять объектов, которые доступны во Flash и передаются из Flashплейера

в программы считывания данных с экрана:

• текст;

• текстовые поля ввода данных;

• кнопки (в том числе и видеоклипы кнопок);

• видеоклипы;

• фильмы целиком.

Однако отдельные графические изображения передать в программы считывания невозможно.

Это особенно важно учесть при работе с текстом. Любой графический текст, т.е. тот,

который разбит на отдельные контуры, является недоступным. Это означает, что недоступными

могут оказаться целые навигационные системы. Имейте это в виду при разработке

фильмов и убедитесь в том, что важные меню созданы в виде текста, а не в виде контуров.

К каждому из пяти доступных объектов Flash позволяет присоединять дополнительные

текстовые описания (подобно дескрипторам ALT в HTML), которые сделают содержимое бо-

лее полезным и доступным для программ считывания. Наиболее важным является свойство

Name (Имя), которое можно назначить для объектов. Это имя будет громко зачитываться

программами считывания данных. При работе над фильмом можно указать, какие Flash-

объекты будут доступными для программ считывания.

Чтобы указать параметры доступности Flash-объектов, выполните следующие действия.

1. Выделите Flash-объект на рабочем поле.

2. На панели инспектора свойств щелкните на кнопке Accessibility (Доступность), как

показано на рис. АЛ. В результате откроется панель (рис. А.2).

В качестве альтернативного способа открытия панели Accessibility можно воспользо-

ваться комбинацией клавиш <Opt+F2> (Macintosh) или (Windows).

I

..... .

j \ as

......

;

Рис. А. После щелчка на кнопке Accessibility панели инспектора свойств откроется панель Ac-

cessibility

3. Проверьте, чтобы в поле опции Make Object Accessible (Сделать объект доступным)

был установлен флажок, а затем на панели Accessibility введите имя и описание объек-

та (см. рис. А.2).

На панели Accessibility можно даже назначить комбинации клавиш, инициирующие щел-

чок на кнопке или ввод данных в текстовые поля. Введите название клавиши, такой как

или <Ctrl>, и знак "плюс" без пробелов, чтобы добавить названия клавиш.

В настоящее время программное обеспечение для считывания информации с

экрана доступно только для платформы Windows. Имейте это в виду при созда-

нии клавиш быстрого доступа и не задействуйте клавиши, имеющиеся только

на компьютерах Macintosh, например <Cmd>.

Обязательно указывайте имена любых доступных объектов. Даже если объект содержит

только визуальное содержимое (например, специальный анимационный объект), очень важ-

но указать это содержимое программам считывания данных. Если этого не сделать, то поль-

зователи, работающие со вспомогательными устройствами, могут вообще не узнать о важном

содержимом или подумать, что они пропустили что-то важное.

По завершении работы над Flash-фильмом необходимо задать доступность всего фильма

для объектов, которые были сделаны доступными для обработки программами считывания

данных. Чтобы задать доступность всего фильма, выполните следующие действия.

1. Когда фильм завершен и готов к публикации, снимите выделение всех элементов, на-

ходящихся на рабочем поле, а затем откройте панель Accessibility, щелкнув на одно-

именной кнопке панели инспектора свойств или выполнив команду Win-

Accessibility.

2. Установите флажок в поле опции Make Movie Accessible (Сделать фильм доступным),

как показано на рис. А.З. Если вы хотите скрыть фильм от программ считывания, сни-

мите данный флажок.

3. Чтобы назначенные доступными объекты обработаны программами считы-

вания данных с экрана, установите флажок в поле опции Make Child Objects Accessi-

ble (Сделать дочерние объекты доступными).

ПРИЛОЖЕНИЕ А 689

4. Чтобы использовать текстовые объекты в качестве автоматических меток для доступ-

ных кнопок и текстовых полей ввода данных, установите флажок в поле Auto

Label (Автометка). Флажок в поле данной опции установлен по умолчанию.

5. В поле (Имя) введите краткий описательный заголовок.

6. В поле Description (Описание) введите более длинное описание. Представьте себе, что

вы не можете посмотреть фильм, и введите такое описание, которое могло бы предста-

вить его, не опираясь на визуальные подсказки.

Несмотря на то что во Flash MX сделаны попытки улучшить доступность содержимого,

дизайнеры и разработчики должны убедиться в том, что важное содержимое будет доступным

для всех категорий пользователей. Предпримите для этого все возможные усилия.

Movie

_ Child

showing how

Рис. А.2. панели Accessibility для

можно назначить имена, описания,

а также указать комбинации клавиш быст-

рого доступа

Hash-фильм необходимо сделать дос-

тупным так, чтобы соответствующие объекты

могли быть обработаны программами считыва-

ния данных с экрана

690 ПРИЛОЖЕНИЕ А

УКАЗАТЕЛЬ

D

199

автоматическое преобразование типов

данных, 263

будущие зарезервированные 224

выражения, 248

двоичные числа, 254

зарезервированные слова, 223

ключевые слова предложений, 282

настройка параметров редактора, 58

нестрогие типы данных, 234

переменных, 218

операторы, 245; 246; 247; 248

панель Actions, 200

панель ActionScript Reference, 36

панель Code Hints, 36

предложения, 248

работа с цветом, 470

типы данных, 225; 226

управление ходом выполнения

программы, 283

ADPCM, 168

AIFF, 160

Align, 77

Arrow, 46; 67; 68

модификаторы, 46

Audio Video Interleaved, 188

В

Break Apart, 30

Break Apart, команда, 92

Brush, 47; 67

630

Code Hints, 36

Color Mixer, 74

Distribute to Layers,

Eraser, 49; 75

Eyedropper, 49

Fill Transform, 48

Flash

Java-классы, 581

классы ActionScript, 582

отправление электронной почты, 634

удаленный 580

Flash Communication Server, 479; 496

Flash MX

группы панелей, 29

диалоговое окно Preferences, 53

доступ к содержимому, 36

доступ к наборам панелей, 41

загрузка внешних изображений и звука, 35

задание параметров, 53

импортирование растровых изображений,

81

интерактивность, 173

интерфейс, 39

клавиши быстрого доступа, 50

методики рисования, 395

модель событий, 34

наборы панелей, 39

настройка предупреждающих сообщений,

57

новые инструментальные 30

новые свойства видеоклипов, 363

общие настройки, 54

объектная модель, 34

параметры буфера обмена, 57

параметры редактирования, 55

параметры редактора ActionScript, 58

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 691

прикладной программный интерфейс

рисования, 35

расширение обработки событий, 333

события, 335

совместимость с Rash 5, 36

создание оптимального интерфейса, 59

создание пользовательского интерфейса,

553

усовершенствование сценариев, 34

шаблоны, 32

Free Transform, 30; 48

н

Hand, 49

HSB, модель цветопередачи, 72

I

Import, диалоговое окно, 82

Ink Bottle, 49

QuickTime, 682

QuickTime Movie, 188

R

Rectangle, 47; 63

RGB, 472

RGB, модель цветопередачи, 72

Round Rectangle 40

Smart Clips, 537

Snap to Pixels, 31

Spark, 32; 188

параметры сжатия, 189

Sound Designer II, 160

Subselection, 46; 65

160

System 7 Sounds, 160

Lasso, 46; 92

модификаторы, 47

Library, 52

Line, 46; 63

M

Microsoft Active Accessibility, 469

Motion Picture Experts Group, 188

Movie Explorer, 53

MP3, 160; 169

250

Oval, 47; 63

N

О

Text, 47; 99

w

WAV, 160

Windows Media 188

X

XML-данные, 637

синтаксический анализ, 640

XML-документ

дескрипторы, 639

создание, 639

XML-свойства, 640

646

XML-узлы, 638

Paint Bucket, 49

Pen, 47; 63

47; 63

680

Zoom, 49

Анимация, 137

692 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ

вложенные символы, 153

Анимация

вторичное действие,

деформация при движении, 154

добавление к кнопке,

добавление кадров,

добавление ключевых кадров, 139

завершение движения, 153

кадры, 138

калькирование, 148

ключевые кадры, 138

мультипликация, 152

накладывающиеся действия, 154

направляющие движения, 143

ожидание, 153

панель Timeline, 138

покадровая, 141

правила 153

пример создания, 141

промежуточное отображение

движения, 142

распределение во времени и

движение, 153

растровых изображений, 95

регулировка движения, 147

с созданием промежуточных отображений, 141

создание промежуточных отображений с

изменением формы, 149

создание эффекта панорамы, 152

специальные объекты, 467

удаление кадров,

указатели формы, 151

упрощение, 155

частота смены кадров, 140

штрихи, 141

Анкерные точки, 63

корректировка, 65

Аргументы

передача данных в 300

Атрибуты,

диалоговое окно Document Attributes, 41

675

Безье, кривые, 64

Библиотека, 52

добавление компонентов, 184

импортирование видео, 191

импортирование растровых изображений, 82

использование с компонентами, 544

конфликт библиотеки, 135

Библиотека

панель Library, 52

присоединение загруженных фильмов, 370

размещение звуковых файлов, 160

размещение символов, 132

символы,

создание общих библиотек, 52

Библиотеки коллективного

использования, 577

Битовая глубина звука, 159

Булевы данные, 229

В

Взаимодействия, 563

Взаимосвязь 617

Взаимосвязь 616

Взаимосвязь Flash-фильмов, 622

Взаимосвязь с сервером

внедрение данных на Web-страницу, 628

метод 627

объект 625

передача данных на сервер,

Видео

Audio Video Interleaved, 188

Motion Picture Experts Group, 188

QuickTime Movie, 188

Spark, 188

Windows Media File, 188

внедрение, 189

замена, 192

импортирование, 188

импортирование в библиотеку, 191

импортируемые форматы, 188

интерактивность, 195

маски, 191

поддержка во Flash MX, 32

преобразование экземпляров, 191

сжатие, 188

создание кнопок для управления, 192

управление воспроизведением, 192

Видеоклип 334

Видеоклипы, 357

визуальный порядок наложения, 367; 372

шкала, 358

выгрузка внешних файлов,

выделение в подкласс, 378

загрузка внешних файлов, 369

задание идентификатора связи, 550

иерархическая структура, 372

иерархия, 372

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 693

Видеоклипы

изменение размеров с помощью

масштабирования, 457

использование для систематизации

переменных, 220

ключевые кадры, 358

методы, 383

методы класса 358; 359; 360; 361

новые свойства во Flash MX, 363

перетаскивание, 387

показатели глубины , 367, 373;

проверка 382

родительско-дочерние связи, 367

свойства класса MovieClip, 362

свойство 389

свойство 380

свойство enabled, 364

свойство focusEnabled, 364

свойство 365

свойство 365

свойство 366

свойство 366

свойство 366

свойство 366

систематизация данных и функций,

создание, 367

способы создания, 368

структурирование фильма, 180

точка регистрации, 367

удаление, 369

уровни визуального порядка наложения,

373

Вложенные видеоклипы, 656

шкала, 42

видеоклипов, 358

выделение нескольких кадров, 139

доступ к переменным внутри функции,

299

использование для систематизации кода,

212

Timeline, 42

перемещение по ней,

систематизация переменных, 220

создание сценариев, 330

структурирование документов, 180

Выравнивание

абзацев, 104

объектов, 77

Выражения, 248

д

Данные

правила обзора,

Динамические данные, 630

Заливка, 72; 406

градиентная, 73

инструмент Fill Transform, 48

растровая, 74

редактирование, 72

текста, 102

чистым цветом, 72

Звук, 157

ADPCM, 168

AIFF, 160

МРЗ, 160

169

Sound Designer 160

AU, 160

System 7 160

WAV, 160

битовая глубина, 159

добавление к кнопке,

загрузка и присоединение, 477

звуковые форматы, 160

импортирование, 160

ключевые кадры, 165

маркеры огибающей, 164

моно, 160

надстройка QuickTime

объект Sound, 166

оптимизация, 167

отключение, 170

параметры синхронизации, 162

подготовка для

получение данных о

потоковый, 162; 478

против анимации, 162

редактирование во Flash, 163

свойства, 161

сжатие, 167

синхронизация, 161

событийный, 162; 478

стерео, 160

управление, 165; 479

фильмов QuickTime, 160

циклическое воспроизведение, 164

частота дискретизации, 159

И

Идентификаторы, 223; 296

694 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ

Изображения

векторные, 62

вспомогательные элементы компоновки,

76

градиентная заливка, 73

заливка, 72

заливка чистым 72

использование инструментов рисования,

62

направляющие, 76

направляющие слои, 77

пиксели,

растровые, 74; 81

растровые против векторных, 88

растровые, анимация, 95

растровые, оптимизация, 90

растровые, подготовка к

импортированию, 83

растровые, разбивка, 92

растровые, свойства, 93

растровые, сжатие, 93

трассировка, 87

сетка, 76

создание криволинейных сегментов, 64

создание прямых отрезков, 64

Инспектор 30; 40

замена старых панелей, 30; 40

параметры текста, 100

Инструменты

Arrow, 46; 67; 68

Brush, 47; 67

Eraser, 49; 75

Eyedropper, 49

Fill Transform, 48

Free Transform, 30; 48

Hand, 49

Ink Bottle, 49

Lasso, 46; 92

Line, 46; 63

Oval, 47; 63

Paint Bucket, 49

Pen, 47; 63

Pencil, 47; 63

Rectangle, 47; 63

Round Rectangle Radius, 40

Subselection, 46; 65

Text, 47; 99

Zoom, 49

панель инструментов, 45

Интерполяция изображений, 151

Интерфейсные классы

методы и

Использование 639

К

Кадры, 42; 138

добавление, 139

калькирование, 45

ключевые кадры, 42

удаление, 139

частота смены, 140

Калькирование, 45; 148

маркеры калькирования, 45

Кегль, 101

Кернинг, 102

Клавиши быстрого доступа

к

к панелям, 51

наборы,

настройка,

создание новых наборов,

Ключевое слово,

Ключевые кадры, 42; 138; 165; 662

видеоклипов, 358

вставка, 42

добавление, 139

преобразование в обычные,

пустые, 42; 140

управление, 140

Ключевые слова

this, 320; 337

299

создание локальных переменных внутри

функции, 298

Кнопки, 118; 174

активная область, 349

курсор в виде руки, 349

невидимые, 179

объекты, 469

присоединение анимации, 179

присоединение действия, 176

присоединение звука, 178

простые,

свойства,

сложные, 178

Кнопки

создание видеоклипа, 349

состояния, 118; 349

управления видеоклипом, 192

Код

ActionScript, 200

без необходимости централизации,

выбор режима, 203

достижимость,

жесткое кодирование,

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 695

Код

комментарии, 207

обычный режим, 202; 203

оптимизация, 208

повторное использование, 208;

помощью панели Movie Explorer,

применение наследования,

присоединение действий, 201

систематизация, 210

систематизация переменных в основной

шкале, 220

систематизация с помощью временной

шкалы, 212

советы по использованию кода, 202

создание удобочитаемых имен, 208

стандартизация, 208

удобочитаемость, 206

упрощение, 208

чувствительность к регистру символов, 224

экспертный режим, 202; 203

Кодек, 188

Команды

Break Apart, 30

Distribute to Layers,

Snap to Pixels, 31

Команды Lingo, 619

Комбинированный управляющий

элемент, 182

Компоненты, 32; 182

CheckBox, 540

ComboBox, 538

ListBox, 539

PushButton, 182

Rectangle, свойства, 549

встроенные, 537

добавление, 182

комбинированный управляющий элемент, 182

нажимные кнопки, 542

окно списка, 182

определение свойств, 548

панель Components, 182

панель прокрутки, 182

переключатели, 182; 541

полоса прокрутки, 182; 495; 543

прокручивающееся текстовое поле, 542

редактирование оболочек, 545

создание новых, 545

создание пиктограммы, 550

способы добавления в файлы, 538

текущий просмотр, 556

тестирование, 550

Компоненты

установка на панели Components,

флаговое поле, 182

Кривые 64

Л

Литералы, 239

массивов, 240

объектов, 240

строковые, 240

числовые, 240

м

Маски, 35

динамические, 389

создание, 78

Массив, 230; 420

ассоциативный, 425

градиентный, 408

добавление элементов, 424

индексы, 230

методы, 425

обращение к элементам, 423

свойства, 426

создание, 422

типы данных, 421

удаление элементов, 424

Массивы, 205

Матрица преобразования, 409

вращение объектов,

краткий формат, 410

масштабирование объектов, 412

объединение операций, 413

традиционная, 410

трансляция, 413

Межзнаковый интервал, 102

Методы, 206

379

Function.apply(), 316

316

379

видеоклипов, 383

градиентной заливки, 407

класса Camera, 497

класса Date, 436; 437; 438; 439; 440

класса 508

класса Microphone, 500

класса 358; 359; 360; 361

класса Object, 442

696 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ

Методы

класса 493

массивов, 425

назначение для класса, 309

назначение посредством объявления

функции, 310

назначение с функционального

литерала,

объекта 474; 475

объекта Math, 452; 453

объекта 502

объекта NetStream, 503

объекта Video, 497

308

прикладного программного интерфейса

рисования, 396; 397

рисования кривых, 402

рисования линий и кривых, 399

текстовых полей, 485; 486; 487; 488; 489;

490; 491

тригонометрические, 456

Модели цветопередачи, 72

Модификаторы

Brash Mode, 47

48

Envelope, 48

Erase Fills, 49

Erase Inside, 49

Erase Mode, 49

Erase Normal, 49

Erase Selected 49

Erase Strokes, 49

Eraser Shape, 49

Faucet, 49

Magic Wand, 92

Magic Wand Settings, 47

Paint 47

Paint Fills, 47

Paint Inside, 48

Paint Selection, 47

Pencil 47

Polygon Mode, 47

Pressure, 48

Rotate and Skew, 48

Round Rectangle Radius, 47; 63

Scale, 48

Smooth, 46; 69

Snap to Objects, 46

Straighten, 46; 69

инструмента Arrow, 46

инструмента Brush, 47

инструмента 49 ,

инструмента Free Transform, 48

Модификаторы

инструмента Lasso, 47

инструмента Pencil, 47

инструмента Rectangle, 47

Модификаторы инструментов

Distort, 30

Edit Envelope, 30

Модуль Bandwidth Profiler, 669

Мультипликация, 152

H

Навигация

по 180

Наиболее распространенные проблемы,

589

Направляющие, 76

Направляющие движения, 143

Направляющие слои, 77

Наследование

иерархия, 313

использование оператора new для

создания цепочек, 313

переписывание свойств, 522

подмена наследуемых свойств, 520

применение для создания повторно

используемого кода,

Нераспечатываемые кадры, 657

О

Обзор данных

автоматический, 322

в объекте, 321

обработчики событий, 337

явный, 320

Область печати, 659

Обработчики событий, 330

класса Camera, 500

класса 508

класса Microphone, 501

обзор данных, 337

объекта NetConnection, 502

объекта NetStream, 503

отключение и удаление, 340

фокусировка, 339

явное обращение, 338

Обучающие взаимодействия, 560

активная область, 570

активный объект, 570

конфигурирование, 567

множественный выбор, 571

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 697

Обучающие взамодействия

параметры обратной связи, 572

структура сценариев, 573

истина или ложь,

Объект

arguments, 302

205

Accessibility, 469

arguments, 305

Array, 420

Key, 345; 473

Key, методы, 474; 475

Math, 452

Math, методы и свойства, 452; 453

Mouse, 345; 476

NetConnection, 501

501

Object, 223

prototype, 312; 517

Selection, 350; 476

Stage,

System, 484

System.capabilities, 470

TextField, 352; 484

484; 492

Video, 496

базовые, 421

видеоклипы, 357

встроенные, 419

глобальные, 419

глобальные, отсутствие подмены свойств, 522

детализация иерархий классов, 532

доступ к 273

интерфейсные классы, 430

использование для отслеживания

рисования,

использование для систематизации

переменных, 221

класс Boolean, 434

класс Camera, 498

класс Color, 470

класс Date, 436

класс

класс LocalConnection, 507

класс Microphone, 500

класс Number, 435

класс Object,

класс String, 435

кнопки, 469

моделирование области действия задачи, 229

мультимедийные, 495

одноэлементные множества, 420

переписывание наследуемых свойств, 522

подмена наследуемых свойств, 520

подмена свойств в отдельных

экземплярах, 522

получение локальных свойств в

экземплярах подкласса, 524

пользовательские,

регистрация в качестве приемника, 336

разработка и подклассов, 532

свойство 518

свойство constructor, 524

связанные с фильмами, 468

создание иерархии классов, 528

создание объектов-потомков, 525

создание с помощью оператора new, 307

создание свойства в

прототипе подкласса, 531

сравнение, 230; 434

функции-конструкторы, 419

Одноэлементное множество, 420

Окно 596

Окно списка, 182

Окружения Flash-фильмов, 603

Операнды, 225; 248

специальное значение NaN, 250

Операторы, 225; 245

delete, 272

272

new, 517

super, доступ к 523

void, 272

арифметические, 246; 250

ассоциативность, 249

Операторы

больше, 262

больше или равно, 262

булевы, 246; 266

версии Flash 4, 264

вычитания, 251

группирования, 249

253

деления по модулю, 253

запятая, 270

именованные, 271

использование в качестве постфикса, 250

использование в качестве префикса, 250

категории, 246

круглые скобки/обращение к функции, 274

логические, 246; 266

273

меньше, 262

меньше или равно, 262

698 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ

Операторы

неравенства, 262

операнды, 248

отношения, 262

перегруженные, 252

переназначения, 246

побитовое

побитовое ИЛИ, 257

побитовое исключающее ИЛИ, 258

побитовое НЕ, 258

побитовые, 254

побитовые логические, 255

полиморфные, 252

приращения, 250

присваивания, 246; 260

равенства, 262

сдвиг влево со знаком, 260

сдвиг вправо без знака, 260

сдвиг вправо со знаком, 259

сложения, 251

сложного присваивания,

со сдвигом бита, 259

сравнение в объектах и массивах, 265

сравнения, 246; 262

старшинство, 249

строгого неравенства, 262

строгого равенства, 262

273

троичные, 269

умножения, 253

унарного отрицания, 252

условные, 268

циклические, 287

Оптимизация растровых изображений,

Отчет о размерах,

п

Панели

Accessibility, 36; 40

Actions, 40; 200

Reference, 36

Align, 40; 77

Answers, 40

Code Hints, 36

Color Mixer, 40; 69; 72; 74

Color 40

Component Parameters, 40

Components, 32; 40; 182; 537; 551

Debugger, 40

Info, 40

Library, 40; 52

Library, с компонентами, 544

Панели

Movie Explorer, 53; 212

Output, 40

Property Inspector, 40

Reference, 40

Stage, 40

Timeline, 40; 138

Toolbox, 40; 45

40

группы панелей, 29

доступ, 41

инспектор свойств, 30

компоновка, 41

плавающие, 40

сохранение пользовательских наборов

панелей, 41

Панель инструментов

подраздел Colors, 50

подраздел Tools, 45

подраздел View, 49

Панель прокрутки, 182

Панорама, 152

Переключатель,

Переменные, 206; 217

идентификаторы, 223

использование видеоклипов для

систематизации, 220

использование объектов для

систематизации, 221

назначение значений, 218

область действия, 219

объявление, 217; 219

объявление явным образом, 218

правила присвоения имен, 223

создание внутри функций, 298

Печать Web-содержимого, 655

Печать выбранных кадров, 656

Пиксели, 61

Планирование Flash-проектов, 590

Полоса прокрутки, 182

Правила обзора данных,

Предложения, 248; 279

do-while, 288

for, 288

for-in, 289

284

284

286

387

stopDrag(), 387

switch/case, 285

while, 287

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 699

Предложения

автономные, 279

автономные, образование, 280

ключевые слова,

объединение в управляющие блоки, 281

управляющие блоки, 279

условные, вложение, 285

Привязка объектов, 78

Прикладной программный интерфейс

рисования, 396

методы, 396; 397

Программа Director, 615

Профайлер полосы пропускания, 669

Процедура печати, 656

Процедура публикации, 673

Разбивка

текста,

Рисование

выпрямление и сглаживание контуров, 68

корректировка анкерных точек, 65

корректировка сегментов контура, 66

оптимизация кривых, 69

работа со штрихами, 69

с помощью инструмента Brush, 67

Line, 63

Oval, 63

Pen, 63

Pencil, 63

Rectangle, 63

создание криволинейных сегментов, 64

прямых отрезков, 64

штрихов, 70

Символы

преобразование объекта в символ, 122

редактирование, 101; 123

редактирование в новом окне, 125

редактирование на месте, 123

режим редактирования, 127

создание,

Система LMS, 574

Слои

направляющие, 77

папки слоев, 31; 43

предназначение, 43

размещение звуковых файлов, 161

События

onResize, связанное с рабочим полем,

ввода пользователем, 334

связанные с видеоклипами, 346

связанные с выбором, 350

связанные с кнопками, 341

связанные с 345

связанные с нажатием клавиш, 343

связанные с текстовыми полями, 352

связанные со звуком,

системные, 334

системные, правила управления

последовательностью, 353

создание сценариев,

текстовых 485; 486; 487; 488; 489;

универсальные процессоры, 354

явное обращение к обработчикам, 338

Сценарии

создание на основе временной шкалы, 330

создание на основе событий,

Серверные включения, 629

Сетка, 76

Сжатие

ADPCM, 168

МРЗ, 160; 169

Символы,

Unicode, 227

видеоклипы,

вложение, 135

графические,

дублирование, 123

замена,

имена, 132

Текст

атрибуты абзаца, 103

атрибуты символов, 101

внедрение шрифтов,

встраивание шрифтов, 109

выбор 101

выбор шрифта, 101

выравнивание абзацев, 104

дескрипторы 494

106

динамическое создание текстового поля, 485

добавление к фильму, 99

задание отступов,

интервала и полей, 104

задание свойств текстового поля,

700 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ

Текст

изменение формы букв,

инспектор свойств, 100

инструмент Text, 47; 99

кернинг, 102

класс TextField, 484

класс 484

копирование текстовых полей,

маркеры, 99

межзнаковый интервал, 102

назначение атрибутов, 47

направление, 102

объект TextFormat, 492

параметры, 105

параметры форматирования, 107

положение символа,

полоса 495; 543

преобразование,

привязка к пикселям, 99

проверка орфографии, НО

прокручивающееся текстовое поле, 542

разбивка, 110

растровые шрифты, 98

редактирование, 100;

редактирование отдельных символов, 101

сдвиг контуров,

стилевое оформление шрифтов, 102

текстовые блоки, 99

удобочитаемость,

цвет 102

Текстовые узлы, 638

Тестирование

действия отслеживания, 597

дистанционная отладка, 598

использование отладчика, 594

код 593

контрольные точки, 594

окно Output, 596

оптимизация, 592

производительность загрузки, 592

процедуры, 591

Тестирование и отладка, 590

Типы данных

movieClip, 231

null, 240

object, 229

undefined, 240

автоматическое преобразование для

булевы, 229

массивы, 230

неявное преобразование, 234; 238

преобразование в булевы значения, 236

Типы данных

преобразование в строку, 235; 238

преобразование в число, 234; 236

составные, 225

специальные значения типа number, 226

строковые, 227

числовые, 226

элементарные, 225

элементарные, преобразование в объекты,

526

явное преобразование, 234; 236

Точка регистрации

видеоклипов, 367

Точки регистрации

редактирование,

Точки 120

Трансляция,

Трассировка

оптимизация изображений, 90

параметры, 89

растровых изображений, 87

Управление броузером

603

передача сообщений, 608

функции JavaScript, 605

Управление проектором

модификация окна,

сокрытие контекстного меню,

Управляющие блоки

циклический и нециклический, 279

Ф

Флаговое поле, 182

Фокусировка, 339; 363

Формат PNG, 680

Функции, 201; 295

Code Hints, 202

автоматический обзор данных, 322

аргументы, 209; 232; 296

возвращение значений, 305

вызов, 298

глобальные, 232; 372

доступ к переменным временной шкалы, 299

загрузка содержимого в видеоклип, 370

идентификатор, 296

как

как классы, 306

453

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 701

Функции

методы, 206; 308

обратного вызова, 332; 450

обращения, 274

объявление, 296

определение, 205

передача аргументов по значению, 300

передача аргументов по ссылке, 301

передача данных с помощью 300

повторный вызов, 385

псевдонимы, 322

расчет факториалов, 326

рисования кривых, оптимизация, 405

свойство prototype, 308

создание, 296

создание локальных переменных внутри, 298

функции-конструкторы, 306

функциональные литералы, 297

явный обзор 319

Функции-конструкторы, 306; 419

529

модификация дочерних классов, 517

назначение метода посредством

объявления функции, 310

назначение метода с помощью

функционального литерала,

назначение методов для класса, 309

размещение локальных свойств в

иерархии наследования,

хранение данных о классе, 527

Функция печати фильма, 657

Ц

Цвет

в 470

заливки текста, 102

модели цветопередачи, 72

подраздел Colors панели инструментов, 50

шрифта, 102

Циклы

повторение действий, 287

создание списка, 290

Частота 159

Частота смены кадров, 140

Числа

представление дробных чисел с двойной

точностью, 226

с плавающей точкой, 226

целые, 226

целые, генерация, 454

экспоненциальное представление, 227

ш

Шаблоны, 32

обучающие взаимодействия, 559

содержимое шаблонов, 560

Шрифты

без засечек, 109

внедрение, 108

встраивание, 109

выбор, 101

выбор цвета, 102

машинописные, 109

моноширинные, 109

растровые, 99

с засечками, 109

стилевое 102

цвет заливки, 102

Штрих

редактирование стиля, 71

создание, 70

создание стиля, 70

Экземпляры

изменение свойств, 129

символов, 129

Экспортирование содержимого, 684

Элементы коллективного использования

сеансовые, 578

созданные на этапе разработки, 579

702 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ

Научно-популярное издание

Майкл Лора

Использование Macromedia Flash MX.

Специальное издание

Литературный редактор Попова

Верстка Л.В. Терещенко

Художественный редактор С.А.

Корректоры З.В. Александрова, Л.А.

О.В. Л.В.

Издательский дом "Вильяме".

101509, Москва, ул. Лесная, д. 43, стр. 1.

Изд. лиц. ЛР № 090230 от 23.06.99

Госкомитета РФ по печати.

Подписано в печать 25.07.2003. Формат 70X100/16.

Гарнитура Times. Печать офсетная.

Усл. печ. л. 59,31. Уч.-изд. -л. 46,28.

Тираж 4000 экз. Заказ №

Отпечатано с диапозитивов в "Печатный двор"

Министерства РФ по делам печати,

телерадиовещания и средств массовых

197110, Санкт-Петербург, пр., 15.

Мир книг по графике и обработке

изображений от издательской группы

7

Photoshop

effects

ISBN 5-8459-0423-4 ISBN 5-8459-0397-1 ISBN 5-8459-0380-7

по

ISBN 5-8459-0414-5 ISBN 5-8459-0472-2 ISBN 5-8459-0396-3 ISBN 5-8459-0320-3

Illustrator 10

ISBN 5-8459-0457-9 ISBN 5-8459-0381-5 ISBN 5-8459-0117-0 5-8459-0479-X

... u много других книг Вы найдете на наших сайтах

Cisco SYSTEM S

Ml

www.dialektika.com www.williamspublishing.com www.ciscopress.ru

"Данная книга позволяет ускорить

освоение многочисленных функций

Macromedia Flash MX. Полезную

информацию обучающего

MX

ЕДИНСТВЕННАЯ НЕОБХОДИМАЯ

КНИГА ПО FLASH MX

В книге представлен справочный материал,

необходимый для приобретения глубоких навыков

и освоения сложных функций программы Flash. Здесь

вы найдете все, что необходимо.

* Информация, которая может понадобиться

квалифицированному специалисту

Полностью обновленный и дополненный материал,

охватывающий все аспекты Flash MX, в том числе

функции интерфейса и ActionScript

Разработки опытных специалистов в области Flash

Практические примеры работы Flash (подразделы

"Flash за работой")

* Секреты привлекательности видеоклипов, мощь

компонентов и встроенных объектов

Использование внешних данных при создании

динамических Flash-фильмов

Создание Flash-фильмов, доступных пользователям

с физическими ограничениями

На прилагаемом компакт-диске содержится большое

количество бесплатных файлов, которые можно

использовать при обучении и работе с Flash.

и опытные пользователи.

книги позволяют каждому

пользователю внести свой вклад

в создание мощного динамического

содержимого Internet".

— Майкл Вильяме, заместитель

руководителя отдела производства

Macromedia Flash

Майкл Гурвиц — сотрудник компании

Late Night Design, работает

с технологиями Flash, которые являются

точкой пересечения искусства, дизайна

и технологии. С 1985 года он

публикуется в изданиях, посвященных

компьютерным технологиям. Майкл

является президентом некоммерческой

организации занимающейся

вопросами образования в области

охраны природы.

Лора Мак-Кейб — независимый

дизайнер. Она проживает в Балтиморе,

штат Мериленд, США. У Лоры

разносторонние интересы — она

прослушала базовый курс по

философии, имеет образование

в области прикладного искусства

и дизайна и, кроме того, освоила Flash.

За шесть лет работы в области Internet-

технологий Лора сотрудничала со

многими клиентами, совершенствуя

свои познания в области дизайна,

разработки, информационной

архитектуры и создания Web-продуктов.

Категория:

рассмотрения:

программирование для Internet/Web

Macromedia Flash MX

для пользователей средней

и высокой квалификации

Посетите Издательский дом "Вильяме в Internet по адресу:

ISBN

0308 7