Руководство по actionscript. часть 5, стр. 118

Когда установлен флажок Bitmap text (Растровый текст), при вычислении начертаний символов компилятор связывает фигуры с целыми пикселами. В результате для каждого символа указанного размера образуется четкая векторная фигура без сглаживания. Чтобы добиться наилучших результатов при использовании параметра Bitmap text (Растровый текст), размер шрифта, устанавливаемый для текста, который форматируется с помощью встраиваемого шрифта, должен всегда равняться размеру шрифта, указываемому в окне Font Symbols Properties (Свойства символа шрифта). Кроме того, избегайте масштабирования текста, к которому применяется форматирование с использованием встраиваемого шрифта.

В приложении Flex Builder 2 и компиляторе mxmlc параметр Bitmap text (Растровый текст) отсутствует.

Встраивание начертаний шрифта в приложении Flex Builder 2 и компиляторе mxmlc

Для встраивания начертаний шрифта в проект ActionScript приложения Flex Builder 2 или с помощью консольного компилятора mxmlc мы используем тег метаданных [Embed]. Чтобы использовать его, мы должны предоставить компилятору доступ к библиотеке flex. s wc, поддерживающей компилятор Flex. По умолчанию все проекты приложения Flex Builder 2 автоматически включают местоположение файла flex. swc в список путей к библиотекам языка ActionScript, поэтому

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

Элементы, встраиваемые с помощью тега метаданных [Embed], включая шрифты, могут быть встроены как на уровне переменной, так и на уровне класса. Тем не менее встраивание шрифта на уровне переменной более удобно, чем встраивание шрифта на уровне класса, поэтому шрифты редко встраиваются на уровне класса.

^ I Дополнительную информацию о теге метаданных [Embed] можно найти в гл. 28.

Обобщенный код, необходимый для встраивания шрифта на уровне переменной в проекте ActionScript приложения Flex Builder 2 или с помощью компилятора mxmlc, выглядит следующим образом:

[Embed(source=" путьКШрифту",

fontFami^y="имяШpифтa")] private var имяКласса:Class:

В приведенном коде, который должен размещаться в теле класса, путьКШрифту обозначает путь к файлу шрифта в локальной файловой системе, имяШрифта — произвольное имя, по которому можно будет обращаться к шрифту из приложения, а имяКласса — имя переменной, которая будет ссылаться на класс, представляющий встроенный шрифт. Этот класс применяется только при загрузке шрифтов на этапе выполнения, как станет известно далее из подразд. «Загрузка шрифтов на этапе выполнения».

Руководство по actionscript. часть 5, стр. 119

Например, следующий код демонстрирует, как встроить начертания шрифта Verdana в операционную систему Windows ХР. Обратите внимание, что в значении путьКШрифту должны использоваться прямые слэши, но при этом оно не чувствительно к регистру символов.

[Embed(source="c:/wi ndows/fonts/verdana. ttf",

fontFamily="Verdana")] private var verdana:Class;

При выполнении предыдущего кода среда Flash автоматически генерирует класс, представляющий элемент встроенного шрифта, и присваивает этот класс переменной verdana.

Тег метаданных [Embed] может применяться только для шрифтов TrueType.

В простых случаях код, который встраивает шрифт, находится в том же классе, который использует этот шрифт для форматирования текста. Это демонстрирует листинг 27.11, в котором представлен простой класс HelloWorldVerdana, отображающий текст «Hello world», отформатированный с помощью встроенного шрифта (более подробно о форматировании текста с помощью встраиваемых шрифтов мы узнаем в следующем разделе).

Листинг 27.11. Отображение Hello World с использованием шрифта Verdana

package { import flash. display.*; import flash. text.*;

public class HelloWorldVerdana extends Sprite { // Встраиваем шрифт Verdana [Embed(source="c:/windows/fonts/verdana. ttf",

fontFami1y^"Verdana")] private var verdana:Class;

public function HelloWorldVerdana ( ) { var t:TextField = new TextField( ); t. embedFonts = true;

// Форматируем текст с помощью шрифта Verdana

t. htmlText = «Hellо world»;

addChild(t);

}

}

}

В более сложных приложениях, использующих множество встраиваемых шрифтов, за встраивание всех шрифтов обычно отвечает один центральный класс — благодаря этому происходит отделение кода, отвечающего за встраивание шрифта, от кода, осуществляющего форматирование текста. Это демонстрирует листинг 27.12, в котором представлено два класса: FontEmbedder, отвечающий за встраивание шрифта, и HelloWord — основной класс, форматирующий текст с помощью шрифта, встроенного через класс FontEmbedder. Обратите внимание, что класс HelloWorld по необходимости создает ссылку на класс FontEmbedder, заставляя класс FontEmbedder и все его шрифты скомпилироваться в SWF-файл.

Руководство по actionscript. часть 5, стр. 120

Листинг 27.12. Централизованное встраивание шрифтов

// Класс FontEmbedder package {

// Встраивает шрифты для данного приложения public class FontEmbedder {

[Embed(source="c:/windows/fonts/verdana. ttf", fontFamily="Verdana")]

private var verdana:Class;

}

}

// Класс HelloWorld package {

import flash. display.*;

import flash. text.*;

public class HelloWorld extends Sprite { // Создаем ссылку на класс, который встраивает шрифты для данного // приложения. Эта ссылка заставляет скомпилировать класс // и, соответственно, его шрифты в SWF-файл. FontEmbedder;

public function HelloWorld ( ) { var t:TextField = new TextField( ); t. embedFonts = true;

t. html Text = «Hellо world»; addChild(t);

}

}

}

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

Руководство по actionscript. часть 5, стр. 121

Листинг 27.13. Встраивание шрифта на уровне класса // Класс, встраивающий шрифт

package { import flash. display.*; import mx. core. FontAsset;

[Embed(source="c:/windows/fonts/verdana. ttf", fontFamily="Verdana")]

public class Verdana extends FontAsset {

}

}

// Класс, использующий встроенные шрифты

package { import flash. display.*; import flash. text.*;

public class HelloWorld extends Sprite { // Создаем ссылку на класс, который встраивает шрифты для данного // приложения. Эта ссылка заставляет скомпилировать класс // и, соответственно, ‘его шрифты в SWF-файл. Verdana;

// Конструктор

public function HelloWorld ( ) { var t;TextField = new TextField( ); t. embedFonts = true;

t. html Text = «Hellо world»; addChild(t);

}

Стоит отметить, что из-за ошибки в приложении Flex Builder 2 и компиляторе mxmlc для шрифтов, встраиваемых с помощью синтаксиса тега [Embed], нельзя использовать кернинг. Тем не менее он может быть использован для шрифтов, встраиваемых с помощью среды разработки Flash. Если кернинг необходимо применять в приложении, скомпилированном с помощью приложения Flex Builder 2 или компилятора mxmlc, встройте желаемый шрифт в SWF-файл с помощью среды разработки Flash, а затем загрузите этот шрифт динамически (дополнительные сведения можно получить в подразд. «Загрузка шрифтов на этапе выполнения»).

Руководство по actionscript. часть 5, стр. 122

Теперь, когда мы узнали, как встраивать шрифты с помощью среды разработки Flash и тега метаданных [Embed], рассмотрим вопросы форматирования текста с использованием встраиваемых шрифтов.

Форматирование текста с помощью встраиваемого шрифта

Чтобы отформатировать некоторый объект TextField с помощью встраиваемых шрифтов, мы должны сначала присвоить переменной embedFont s данного объекта значение true. Когда это сделано, приложение Flash Player знает, что при отображении содержимого данного текстового поля необходимо использовать встраиваемые шрифты. Это демонстрирует следующий код:

// Создаем объект TextField

var t:TextField = new TextField( );

// Говорим приложению Flash Player использовать встраиваемые шрифты // при отображении содержимого объекта t t. embedFonts = true;

^ I Само по себе присваивание переменной embedFonts значения true не вызывает добавив л п ления никаких шрифтов в SWF-файл. Эта операция просто означает, что текстовое поле ц# должно отображаться с помощью встраиваемых шрифтов, если они доступны.

Переменная embedFonts должна устанавливаться по отдельности для каждого текстового поля, использующего конкретный шрифт, даже если один и тот же шрифт применяется для нескольких полей. Тем не менее, когда несколько полей используют один и тот же встраиваемый шрифт, размер файла не увеличивается — вместе с SWF-файлом загружается всего одна копия шрифта.

Присвоив переменной embedFonts объекта TextField значение true, мы устанавливаем шрифт для текстового поля, используя переменную экземпляра font класса TextFormat, атрибут face тега или свойство fontFamily языка CSS, как было рассмотрено ранее в разд. «Форматирование текстовых полей». Например:

// Устанавливаем шрифт с помощью объекта TextFormat

var format:TextFormat = new TextFormat( );

format. font = «названиеШрифта»;

var t:TextField = new TextField( );

t. embedFonts = true;

t. defaultTextFormat = format;

t. text = «hello world»;

// Устанавливаем шрифт с помощью разметки HTML var t:TextField = new TextField( ); t. embedFonts = true;

t. htmlText = «Hel1 о world»;

// Устанавливаем шрифт с помощью языка CSS var styleSheet:StyleSheet = new StyleSheet( ); var pStyle:Object = new Object( ); pStyle. fontFamily = «названиеШрифта»;

styleSheet. setStylе(«р», pStyle); var t:TextField = new TextField( ); t. embedFonts = true;

t. styleSheet = stylesheet; // Присваиваем значение переменной stylesheet

// до того, как будет присвоено значение // переменной htmlText!

t. htmlText = »

Hello world

«;

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

Руководство по actionscript. часть 5, стр. 123

Для шрифтов, встраиваемых с помощью тега метаданных [Embed], названиеШрифта должно соответствовать строковому значению, указываемому для параметра fontFamily тега [Embed], который применяется для встраивания шрифта.

Для шрифтов, встраиваемых с помощью среды разработки Flash, названиеШрифта должно соответствовать названию, выбранному в списке Font (Шрифт) окна Font Symbol Properties (Свойства символа шрифта), которое используется для встраивания шрифта (см. описание шага 3 в подразд. «Встраивание начертаний шрифта в среде разработки Flash»). Для шрифтов, которые встраиваются при установленном флажке Bitmap text (Растровый текст), названиеШрифта должно соответствовать следующему шаблону:

названиеВСпискеШрифт_размерШрифтар1_кодВариации

В этом шаблоне названиеВСпискеШрифт — название, выбранное в списке Font (Шрифт) окна Font Symbol Properties (Свойства символа шрифта), размерШрифта — размер шрифта, установленный в окне Font Symbol Properties (Свойства символа шрифта), а код-Вариации — одно из значений st (обычный), b (полужирный), i (курсив) или bi (полужирный курсив), соответствующее выбранной вариации шрифта в окне Font Symbol Properties (Свойства символа шрифта).

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

В табл. 27.8 приведено несколько примеров предыдущего шаблона названиеШрифтау который должен применяться при установленном флажке Bitmap text (Растровый текст).

Таблица 27.8. Примеры шаблона, применяемого при установленном флажке Bitmap text (Растровый текст)

Название в списке Font (Шрифт) Вариация шрифта Размер шрифта Пример значения названиеШрифта

Verdana Обычный 12 Verdana_12pt_st

Verdana Полужирный 12 Verdana_12pt_b

Verdana Курсив 12 Verdana_12pt_i

Verdana Полужирный курсив 12 Verdana_12pt_bi

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

Руководство по actionscript. часть 5, стр. 124

Использование полужирного начертания и курсива со встраиваемыми шрифтами. Чтобы использовать вариации шрифта полужирного начертания, курсива или полужирного курсива в объекте TextField, переменной embedFonts которого присвоено значение true, мы должны встроить эти вариации по отдельности. Например, если мы используем вариации шрифта Arial полужирного начертания, курсива и полужирного курсива в объекте TextField, переменной embedFonts которого присвоено значение true, мы должны встроить все три вариации шрифта Arial.

Каждой вариации шрифта, встраиваемой с помощью среды разработки Flash, должно быть присвоено уникальное имя класса в окне Font Symbol Properties (Свойства символа шрифта). Подобным образом, название каждой вариации шрифта, встраиваемой с помощью тега метаданных [Embed], должно соответствовать имени ее собственной переменной (для шрифтов, встраиваемых на уровне переменной) или класса (для шрифтов, встраиваемых на уровне класса). Более того, каждая вариация некоторого шрифта должна указывать одно и то же значение для параметра fontFamily тега [Embed] и использовать соответствующий параметр вариации шрифта (либо fontWeight, либо fontStyle), чтобы определить встраиваемую вариацию.

Например, следующий код встраивает вариации шрифта Verdana полужирного начертания и курсива. Для вариации шрифта полужирного начертания переменной fontFamily присваивается значение «Verdana», а переменной fontStyle — значение » italic». Обратите внимание, что параметр источник для каждой инструкции встраивания обозначает местоположение файла шрифта, содержащего подходящую вариацию шрифта (verdanab. tt f и verdanai. tt f соответственно).

[Embed(source="c:/windows/fonts/verdanab. ttf",

fontFamily="Verdana",

fontWeight="bold")] private var verdanaBold:Class;

[Embed(source="c:/windows/fonts/verdanai. ttf",

fontFamily="Verdana",

fontStyle="italic")] private var verdanaItalic:Class;

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

Листинг 27.14. Встраивание нескольких вариаций шрифта

// Класс, встраивающий шрифт

package { public class FontEmbedder {

// Встраиваем вариацию обычного начертания [Embed(source="c:/wi ndows/fonts/verdana. ttf",

fontFamily="Verdana")] private var verdana:Class;

// Встраиваем вариацию полужирного начертания [Embed(source="c:/windows/fonts/verdanab. ttf",

fontFamily="Verdana",

fontWeight="bold")] private var verdanaboldiClass;

}

// Класс, использующий встроенные шрифты

package { import flash. display.*; import flash. text.*;

public class HelloWorld extends Sprite { // Заставляет скомпилировать класс FontEmbedder и, соответственно, // его шрифты в SWF-файл. FontEmbedder;

public function HelloWorld ( ) { var t:TextField = new TextField( ); t. embedFonts = true;

// Используем две вариации шрифта Verdana (обычного и полужирного // начертания)

t. htmlText = «Hellо World«; addChild(t);

}

}

}

Загрузка шрифтов на этапе выполнения

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

Руководство по actionscript. часть 5, стр. 125

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

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

Чтобы загрузить шрифты на этапе выполнения, повторите следующие обобщенные шаги.

1. Встройте шрифт (-ы) в SWF-файл (с помощью методик, описанных ранее в подразд. «Встраивание начертаний шрифта в среде разработки Flash» и «Встраивание начертаний шрифта в приложении Flex Builder 2 и компиляторе mxmlc»).

2. В SWF-файле, содержащем встроенный шрифт, используйте статический метод registerFont ( ) класса Font, чтобы добавить шрифт в глобальный список шрифтов.

3. Загрузите SWF-файл со встроенным шрифтом.

Применим перечисленные шаги на примере. Мы начнем с создания SWF-файла Fonts, swf, который встраивает шрифт Verdana (обычного и полужирного начертания) с помощью тега метаданных [Embed]. Рассмотрим код для основного класса приложения Fonts. swf:

package { import flash. display.*; import flash. text.*;

// Встраивает шрифты для использования в любом SWF-файле,

// загрузившем этот файл

public class Fonts extends Sprite {

[Embed(source="c:/wi ndows/fonts/verdana. ttf". fontFamily="Verdana")]

private var verdana:Class;

[Embed(source="c:/windows/fonts/verdanab. ttf",

fontFamily="Verdana",

fontWeight="bold")] private var verdanaBold:Class;

}

}

Теперь мы должны добавить наши встраиваемые шрифты в глобальный список шрифтов. Для этого мы используем статический метод registerFont ( ) класса Font, который принимает единственный параметр font. В качестве параметра font передается ссылка на класс Font, который представляет шрифт, добавляемый в глобальный список шрифтов. Как только шрифт будет добавлен, он может быть использован любым’ SWF-файлом, выполняющимся в приложении Flash Player.

Руководство по actionscript. часть 5, стр. 126

В предыдущем коде классы, представляющие две вариации шрифта Verdana, присваиваются переменным verdana и verdanaBold. Таким образом, чтобы добавить эти шрифты в глобальный список шрифтов, мы передаем значения этих переменных в метод registerFont ( ), как показано в следующем коде:

Font. regi sterFont(verdana); Font. regi sterFont(verdanaBold);

Чтобы гарантировать, что шрифты будут добавлены в глобальный список шрифтов сразу после их загрузки, мы вызываем метод regi sterFont ( ) внутри конструктора класса Fonts, как показано в следующем коде:

package { import flash. display.*; import flash. text.*;

// Встраивает шрифты для дальнейшего использования любым SWF-файлом,

// загрузившим этот файл

public class Fonts extends Sprite {

[Embed(source="c:/windows/fonts/verdana. ttf", fontFamily="Verdana")]

private var verdana:Class;

[Embed(source="c:/windows/fonts/verdanab. ttf",

fontFamily="Verdana",

fontWeight="bold")] private var verdanaBold:Class;

// Конструктор

public function Fonts ( ) {

// Регистрируем встроенные шрифты этого класса

// в глобальном списке шрифтов

Font. regi sterFont(verdana);

Font. regi sterFont(verdanaBold);

}

}

}

Если бы мы встраивали наши шрифты с помощью символов Font среды разработки Flash, нам бы пришлось добавить предыдущие вызовы метода registerFont ( ) в первый кадр основной временной шкалы, а в метод registerFont ( ) мы бы передавали имя класса шрифта, указываемое в поле Class (Класс) окна Linkage Properties (Свойства связывания) для каждого встраиваемого символа Font (обратитесь к описанию шага 8 в подразд. «Встраивание начертаний шрифта в среде разработки Flash»).

Руководство по actionscript. часть 5, стр. 127

После этого мы компилируем файл Fonts. swf и загружаем его на этапе выполнения с помощью класса Loader. Сразу после завершения загрузки файла Fonts. swf его шрифты могут быть использованы любым другим SWF-файлом, выполняющимся в приложении Flash Player. В листинге 27.15 представлен пример класса, который загружает и затем использует шрифты, встроенные в файл Fonts. swf.

1 Исчерпывающую информацию о загрузке SWF-файлов можно найти в гл. 28.

нГ 4 .

Листинг 27.15. Использование загруженных шрифтов

package { import flash. display.*; import flash. text.*;

import flash. events.*; import flash. net.*;

f

// Этот класс демонстрирует, как форматировать текст с помощью загруженных // шрифтов. Сами шрифты встроены в файл Fonts. swf, представленный ранее, public class HelloWorld extends Sprite { public function HelloWorld ( ) {

// Загружаем SWF-файл, содержащий встроенные шрифты

var loader:Loader = new Loader( );

loader. contentLoaderInfo. addEventListener(Event. INIT, initListener); 1oader.1oad(new URLRequest(«Fonts. swf»));

}

// Выполняется после завершения инициализации файла Fonts. swf, когда // его шрифты будут доступны для использования private function initListener (e:Event):void {

// Для отладочных целей отображаем все доступные встроенные шрифты

showEmbeddedFonts( );

// Шрифт был загружен, поэтому теперь отображаем // отформатированный текст outputMsg( );

}

// Отображаем текст, отформатированный с использованием

// встроенных шрифтов

private function outputMsg ( ):void {

// Создаем текстовое поле

var t:TextField = new TextField( );

t. embedFonts = true; // Говорим среде выполнения Flash отображать это

// текстовое поле с помощью встроенных шрифтов // Используем две вариации шрифта Verdana (обычного и полужирного // начертания)

t. htmlText = «Hel1 о World«;

// Добавляем текстовое поле в список отображения addChild(t);

}

// Выводит список доступных на настоящий момент встроенных шрифтов public function showEmbeddedFonts ( ):void { trace(«========Embedded Fonts========»);

var fonts-.Array = Font. enumerateFonts( ); fonts. sortOn(«fontName». Array. CASEINSENSITIVE); for (var i:int = 0; i < fonts.length; i++) { trace(fonts[i].fontname + ", " + fonts[i].fontstyle);

}

}

^ I Многие браузеры кэшируют SWF-файлы, поэтому для приложений, состоящих из нем?; j „ скольких SWF-файлов, можно добиться снижения общего времени загрузки, загружая шрифты из одного SWF-файла на этапе выполнения.



Полезные ссылки
Случайные записи
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 117
  • 27.08.2010">Атрибуты .
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 113
  • 15.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.58
  • 27.07.2011">Флористы – художники от мира цветов
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 003
  • 27.07.2011">Швейцарские часы – эталон качества
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 024
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 119
  • 28.02.2011">Руководство по actionscript. часть 6, стр. 014
  • 14.03.2011">Руководство по actionscript. часть 3, стр. 069
  • 19.07.2010">Тестируем сайт правильно
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.109
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.31
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.131
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...