
- •Оглавление
- •Вступление
- •Глава 1. Язык сценариев. ActionScript: начальные сведения
- •Проект 1: Прыгающий мяч (программная анимация)
- •1.1. Среда разработки ActionScript: настройка и приемы работы
- •1.1.1. Различие между стандартной и профессиональной версиями Flash
- •1.1.2. Панель Actions
- •1.1.3. Режим упрощенного ввода кода. Панель Behaviors
- •1.1.4. Как упростить создание кода на панели Actions
- •1.1.5. Типы сценариев
- •1.1.6. Централизация кода
- •1.1.7. Инструменты работы с кодом
- •1.1.8. Настройки стиля кода
- •1.1.9. Сохранение ActionScript-кода
- •1.1.10. Функция trace() и панель Output
- •1.1.11. Справочная информация
- •1.2. Синтаксис ActionScript
- •1.2.1. Пробельные символы
- •1.2.2. Завершение предложений
- •1.2.3. Чувствительность к регистру
- •1.2.4. Зарезервированные слова ActionScript
- •1.2.5. Принципы присвоения имен
- •1.2.6. Комментарии
- •1.3. Основные понятия
- •1.3.2. ActionScript как скриптовый язык Flash-плейера
- •1.3.3. Интерпретатор ActionScript. Flash-ассемблер
- •1.3.4. Символы и экземпляры символов
- •1.3.5. Переменные
- •1.3.6. Функции
- •1.3.7. Условные предложения
- •1.3.8. Циклы
- •1.3.9. Массивы
- •1.3.10. Объектная модель ActionScript
- •1.3.11. Свойства _root, _parent, Leveln и ключевое слово this
- •1.3.12. Области видимости кода
- •1.3.1. ЕСМА-262 как основа ActionScript
- •Глава 2. Типы данных
- •2.3. Математические функции и константы. Объект Math
- •2.3.1. Особенности реализации математических функций
- •2.3.2. Возведение в степень и вычисление квадратного корня
- •2.3.3. Экспонента и натуральный логарифм
- •2.3.5. Случайные числа
- •2.3.6. Округление до целого числа
- •2.3.7. Сравнение пары чисел
- •2.3.8. Тригонометрические функции
- •2.3.9. Математические константы
- •2.4. Строки (тип string)
- •2.4.1. Создание строк
- •2.4.2. Элементарные операции со строками
- •2.4.3. Класс String
- •2.4.4. Определение длины строки. Свойство lengths
- •2.4.5. Соединение строк. Метод concat()
- •2.4.6. Выделение символа строки по индексу. Метод charAt()
- •2.4.7. Поиск в строке. Методы indexOf() и lastIndexOff()
- •2.4.8. Извлечение подстроки. Методы substring(), substr(), slice()
- •2.4.9. Преобразование строк в массивы. Метод split()
- •2.4.12. Преобразование строк в идентификаторы. Функция eval()
- •2.4.13. Текстовые поля
- •2.5. Кодировка символов. Уникод во Flash
- •2.5.1. Немного истории
- •2.5.2. Поддержка уникода Flash-плейером
- •2.5.3. Поддержка уникода средой разработки
- •2.5.4. Добавление символов уникода
- •2.6. Логические величины (тип boolean)
- •2.6.1. Класс Boolean
- •2.7. Тип undefined
- •2.8. Тип null
- •2.9. Объекты (тип object)
- •2.9.1. Атрибуты свойств
- •2.9.2. Изменение атрибутов свойств. Функция ASSetPropFlags()
- •2.10. Клипы (тип movieclip)
- •2.11. Преобразование типов данных
- •2.11.1. Правила преобразования типов
- •2.11.2. Автоматическое преобразование типов
- •2.12. Строгая типизация в ActionScript
- •Проект 2: Калькулятор
- •2.1. Определение типа объекта данных
- •2.2. Числа (тип number)
- •2.2.1. Виды чисел в ActionScript
- •2.2.2. Особенности представления чисел
- •2.2.3. Операции с числами
- •2.2.4. Класс Number — методы и свойства
- •2.2.5. Преобразование строк в числа. Функции parseInt() и parseFloat()
- •Глава 3. Переменные
- •3.1. Создание переменных
- •3.2. Особенности типизации переменных
- •3.3. Локальные переменные функций
- •3.4. Глобальные переменные
- •3.5. Особенности операции присваивания
- •3.6. Есть ли переменные в ActionScript?
- •3.7. Удаление переменных
- •Проект 3: Пружинный маятник
- •Глава 4. Функции
- •4.1. Создание функций
- •4.2. Вызов функций
- •4.3. Предложение return
- •4.4. Рекурсия
- •4.5. Особенности цепочки областей видимости функций
- •4.6. Объект arguments
- •4.6.1. Формальные параметры и объект arguments
- •4.6.2. Свойства объекта arguments
- •4.7. Особенности передачи в функции составных объектов данных
- •4.8. Функции как объекты
- •4.8.1. Класс Function
- •4.8.2. Свойство prototype
- •4.8.3. Методы вызова функции
- •4.9. Функции на стадии выполнения. Объект активации
- •Проект 4: Крестики-нолики
- •Глава 5. Операторы
- •5.1. Виды операторов
- •5.2. Иерархия операций
- •5.3. Сочетательность операций
- •5.4. Арифметические операторы
- •5.5. Операторы присваивания
- •5.5.1. Оператор =
- •5.5.2. Операторы присваивания с модификацией
- •5.5.3. Инкрементирование и декрементирование
- •5.6. Операторы равенства и сравнения
- •5.6.1. Операторы равенства
- •5.6.2. Операторы сравнения
- •5.7. Логические операторы
- •5.8. Условный оператор (?:)
- •5.9. Служебные операторы
- •5.9.1. Инициализаторы литералов
- •5.9.2. Оператор группирования
- •5.9.3. Операторы доступа к свойствам
- •5.9.4. Оператор вызова функции
- •5.9.5. Оператор new
- •5.9.6. Оператор super
- •5.9.7. Оператор delete
- •5.9.8. Оператор typeof
- •5.9.9. Оператор instanceof
- •5.9.10. Оператор void
- •5.9.11. Оператор «запятая»
- •5.10. Поразрядные операторы
- •5.10.1. Логические поразрядные операторы
- •5.10.2. Операторы поразрядного сдвига
- •Проект 5: 3D-конструктор
- •Глава 6. Предложения
- •6.1. Блок предложений
- •6.2. Предложения var и function
- •6.3. Предложения выражений и пустые предложения
- •6.4. Предложение return
- •6.5. Предложение with
- •6.6. Условные предложения
- •6.6.1. Предложение if
- •6.6.2. Предложение switch
- •6.7. Циклы
- •6.7.1. Циклы с предусловием (while и do—while)
- •6.7.2. Цикл с параметром (for)
- •6.7.4. Предложения break и continue
- •6.7.5. Ограничение на время выполнения кода
- •6.7.6. Циклы события onEnterFrame и временной диаграммы
- •6.7.7. Циклический вызов функций. Функция setInterval()
- •Проект 6: Тетрис
- •Глава 7. Массивы (класс Array)
- •7.1. Создание массивов
- •7.2. Извлечение и переопределение элементов массива
- •7.3. Длина массива. Свойство length
- •7.4. Добавление элементов в массив
- •7.5. Удаление элементов массива
- •7.6. Слияние массивов
- •7.7. Выделение фрагмента массива
- •7.8. Инверсия массива
- •7.9. Сортировка массива
- •7.10. Преобразование массива в строку
- •7.11. Многомерные массивы
- •7.13. Особенности реализации массивов в ActionScript
- •Проект 7: Пиксельное табло
- •Глава 8. События
- •8.1. Модель событий Генератор—Листенеры
- •8.1.1. Обработчики событий
- •8.1.2. Листенеры
- •8.2. Событийные методы
- •8.3. Модель событий Flash 5
- •8.4. Обновление экрана при событиях
- •Проект 8: Создаем события сами
- •Глава 9. Объектно-ориентированное программирование
- •9.2.1. Объекты
- •9.2.2. Свойства
- •9.2.3. Методы
- •9.2.4. Классы
- •9.2.5. Наследование
- •9.2.6. Создание надклассов и подклассов
- •9.2.7. Концепция создания надклассов Flash 6
- •9.2.8. Оператор super
- •9.2.9. Свойства и методы конструктора класса
- •9.2.10. Определение принадлежности объекта к классу
- •9.2.11. Цепочка областей видимости. Объект Global
- •9.3. Класс Object
- •9.3.1. Создание объектов класса Object
- •9.3.2. Метод registerClass(). Выделение экземпляров клипа в класс
- •9.3.3. Метод addProperty(). Свойства типа getter/setter
- •9.3.4. Методы watch() и unwatch(). События изменений свойств
- •9.3.5. Прочие методы класса Object
- •9.4.1. Создание классов
- •9.4.2. Задание наследуемых свойств и методов класса
- •9.4.3. Конструктор класса. Инициализация собственных свойств и методов объектов
- •9.4.4. Особенности задания методов в AciionScript2.0
- •9.4.5. Статичные члены класса
- •9.4.7. Динамические классы
- •9.4.8. Наследование
- •9.4.9. Интерфейсы
- •9.4.10. Свойства типа getter/setter
- •9.4.11. Выделение экземпляров символа в подкласс
- •9.4.12. Особенности контроля на этапе компиляции
- •9.4.13. Особенности импорта внешних классов
- •9.4.14. Пакеты
- •9.4.15. Встроенные классы. Директива intrinsic
- •Проект 9: Модель идеального газа
- •Глава 10. Клипы
- •10.1. Глобальные функции и свойства
- •10.2. Отличия клипов от объектов
- •10.2.1. Свойства клипов
- •10.3. Клипы как носители кода
- •10.3.1. Последовательность выполнения кода
- •10.3.2. Особенности использования свойств и методов класса MovieClip
- •10.4. Особенности основной временной диаграммы _root
- •10.5. Создание экземпляров клипов
- •10.5.1. Метод duplicateMovieClip()
- •10.5.3. Метод createEmptyMovieClip(). Создание пустого клипа
- •10.6. Виртуальные слои клипов
- •10.6.1. Изменение глубины клипа. Метод swapDepths()
- •10.7. Импорт внешних фильмов и изображений
- •10.7.2. Импорт внешних фильмов при помощи функций loadMovie() и loadMovieNum()
- •10.7.3. Импорт изображений
- •10.7.4. Импорт фильмов и изображений при помощи класса MovieClipLoader
- •10.7.5. Создание предзагрузчиков
- •10.7.6. Кэширование swf-фильмов
- •10.7.7. Изменение глубины основной временной диаграммы
- •10.7.8. Доступ из одного фильма к объектам другого
- •10.7.9. Обобщенные библиотеки
- •10.8. Имена экземпляров клипов
- •10.9. Ссылки на клипы
- •10.9.1. Свойство _lockroot
- •10.9.2. Определение пути к клипу
- •10.9.3. Инструмент Insert Target Path
- •10.10. Система координат клипов
- •10.10.1. Свойство _x и _y
- •10.10.2. Пересчет координат из одной системы в другую
- •10.10.3. Масштаб осей
- •10.10.4. Размер клипа
- •10.10.5. Границы клипа
- •10.10.6. Поворот системы координат
- •10.11. Прозрачность и видимость клипа
- •10.11.1. Свойство _alpha
- •10.11.2. Свойство _visible
- •10.12. Перемещаемые клипы. Метод startDrag()
- •10.12.1. Свойство _droptarget
- •10.13. Коллизии клипов. Метод hitTest()
- •10.13.1. Определение пересечения двух клипов
- •10.13.2. Определение принадлежности точки к клипу
- •10.13.3. Определение коллизии клипов с использованием поточечного перебора
- •10.14. Управление временной диаграммой
- •10.14.1. Начало и остановка проигрывания клипа
- •10.14.2. Переход на новый кадр
- •10.14.3. Определение номера проигрываемого кадра
- •10.15. Программные маски
- •10.16. Удаление экземпляров клипов и фильмов
- •10.16.1. Удаление экземпляров. Метод removeMovieClip()
- •10.16.2. Выгрузка содержимого экземпляров. Метод unloadMovie()
- •10.16.3. Выгрузка фильмов
- •10.17. События
- •10.17.1. Создание обработчиков событий в стиле Flash 5
- •10.17.2. Событие смены кадров (onEnterFrame)
- •10.17.3. Событие загрузки клипа (onLoad)
- •10.17.4. Событие выгрузки клипа (onUnload)
- •10.17.5. Событие поступления данных (onData)
- •10.17.6. События мыши (onMouseDown, onMouseUp, onMouseMove)
- •10.17.7. События клавиатуры (onKeyDown, onKeyUp)
- •10.17.8. «Кнопочные» события
- •10.17.9. События фокуса (onSetFocus, onKillFocus)
- •10.18. Программное рисование
- •10.18.1. Рисование прямыми отрезками
- •10.18.2. Рисование фрагментами парабол
- •10.18.3. Однородная заливка
- •10.18.4. Градиентная заливка
- •10.18.5. Удаление программной графики
- •10.19. Управление цветом клипов. Класс Color
- •10.19.1. Цветовые модели
- •10.19.2. Задание формулы цвета
- •10.19.3. Задание цвета клипа. Метод setRGB()
- •10.19.4. Цветовые трансформации. Метод setTransform()
- •Проект 10: Рисование 3D-объектов
- •Глава 11. Кнопки
- •11.1. Создание кнопок
- •11.2. Сходства и различия кнопок и клипов
- •11.3. События кнопок
- •11.3.1. Особенности событий кнопок
- •11.3.2. События кнопок в стиле Flash 5
- •11.4. Режим элемента меню
- •11.5. Вид указателя мыши
- •11.6. Отключение кнопок
- •11.7. Управление кнопками при помощи клавиатуры
- •11.7.1. Динамическое наведение фокуса
- •11.7.2. Свойство _focusrect
- •11.7.3. События onSetFocus и onKillFocus
- •11.7.4. Задание маршрута клавиатурного обхода
- •11.7.5. Особенности клавиатурного обхода и программного фокуса в случае клипов
- •11.8. Клипы как кнопки
- •Проект 11: Факел
- •Глава 12. Работа с мышью и клавиатурой
- •12.1. Работа с мышью
- •12.1.1. Определение координат указателя мыши
- •12.1.2. События мыши
- •12.1.3. Скрытие указателя мыши
- •12.1.4. Правая клавиша мыши
- •12.1.5. Определение выхода указателя мыши за пределы окна плейера
- •12.2. Контекстное меню
- •12.2.1. Настройка контекстного меню. Класс ContextMenu
- •12.2.2. Введение в контекстное меню собственных команд
- •12.3. Работа с клавиатурой
- •12.3.1. Особенности событий клавиатуры
- •12.3.2. События onKeyDown и onKeyUp
- •12.3.3. Определение кода нажатой клавиши. Метод getCode()
- •12.3.4. Определение кода введенного символа. Метод getAscii()
- •12.3.5. Проверка нажатия клавиши. Метод isDown()
- •12.3.6. Проверка активности специальных режимов. Метод isToggled()
- •Проект 12: Эластики
- •Глава 13. Работа с текстом
- •13.1. Создание текстовых полей
- •13.1.1. Создание текстовых полей при помощи инструмента Text
- •13.1.2. Переменная поля
- •13.1.3. Динамическое создание текстовых полей
- •13.2. Удаление текстовых полей
- •13.3. Текстовые поля как визуальные объекты
- •13.4. Задание и извлечение текста поля
- •13.5. Настройка текстового поля
- •13.5.1. Управление размером поля
- •13.5.2. Рамка и задний фон
- •13.5.3. Поля однострочные и многострочные
- •13.5.4. Ограничение на количество символов
- •13.5.5. Поле паролей
- •13.5.6. Ограничение на вводимые символы
- •13.5.7. Выделение текста поля
- •13.6. Настройка стиля текста. Класс TextFormat
- •13.6.1. Задание гарнитуры
- •13.6.2. Размер шрифта
- •13.6.3. Цвет шрифта
- •13.6.4. Начертание шрифта
- •13.6.5. Выключка
- •13.6.6. Подчеркнутый шрифт
- •13.6.7. Гиперссылки
- •13.6.8. Форматирование текста
- •13.6.9. Определение размерных параметров текста
- •13.7. Работа со шрифтами
- •13.7.1. Шрифты системные и встроенные
- •13.7.2. Ненаправленные гарнитуры
- •13.7.3. Особенности встраивания шрифтов
- •13.7.4. Встраивание в фильм целого шрифта
- •13.7.5. Встраивание глифов отдельных символов и последовательностей символов
- •13.7.6. Проблема читабельности при отображении мелкого текста
- •13.8. Событие onChanged
- •13.9. Прокрутка текстовых полей
- •13.10. Работа с фокусом
- •13.11. Форматирование текста при помощи HTML
- •13.11.5. Тег <FONT> ... </FONT>
- •13.11.10. Тег <TEXTFORMAT> ... <TEXTFORMAT>
- •13.11.11. Тег <SPAN> ... </SPAN>
- •13.11.13. Автоматическое удаление пробелов. Свойство condenseWhite
- •13.12. Форматирование текста с использованием каскадных таблиц стиля (CSS)
- •13.12.1. Основные положения технологии CSS
- •13.12.2. Создание объекта таблиц стиля
- •13.12.3. Применение объекта стиля к текстовому полю
- •13.12.4. Элементы CSS, поддерживаемые Flash-плейером
- •13.13. Работа с выделением. Объект Selection
- •13.13.1. Управление фокусом поля. Методы getFocus() и setFocus()
- •13.13.2. Событие изменения фокуса (onSetFocus)
- •13.13.4. Определение и задание положения курсора ввода
- •13.13.5. Динамическое задание выделения. Метод setSelection()
- •13.13.6. Динамическая замена выделенного текста. Метод replaceSel()
- •13.14. Работа со статичным текстом. Объект TextSnapshot
- •13.14.1. Создание объектов класса TextSnapshot
- •13.14.2. Считывание текста статичных полей
- •13.14.3. Поиск строки в статичном тексте
- •13.14.4. Программное выделение статичного текста
- •13.14.5. Определение ближайшего к точке символа статичного текста
- •13.15. Копирование текста в буфер обмена
- •13.16. Поддержка многоязычности. Панель Strings
- •Проект 13: Текстовые эффекты
- •Глава 14. Время и дата
- •14.1. Основные понятия теории измерения времени
- •14.2. Компьютерное время
- •14.3. Класс Date
- •14.3.1. Создание объектов класса Date
- •14.3.2. Методы класса Date
- •14.4. Определение времени, прошедшего с начала проигрывания фильма
- •Проект 14: Программные часы
- •Глава 15. Работа со звуком
- •15.1. Основные понятия теории цифрового звука
- •15.1.1. Частота дискретизации
- •15.1.2. Разрядность выборок
- •15.1.3. Количество каналов
- •15.1.4. Алгоритмы компрессии
- •15.1.5. Форматы хранения
- •15.2. Событийный (event) и потоковый (stream) звук
- •15.3. Операции со звуком без использования программирования
- •15.4. Создание объектов класса Sound
- •15.5. Динамическое присоединение звука. Метод attachSound()
- •15.6. Импортирование внешних МР3-файлов
- •15.6.1. Метод loadSound()
- •15.6.2. Отслеживание окончания загрузки. Событие onLoad
- •15.6.3. Создание предзагрузчиков для импортируемых звуков
- •15.7. Управление воспроизведением звуков
- •15.7.1. Запуск воспроизведения. Метод start()
- •15.7.3. Событие onSoundComplete
- •15.8. Свойства position и duration
- •15.9. Управление параметрами воспроизведения
- •15.9.1. Громкость звука
- •15.9.2. Баланс
- •15.9.3. Детальное управление стереозвучанием. Метод setTransform()
- •15.10. Чтение ID3-тегов МР3-звуков
- •Проект 15: МР3-плейер
- •Глава 16. Взаимодействие с локальным окружением
- •16.1. Взаимодействие с импортированными фильмами
- •16.2. Взаимодействие с плейером
- •16.2.1. Определение версии и типа плейера
- •16.2.2. Режимы масштабирования
- •16.2.3. Типы выравнивания
- •16.2.4. Определение размеров фильма и величины окна плейера
- •16.2.5. Событие onResize
- •16.2.6. Цвет фона
- •16.2.7. Качество отображения
- •16.2.8. Панель небезопасных настроек плейера
- •16.3. Дополнительные возможности автономного плейера
- •16.3.1. Проекторы
- •16.3.2. Функция fscommandf()
- •16.4. Взаимодействие между фильмами, проигрываемыми разными плейерами
- •16.4.1. Создание кода отправки данных
- •16.4.2. Создание кода получения данных
- •16.4.3. Пример использования класса LocalConnection
- •16.5. Взаимодействие с браузером
- •16.5.1. Теги <EMBED> и <OBJECT>
- •16.5.2. Передача данных из HTML-окружения при загрузке фильма
- •16.5.3. Решение проблемы кнопок навигации браузера
- •16.5.4. Передача команд браузеру. Функция getURL()
- •16.5.5. Взаимодействие с JavaScript при помощи функции fscommand()
- •16.5.6. Управление SWF-фильмом посредством JavaScript
- •16.5.7. Определение наличия в системе Flash-плейера нужной версии
- •16.6. Взаимодействие со средой разработки
- •16.6.1. Настройка панели Actions
- •16.6.2. Объект CustomActions
- •16.6.3. Взаимодействие с JSFL
- •16.7. Взаимодействие со средствами чтения с экрана
- •16.8. Получение информации об использующемся аппаратном и программном обеспечении
- •16.9. Сохранение данных на диске
- •16.9.1. Создание объектов SharedObject
- •16.9.2. Чтение данных из объектов SharedObject
- •16.9.3. Удаление sol-файлов
- •16.9.4. Серверные объекты SharedObject
- •16.9.5. Решение проблемы выделения цветом посещенных ссылок
- •16.10. Взаимодействие с принтером
- •16.10.1. Функции печати
- •16.10.2. Класс PrintJob
- •Проект 16: Создаем свой инструмент
- •Глава 17. Обмен текстовыми данными с сервером
- •17.1. Принципы сетевой безопасности Flash MX 2004
- •17.1.1. Правила определения идентичности доменов
- •17.1.2. Требование идентичности протоколов
- •17.1.3. Снятие ограничений на доступ к содержимому фильма
- •17.1.4. Снятие ограничений на доступ к внешним данным
- •17.1.5. Преодоление ограничений для сокетов
- •17.1.6. Создание приложений, отвечающих принципам безопасности
- •17.2. Загрузка текстовых данных с сервера
- •17.2.1. Создание файла сданными
- •17.2.2. Функция loadVariables()
- •17.2.3. Класс LoadVars
- •17.3. Взаимодействие с серверным скриптом
- •17.3.1. Запрос с выводом результата в браузере
- •17.3.2. Запрос с отправкой результата в фильм
- •17.3.3. Задание заголовков запроса
- •17.4. Работа с сокетами
- •17.4.1. Класс XMLSocket
- •17.4.2. Создание сокета-сервера
- •17.5. Работа с XML
- •17.5.1. Введение в ХМL
- •17.5.2. Объектная модель XML. DOM
- •17.5.3. Преобразование XML-текста в дерево объектов DOM
- •17.5.4. Обход дерева DOM
- •17.5.5. Создание и модификация XML-документа
- •17.5.6. Обмен XML-данными с сервером
- •Проект 17: Создаем сетевую игру
- •Дополнительные главы
- •Глава 18. Обмен с сервером сложными данными
- •Глава 19. Компоненты
- •Глава 20. Полезные мелочи
13.7.4. Встраивание в фильм целого шрифта
Чтобы встроить в фильм некоторый шрифт, необходимо выполнить следующую последовательность действий:
•Вызвать панель библиотеки (<F11>) и все меню, открывающемся кнопкой, расположенной в правом верхнем углу, выбрать пункт New Font.
•Команда New Font вызовет панель Symbol Font Properties, на которой нужно задать следующие параметры:
oName. Имя символа шрифта. Именно оно будет соответствовать встроенному шрифту в списке доступных гарнитур Инспектора Свойств поля. По этой причине имя символа шрифта не должно совпадать с собственным названием гарнитуры — иначе возникнет конфликт идентификаторов.
o Font. В этом меню нужно выбрать, какая гарнитура должна быть встроена в фильм.
oStyle. В данном меню следует определить, в каком начертании встроить гарнитуру. Каждое начертание — это отдельный шрифт. Поэтому, если вы хотите, например, чтобы вам были доступны все четыре начертания определенной гарнитуры, каждое из них придется встроить как самостоятельный шрифт.
oAlias Text. Если данный шрифт будет использоваться для отображения мелкого текста (менее 12 пунктов), то при встраивании его стоит перевести в псевдопиксельный формат. При этом текст будет более четким и читабельным. Так как псевдопиксельный шрифт создается для конкретного кегля, его величину необходимо указать в окошке Size. Настройка Size доступна и в том случае, если параметр Alias Text не активен, но при этом она не оказывает никакого влияния на встраиваемый шрифт. Подробнее о псевдопиксельных шрифтах мы поговорим в подразделе 13.7.6.
•Если встроенный шрифт придется использовать в программно созданных полях или же динамически задаваемых стилях, то с ним нужно связать идентификатор для ActionScriptэкспорта. Для этого:
oвыполнить правый щелчок по строке символа шрифта в библиотеке. В открывшемся контекстном меню выбрать пункт linkage;
oв меню Linkage появившейся панели Linkage Properties поместить флажок в окошко Export for ActionScript. При этом станет доступным поле Identifier, в котором нужно прописать идентификатор для программного экспорта шрифта.
Чтобы указать созданному вручную текстовому полю, что оно должно использовать определенный встроенный шрифт, недостаточно выбрать в меню гарнитур его Инспектора Свойств строку с именем соответствующего символа. Решить эту задачу можно только средствами ActionScript:
•Указываем, что данное поле должно применять встроенные шрифты. Для этого нужно присвоить значение true специальному свойству embedFonts класса TextField.
•Создаем новый объект стиля и присваиваем его свойству font строку с идентификатором экспорта необходимого встроенного шрифта.
•Применяем стиль по отношению к тексту поля (метод setTextFormat()) или же заменяем им установки по умолчанию поля (метод setNewTextFormat()).
Точно так же связываются встроенные шрифты и с созданными программно полями.

Например:
// Встраиваем в фильм шрифт и даем ему идентификатор экспорта "font" this.createTextField("pole",0,150,150,0,0); pole.border=pole.autoSize=pole.embedFonts=true;
pole.text="Полe с символьным текстом"; pole.setTextFormat(new TextFormat("font",2 0));
Если стилем используется встроенный шрифт, то некоторые свойства класса Text Format теряют смысл. Например, при этом невозможно будет управлять начертанием шрифта при помощи свойств bold и italic. Причина этого следующая: так как каждое начертание гарнитуры — это отдельный шрифт, то в одном шрифтовом символе может храниться описание только одного начертания. Следовательно, любые попытки сменить тип шрифта окажутся безуспешными.
Невозможно одновременно применять в поле шрифты встроенные и шрифты системные. Когда вы присваиваете свойству embedFonts значение true, текст начинает отображаться как символьный. Если при этом не связать с ним встроенного шрифта, он попросту не визуализируется.
13.7.5.Встраивание глифов отдельных символов и последовательностей символов
Встраивание всего шрифта целиком зачастую избыточно. Например, в случае поля ввода многие символы гарантированно не потребуется в нем отображать по той причине, что их попросту нет на клавиатуре. Для табло счета в игре понадобится всего 10 цифр и символ «:». Если вы создаете англоязычный сайт, то буквы национальных алфавитов вам вряд ли пригодятся. В общем, на практике обычно нужна лишь определенная, как правило, не очень большая часть шрифта, Остальные же символы — это пустой балласт, который лишь впустую «утяжеляет» конечный фильм.
Возникает закономерный вопрос: а возможно ли встроить не весь шрифт, а лишь необходимые символы? Если текстовое поле создается вручную, то это реально. Для этого служит особая панель Character Options (рис. 13.23), вызываемая кнопкой Character Инспектора Свойств (рис. 13.1, 11).
В меню Embed font outlines for предлагается произвести выбор из следующих вариантов встраивания символов:
•No Characters. Символы в фильм не встраиваются. Принятая по умолчанию установка.
•Specify Ranges. Встраивается только определенная группа символов из выбранного для данного поля шрифта. Даже изначально таких групп имеется довольно значительное количество (так, среди них есть
почти все важнейшие национальные алфавиты). Для |
13.23. Панель встраивания символов |
нас наиболее интересны будут следующие группы |
|
символов: |
|
oUppercase (A—Z). В фильм будут включены буквы верхнего регистра латинского алфавита.
oLowercase (a—z). Опция включает в фильм буквы латинского алфавита в нижнем регистре.
o Numerals (0—9). Встроены будут только символы цифр от 0 до 9.
oPunctuation. Встраиваются основные знаки препинания, такие как запятая, точка, вопросительный и восклицательный знаки, круглые скобки и некоторые другие (полный их список можно получить, сгенерировав отчет о размере фильма: !"#$ %&'()*+,-./:;<=>?@[\]^_`{|}~). Знаки препинания, которые не могут быть введены при помощи клавиатуры, в эту группу не входят.
oBasic Latin. Набор основных печатных символов из кодировки ASCII. Включает латинские буквы верхнего и нижнего регистра, а также знаки пунктуации и знаки арифметических операций.
oCyrillic. Символы кирилличных алфавитов (в том числе и русского). Латинские символы, цифры и знаки пунктуации в эту группу не входят. Поэтому, если необходимо, чтобы поле могло отображать полноценный текст, наряду с группой Cyrillic нужно встроить и группу Basic Latin.
Одновременно можно внедрить символы сразу нескольких последовательностей. Для этого нужно, зажав <Ctrl>, выделить соответствующие строки списка Specify Ranges.
То, что в выбранную вами группу формально входят определенные символы, еще не значит, что все они будут внедрены в фильм. Чтобы встраивание контуров символа могло быть осуществлено, соответствующий глиф должен иметься в заданном для поля шрифте. Поэтому, например, бессмысленно, выбрав шрифт Arial Cyr, пытаться внедрить в фильм китайские иероглифы — их просто нет в этом шрифте. Из описанной особенности вытекает важное следствие, Не стоит бояться использовать группу Cyrillic: хотя в ней формально и имеется почти 500 символов, при выборе для поля русского шрифта встроено будет на порядок меньше знаков. Соответственно неоправданного роста размера swf-файла не произойдет. Если же вы хотите встроить в фильм какие-то экзотические символы, то нужно или применить соответствующий национальный шрифт, или обратиться к имеющимся в операционной системе Unicode-шрифтам (например, Arial Unicode MS).
При желании вы можете оптимизировать список Specify Ranges под свои потребности, удалив из него ненужные вам последовательности и включив необходимые. Для этого нужно внести изменения в специальный XML-документ UnicodeTable.xml. Располагается этот документ в папке FontEmbedding директории Configuration. Это чрезвычайно важная директория, так как в ней хранятся основные служебные данные, описывающие особенности настройки среды разработки Flash. С ней мы уже сталкивались в главе, посвященной объектно-ориентированному программированию (тогда нас интересовала папка Classes, в которой хранятся описания всех встроенных классов ActionScript). Путь к директории Configurations зависит от того, какая операционная система у вас установлена. В Windows 2000 он выглядит следующим образом: C:\Documents and Settings\user\Local Settings\Application Data\ Macromedia\Flash MX 2004\en\Configuration.
Найдя файл UnicodeTable.xml, откройте его при помощи любого текстового редактора или браузера, а затем внимательно изучите его структуру. Корневым тегом данного XML-документа является тег <fontEmbeddingTable>. Все, что находится внутри него, рассматривается как часть документа. Непосредственно последовательность символов описывается при помощи тега <glyphRange>. Данный тег имеет два атрибута. Атрибут name задает имя последовательности. Именно оно будет отображаться в соответствующей ей строке списка Specify Ranges. Атрибут id определяет порядковый номер последовательности в данном списке. B тег <glyphRange> вкладываются непарные теги <range>, в которых прописывается, какие группы Unicode-символов должны входить в данную последовательность. У тега <range> имеется два атрибута: min — код символа, начинающего группу, max — код символа, ее завершающего. Если последовательность символов представляет собой одну непрерывную Unicode-группу (например, буквы русского алфавита), то для ее задания достаточно одного тега <range>. Однако чаще в последовательности входит несколько групп символов, поэтому для их описания требуется несколько (или даже сотни — в случае китайского ал-
фавита) тегов <range>.
Разобравшись со структурой файла UnicodeTable.xml, приступим к его редактированию. Для начала удалим все ненужные последовательности. Скорее всего, на практике вам понадобятся лишь 6 описанных выше стандартных последовательностей. Возможность же встраивания китайских, японских или тайских символов для нашей страны наверняка избыточна. Поэтому соответствующие теги <glyphRange> из файла UnicodeTable.xml стоит удалить. Выполнив эту операцию, перенумеруйте оставшиеся последовательности.
В списке Specify Ranges нет последовательности, включающей только русские буквы (группа Cyrillic содержит символы для всех кирилличных алфавитов). Имеет смысл такую последовательность создать. Это легко сделать, зная, что русские буквы в Unicode занимают позиции с номерами от 0x0410 до 0x04FF:
<glyphRange name="Russian" id="8"> <range min="0x0410" max ="0x044F"/>
</glyphRange>
Последовательность, в которую будут входить русские и латинские буквы обоих регистров, цифры, знаки пунктуации, можно задать следующим определением:
<glyphRange name="Rus-Eng-Num-Punct" id="9"> <range min="0x0410" max ="0xO44F" /> <range min="0x0020" max ="0x002F" /> <range min="0x0030" max ="0x0039" /> <range min="0x003A" max ="0x0040" /> <range min="0x0041" max ="0xO05A" /> <range min="0x005B" max ="0x0060" /> <range min="0x0061" max ="0x007A" /> <range min="Ox007B" max ="0x007E" />
</glyphRange>
Данная последовательность особенно важна для практики, так как она содержит все символы, которые могут быть введены с клавиатуры русскоязычным пользователем.
Закончив редактировать файл UnicodeTable.xml, не забудьте сохранить его. Изменения в списке Specify Ranges отобразятся после перезагрузки Flash.
•Include these characters. В этой строке можно явно прописать символы, образы которых должны быть включены в фильм. Обычно это служебные символы (ряд Punctuation включает только основные знаки пунктуации) или специфичные для данного поля знаки (например, для табло счета нужно включить все цифры и символ «:»). Сокращенно задавать последовательности символов в строке And these characters подобно тому, как это делается в случае свойства restrict, невозможно.
Чаще всего отдельно от остальных встраивается символ пробела. Да, мы не оговорились. Пробел так же входит в большинство шрифтов, как и любой другой символ. Это связано с тем, что размер пустого пространства, отображаемого на месте символа пробела, не фиксирован и зависит от шрифта, Если пробел не встроить, то и ввести его нажатием кнопки <Space> будет невозможно.
Количество знаков, вводимых в строку Include these characters, не ограничено. Если один и тот же знак встречается во введенном тексте несколько раз, то соответствующий глиф все равно будет встроен единожды. Это позволяет, например, ввести в строку Include these characters весь текст, отображаемый динамическим полем. При этом для него будут встроены лишь реально необходимые для отображения текста символы.
Впрочем, встроить все символы, встречающиеся в тексте поля, можно и проще. Для этого необходимо выделить текст (или нужный участок текста) и нажать затем кнопку Auto Fill панели Character Options. При этом все символы, которыми образован выделенный текст, появятся в стро-