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

Рис. 26.13. Эффект старой фотографии, теперь с фильтрами

Освобождение памяти, занимаемой растровыми изображениями

Каждый пиксел в любом объекте BitmapData занимает небольшое количество системной памяти — 4 байта, если быть точным (один байт для каждого цветового канала). Хотя объем памяти, занимаемой каждым пикселом, сам по себе незначителен, в совокупности пикселы могут приводить к существенному расходованию памяти. Таким образом, чтобы уменьшить объем памяти, потребляемый средой Flash при работе с растровыми изображениями, каждая программа на языке ActionScript должна гарантировать, что все объекты BitmapData, когда в них отпадает необходимость, становятся доступными для сборки мусора.

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

Чтобы немедленно освободить память, занимаемую пикселами объекта BitmapData (вместо того чтобы ожидать освобождения памяти сборщиком мусора), используйте метод экземпляра dispose ( ) класса BitmapData. Например, следующий

код создает объект BitmapData, который занимает 1600 байт (ширина 20 пикселов х высота 20 пикселов х 4 байта на пиксел):

var imgData:BitmapData = new ВтtmapData(20. 20. false. OxFFOOFFOO):

Чтобы немедленно освободить 1600 байт памяти, мы используем метод dispose ( ), как показано в следующем коде:

imgData. dispose( ): // Освобождаем память, занимаемую объектом imgData

Метод dispose ( ) освобождает память, в которой хранится информация о пикселах объекта imgData, но не освобождает память, занимаемую самим объектом imgData. Память, занимаемая объектом imgData, будет освобождена в соответствии с обычным циклом сборки мусора.

Как только над объектом BitmapData будет вызван метод dispose ( ), данный объект окажется недоступным. Обращение к его методам и переменным приведет к генерации исключения ArgumentError.

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

Метод dispose ( ) может быть полезен для управления памятью, потребляемой функциями или циклами, в которых используются временные растровые изображения, как, например, в случае создания изображения с применением фильтров, образующегося путем объединения нескольких временных изображений.

Слова, слова, слова

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

ГЛАВА 27

Отображение и ввод текста

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

Информация, представленная в этой главе, относится конкретно к приложению Flash Player (к автономной версии и к версии, реализованной в виде модуля расширения браузера). Однако в целом эта информация также применима к любой среде выполнения Flash, поддерживающей полнофункциональное отображение и ввод текста, например к приложению Adobe AIR. Стоит отметить, что, в отличие от Flash Player, приложение Adobe AIR обеспечивает полнофункциональную поддержку языка HTML и стилей CSS, аналогичную той, которая присутствует в таких браузерах, как Internet Explorer и Mozilla Firefox. При работе с другими средами выполнения Flash обязательно обращайтесь к соответствующей документации за информацией о поддержке текста.

Основным элементом API для работы с текстом приложения Flash Player является класс TextField, который обеспечивает управление текстом, отображаемым на экране.

* «,

I В этой книге (и во многих источниках по языку ActionScript) термин «текстовое поле» А ч в общем смысле обозначает некоторое текстовое поле на экране и его соответствующий Щ% экземпляр класса TextField языка ActionScript. Тем не менее фраза «объект TextField», в частности, обозначает объект языка ActionScript, который управляет текстовым полем.

Прежде чем приступить к созданию текста и работе с ним, бегло ознакомимся с основными классами API для работы с текстом приложения Flash Player, перечисленными в табл. 27.1. Набор возможностей API для работы с текстом можно разбить на следующие общие категории:

? управление текстом, отображаемым на экране;

? форматирование текста;

? установка параметров отображения текста для модуля FlashType;

? управление шрифтами (например, определение доступных шрифтов);

? получение метрик текста (характеристик);

? предоставление константных значений.

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

В табл. 27.1 приводится краткое описание каждого класса API для работы с текстом. Они разбиты на категории в соответствии с предыдущим списком общих категорий. Все классы API для работы с текстом находятся в пакете flash. text. Стоит отметить, что эта глава является хорошим введением в API для работы с текстом языка

ActionScript, но она не дает исчерпывающего описания всех возможностей данного интерфейса. Интерфейс API для работы с текстом просто огромен. Для дальнейшего изучения познакомьтесь с описанием пакета flash. text в справочнике по языку ActionScript корпорации Adobe. Кроме того, чтобы узнать о дополнительных и более специализированных возможностях управления текстом, рассмотрите применение компонентов Label, Text, Text Area и Text Input, предоставляемых платформой разработки Flex, или компонентов Label, Text Area и Text Input, входящих в состав среды разработки Flash.

Таблица 27.1. Обзор API для работы с текстом

Назначение Класс Описание

Управление текстом, отображаемым на экране TextField Представляет следующие типы текстовых полей. 1. Текстовые поля, создаваемые из кода на языке ActionScript. 2. Текстовые поля типа «динамический текст» или «вводимый текст», создаваемые в среде разработки Flash

StaticText Представляет текстовые поля типа static, создаваемые в среде разработки Flash

TextSnapshot Строка, содержащая текст из всех статических текстовых полей некоторого экземпляра класса DisplayObjectContainer

Форматирование текста Text Format Простой класс данных, представляющий информацию о форматировании символов

Stylesheet Представляет таблицу стилей, содержащую информацию о форматировании символов. Данный класс реализован на основании спецификации Cascading style sheet Level 1 (CSS1) консорциума W3C

Установка параметров отображения текста для модуля FlashType CSMSettings Простой класс данных, используемый для предоставления модулю отображения текста FlashType приложения Flash Player заданных параметров сглаживания для отображения определенного шрифта определенного размера. Применяется вместе со статическим методом set AdvancedAntiAliasingTable() класса TextRenderer

TextRenderer Управляет настройками отображения для модуля FlashType приложения Flash Player

Управление шрифтами Font Предоставляет доступ к списку шрифтов, установленных в системе или внедренных в SWF-файлы, и регистрирует шрифты, загружаемые на этапе выполнения

Получение характеристик текста TextLineMetrics Описывает характеристики для одной строки текста в поле

Предоставление константных значений AntiAliasType, FontStyle, FontType, GridFitType, TextColorType, TextDisplayMode, TextFieldAutoSize, TextFieldType, TextFormatAlign Определяют константы, применяемые для указания различных значений переменных и параметров в API для работы с текстом. Дополнительные сведения можно получить в табл. 27.2

В табл. 27.2 представлен краткий обзор классов API для работы с текстом, которые просто обеспечивают доступ к специальным значениям через константы класса.

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

Таблица 27.2. Классы API для работы с текстом, содержащие константные значения

Назначение Класс Описание

Константы, используемые при выборе модуля отображения текста AntiAliasType Определяет константы, которые описывают типы сглаживания. Применяется вместе с переменной экземпляра antiAliasType класса TextField

Константы, применяемые при установке значений модуля отображения FlashType FontStyle Определяет константы, которые описывают вариации шрифта (например, полужирный, курсив). Применяется вместе со статическим методом setAdvancedAntiAliasingTable() класса TextRenderer и переменной экземпляра fontStyle класса Font

GridFitType Определяет константы, которые описывают типы подбора по сетке элементов растра. Используется с переменной экземпляра grldFitType класса TextField

TextColorType Определяет константы, которые описывают типы цвета текста (темный или светлый). Применяется вместе со статическим методом setAdv ancedAntiAliasingTable() класса TextRenderer

TextDisplayMode Определяет константы, которые описывают типы межпикселного сглаживания. Применяется вместе со статической переменной displayMode класса TextRenderer

Константы, используемые при установке параметров текстовых полей TextFieldAutoSize Определяет константы, которые описывают параметры автоматического изменения размеров. Применяется вместе с переменной экземпляра autoSize класса TextField

TextFieldType Определяет константы, которые описывают типы текстовых полей (dynamic или input). Используется вместе с переменной экземпляра type класса TextField

Константы, используемые при получении списков шрифтов FontType Определяет константы, которые описывают типы местоположений шрифтов (системные или внедренные). Применяется вместе со статическим методом enumerateFonts() класса Font

Константы, используемые при установке выравнивания текста TextFormatAlign Определяет константы, которые описывают типы выравнивания текста (то есть по центру, по левому краю, по правому краю или по ширине). Применяется вместе с переменной экземпляра align класса TextFormat

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

Создание и отображение текста

Чтобы отобразить текст с помощью ActionScript, мы сначала создаем объект TextField. Этот объект представляет прямоугольный текстовый контейнер, который может отображаться на экране и заполняться форматированным текстом

через код или пользовательский ввод. Например, следующий код создает объект TextField и присваивает его переменной t:

var t:TextField = new TextFieldC );

После создания объекта TextField мы используем переменную экземпляра text класса TextField, чтобы указать текст для отображения на экране. Например, после выполнения следующего кода объект t будет выводить текст Hello world: t. text = «Hello world»;

Наконец, для того, чтобы показать текстовое поле на экране, мы передаем объект TextField в метод addChild ( ) или addChildAt ( ) любого объекта DisplayOb j ectContainer, который на настоящий момент находится в списке отображения. Например, если предположить, что объект некийКонтейнер находится в списке отображения, следующий код приведет к отображению текстового поля t на экране: некийКонтейнер. addChi1d(t):

В листинге 27.1 предыдущий код представлен в контексте демонстрационного класса HelloWorld. Обратите внимание, что в этом коде мы импортируем класс TextField (вместе с остальными классами в пакете flash, text) перед его использованием.

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

Листинг 27.1. Отображение текста

package { import flash. display.*;

import flash. text.*: // Импортируем класс TextField и другие классы, // размещенные в пакете flash. text

public class HelloWorld extends Sprite { public function HelloWorld ( ) { // Создаем объект TextField var t:TextField = new TextField( );

// Указываем текст для отображения t. text = «Hello world»:

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

}

}

}

Результат выполнения кода из листинга 27.1 проиллюстрирован на рис. 27.1. Текст показан в том виде, в котором он по умолчанию отображается в операционной системе Windows ХР (шрифты и форматирование будут рассмотрены далее в этой главе).

Hello world Рис. 27.1. Текстовое поле

Хотя на предыдущем рисунке показан текст в текстовом поле, на нем не видна прямоугольная область отображения поля. По умолчанию она имеет размеры 100 пик-

селов по ширине и высоте. Рисунок 27.2 представляет измененную версию рис. 27.1, в которой изображена штриховая линия, представляющая прямоугольную область отображения текстового поля.

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

‘Hello world» ~ 1

Рис. 27.2. Текстовое поле и его прямоугольная область отображения

Ширина и высота прямоугольной области отображения текстового поля могут быть указаны явно с помощью переменных экземпляра width и height класса TextField. Например, следующий код устанавливает для прямоугольной области отображения объекта t ширину, равную 200 пикселам, и высоту, равную 50 пикселам:

t. width = 200; t. height = 50:

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

«Hello world» «

1 I

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

По умолчанию прямоугольная область отображения поля не показывается на экране. Тем не менее мы можем сделать ее видимой, присвоив одной или обеим переменным экземпляра background и border класса TextField значение true. Переменная background определяет, требуется ли заливка прямоугольной области отображения текстового поля сплошным цветом, а переменная border указывает, нужно ли показывать линию толщиной 1 пиксел вокруг прямоугольной области отображения текстового поля. Цвет фона и границы задаются путем присваивания 24-битных значений RGB-цвета переменным backgroundColor и borderColor.

В листинге 27.2 представлен наш обновленный класс HelloWorld, который делает видимой прямоугольную область отображения объекта t с помощью границы темно-серого цвета и фона светло-серого цвета. Новый код выделен полужирным шрифтом.

Листинг 27.2. Отображение текста с границей и фоном

package { import flash. display.*;

import flash. text.*; // Импортируем класс TextField и другие классы, // размещенные в пакете flash. text

var t:TextField = new TextField( ); // Создаем объект TextField t. text = «Hello world»: // Указываем текст

// для отображения t. background = true; // Включаем отображение фона

t. backgroundColor = OxCCCCCC; // В качестве цвета фона указываем

// светло-серый цвет t. border = true; // Включаем отображение границы

t. borderColor = 0×333333; // В качестве цвета границы указываем

// темно-серый цвет

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

Результат выполнения кода из листинга 27.2 показан на рис. 27.4.

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

Hello world

Рис. 27.4. Текстовое поле с границей и фоном

Перенос слов

По умолчанию, когда ширина текста в текстовом поле оказывается больше ширины прямоугольной области отображения этого текстового поля, текст, выходящий за пределы данной области, теряется из виду. Например, следующий код в качестве текста объекта t присваивает строку, ширина которой превышает 100 пикселов при использовании шрифта по умолчанию в операционной системе Windows ХР:

t. text = «Hello world, how are you?»: Результат продемонстрирован на рис. 27.5.

Hello world, how ar

Рис. 27.5. Текст, выходящий за границы, не отображается на экране

Чтобы предотвратить скрытие текста, ширина которого оказывается больше ширины прямоугольной области отображения текстового поля, мы можем включить возможность автоматического добавления разрывов строк в текстовом поле, присвоив переменной экземпляра wordwrap класса TextField значение true. Когда

возможность автоматического добавления разрывов строк включена, происходит мягкий перенос длинных строк текста, то есть любая строка, ширина которой оказывается больше ширины прямоугольной области отображения данного текстового поля, будет автоматически перенесена на следующую строку. Например, следующий код включает возможность автоматического добавления разрывов строк для объекта TextField t:

t. wordwrap = true;

Результат продемонстрирован на рис. 27.6.

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

Hello world, how are you?

Рис. 27.6. Автоматическое добавление разрывов строк

Перенос слов является всего лишь свойством отображения. В тех местах, где переносится исходный текст, никакие символы возврата каретки или новой строки не добавляются. Если переменной wordwrap присвоено значение true, изменение значения переменной width текстового поля приведет к тому, что мягкий перенос будет происходить в другом месте (то есть изменится размещение текста). Жесткие переносы могут быть добавлены в текстовое поле с помощью служебной последовательности » \п» или тега

в тексте HTML (использование разметки HTML в текстовых полях мы рассмотрим далее, в разд. «HTML-форматирование текста»).

1 Не путайте переменную wordwrap с переменной multiline (рассматривается далее, & л ч в разд. «HTML-форматирование текста» и «Ввод через текстовые поля»). Переменная S-Jyj multiline влияет на возможность разметки HTML и пользовательского ввода вызывать разрывы строк, а переменная wordwrap определяет, должна ли среда выполнения Flash осуществлять автоматический перенос строк.

Автоматическое изменение размеров

Чтобы прямоугольная область отображения текстового поля автоматически изменяла свои размеры в соответствии с размером текста в текстовом поле, мы используем переменную экземпляра autoSize класса TextField. Если переменной autoSize присвоить любое значение, отличное от значения TextFieldAutoSize. NONE (установлено по умолчанию), размер текстового поля всегда будет достаточным для отображения текста, присваиваемого этому полю.

^ 1 Переменная autoSize перекрывает любые абсолютные размеры, задаваемые через пе-

ременные height и width объекта TextField.

Переменная autoSize может принимать одно из следующих четырех возможных значений: TextFieldAutoSize. NONE, TextFieldAutoSize. LEFT, TextFieldAutoSize. RIGHT и TextFieldAutoSize. CENTER. Они определяют направление, в котором текстовое поле должно расширяться или сужаться, чтобы соответствовать размерам присвоенного ему текста.

Если переменной autoSize присвоено значение NONE, то размеры текстового поля остаются фиксированными. Если переменной присвоено значение LEFT, то левая граница текстового поля фиксируется, а правая — перемещается. Если переменной присвоено значение RIGHT, то правая граница текстового поля фиксируется, а левая — перемещается. Если же переменной присвоено значение CENTER, то происходит равномерное перемещение левой и правой границ текстового поля. В последних трех случаях, когда происходит перенос строк или встречаются твердые разрывы строк, нижняя граница текстового поля также перемещается для размещения нескольких строк текста.

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

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

Листинг 27.3. Перемещаемые правая и нижняя границы

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

public class HelloWorld extends Sprite { public function HelloWorld ( ) { var t:TextField = new TextField( ); t. text = «Hello world, how are you?»: t. background = true; t. backgroundColor = OxCCCCCC; t. border = true: t. borderColor = 0×333333;

// Прямоугольная область отображения объекта t // будет автоматически изменять свои размеры, // чтобы вместить значение переменной t. text. t. autoSize = TextFieldAutoSize. LEFT;

addChild(t);

}

}

}

Результат выполнения кода из листинга 27.3 показан на рис. 27.7. Сравните его с рис. 27.5, на котором было изображено текстовое поле, не использующее ни возможность автоматического изменения размеров, ни возможность переноса слов.

Hello world, how are you?

Рис. 27.7. Перемещаемые правая и нижняя границы

Теперь предположим, что мы добавили разрыв строки в текст объекта t, как показано в следующем коде (разрыв строки вставляется с помощью последовательности символов f,\nff):

t. text = «Hello world.» + «\n» + «How are you?»;

На рис. 27.8 показано результирующее текстовое поле. Обратите внимание, что среда выполнения Flash автоматически изменяет размеры прямоугольной области отображения поля, чтобы полностью вместить текст, путем перемещения ее левой и нижней границ.

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

Hello world. How are you?

Рис. 27.8. Перемещаемые правая и нижняя границы, с разрывом строки

Если переменной wordwrap присвоить значение true, а переменной autoSize — любое значение, отличное от значения TextFieldAutoSize. NONE, нижняя граница текстового поля будет автоматически перемещаться вниз или вверх, но при этом его левая, правая и верхняя границы будут оставаться в исходном положении. Этот код продемонстрирован в листинге 27.4 — в нем создается текстовое поле с перемещаемой нижней границей.

Листинг 27.4. Перемещаемая нижняя граница

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

public class HelloWorld extends Sprite { public function HelloWorld ( ) { var t:TextField = new TextField( ); t. text = «Hello world, how are you?»; t. background = true; t. backgroundColor = OxCCCCCC; t. border = true; t. borderColor = 0×333333;

// Вместе две следующие строки кода делают нижнюю границу объекта t // автоматически перемещаемой для размещения значения переменной // t. text.

t. autoSize = TextFieldAutoSize. LEFT; t. wordwrap = true;

addChild(t);

}

}

}

Результат выполнения кода из листинга 27.4 показан на рис. 27.9. Обратите внимание, что ширина прямоугольного отображаемого контейнера зафиксирована и составляет 100 пикселов (по умолчанию), а для размещения текста с переносами перемещается нижняя граница.



Полезные ссылки
Случайные записи
  • 19.03.2011">Руководство по actionscript. часть 2, стр. 103
  • 04.09.2011">Создаем шапку для сайта с помощью программы XHEADER
  • 25.02.2011">Руководство по actionscript. часть 6, стр. 078
  • 10.03.2011">Руководство по actionscript. часть 4, стр. 042
  • 08.04.2012">В Почте Mail.Ru стало удобнее работать с вложениями
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 099
  • 24.02.2011">Руководство по actionscript. часть 7, стр. 015
  • 04.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.5
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 053
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.83
  • 18.03.2011">Руководство по actionscript. часть 2, стр. 128
  • 08.03.2011">Руководство по actionscript. часть 4, стр. 093
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.65
  • 25.02.2011">Руководство по actionscript. часть 6, стр. 081
  • 12.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.107
Опрос

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

View Results

Loading ... Loading ...