На практике ни одна игра не обходится без вывода текста. Специфика игр предъявляет особые требования к шрифтам. Они должны соответствовать общему дизайну игры. Symbian OS предоставляет в распоряжение программиста набор стандартных фонтов. Однако, Вы всегда можете создать и использовать собственный шрифт на основе растрового изображения. В системе, как правило, существует не более одного экземпляра каждого шрифта. Это связано с необходимостью экономии памяти телефона.


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

  • Создать объект CFont, запрашивающий шрифт с заданными параметрами у устройства (CGraphicsDevice::GetNearestFontInTwips).
  • Прежде чем приступить к выводу текста, установите графический контекст на заданный фонт. (CWindowGc::UseFont)
  • Если фонт вам не понадобится долгое время, освободите память, вызвав CGraphicsDevice::ReleaseFont. Перед освобождением шрифт должен быть отключен от графического контекста (CWindowGc::DiscardFont).

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

void CMyGameView::Draw(const TRect&/*aRect*/)const
{
CWindowGc& gc= SystemGc();
// Выбираем самый маленький фонт Arial
_LIT(KMyFontName,"Arial");
CFont* myFont;
TFontSpec myFontSpec(KMyFontName,1);
CGraphicsDevice* screenDevice= iCoeEnv->ScreenDevice();
screenDevice->GetNearestFontInTwips(myFont,myFontSpec);
// Используем новый шрифт
gc.UseFont(myFont);
// Выводим текст
_LIT(KMyText,"My text");
gc.DrawText(KMyText, TPoint(40,40));
// Отключаем и освобождаем фонт
gc.DiscardFont();
screenDevice->ReleaseFont(myFont);
}

На практике фонт обычно создается в ConstructL, а отключается и освобождается в деструкторе.

TFontSpec определяет параметры шрифта:

  • Высоту
  • Тип шрифта -TTypeFace (например “Roman”, “Courier”).
  • Стиль шрифта и его положение - TFontStyle (наклонный - italic, толстый -bold, положение - subscript, superscript).

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

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

Чтобы узнать, какие типы шрифтов доступны, можно использовать CGraphicsDevice::NumTypeFaces, возвращающий число типов, и CGraphicsDevice::TypeFaceSupport - для получения информации о конкретном шрифте.

void CMyGameView::ListMyFontsL()
{
// Определяем число доступных типов шрифтов
TInt iNumTypefaces= iCoeEnv->ScreenDevice()->NumTypefaces();
// Выводим название каждого типа
TBuf<64> myFontName;
TBuf<128> text;
for(TInt t=0; t< iNumTypefaces; t++)
{
// Получаем название шрифта
TTypefaceSupport myTypefaceSupport;
iCoeEnv->ScreenDevice()->TypefaceSupport(myTypefaceSupport, t);
myFontName= myTypefaceSupport.iTypeface.iName.Des();
_LIT(KMyText,"Font%d/%d:");
text.Format(KMyText, t, iNumTypefaces);
iEikonEnv->InfoWinL(text, myFontName);
}
}

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

Вы также можете создать новый Symbian OS фонт, используя API. Чтобы это сделать необходимо:

  1. Создать файл-определение шрифта, например MyFont.gd.
  2. Создать Adobe BDF (Bitmap Distribution Format) font bitmaps; например MyFont.bdf.
  3. Описать недостающие Symbian OS свойства для BDF файла.
  4. Использовать утилитуfnttran для создания файла Symbian OS шрифта. Например, для создания шрифта MyFont.gdr необходимо выполнить:fnttran MyFont.bdf MyFont.gd MyFont.gdr.
  5. Скопировать созданный файл *.gdr в папку \system\fonts устройства, определив файл шрифта в pkg при создании инсталляционного пакета. (Для использования шрифта на эмуляторе достаточно скопировать его в папку fonts.)

Приведем пример файла-описания шрифта (MyFont.gd):

Typeface tf_MyFont
Name"My Font" Proportional
FontBitmaps
MyFont// Название шрифта в BDF файле
EndFontBitmaps
EndTypeface
 
FontStoreFile
CollectionUid123456789// Uid шрифта (должен быть уникальным)
KPixelAspectRatio1000
CopyrightInfo
"MyCopyrightInfo"
EndCopyrightInfo
Typefaces
tf_MyFont
EndTypefaces
EndFontStoreFile
 

Формат BDF широко распространен. Существует большое количество различных утилит, предназначенных для создания шрифтов. BDF файл можно создать из Windows bitmaps или специального редактора.

После создания BDF файл обычно требует некоторой модификации. Между словами STARTPROPERTIES и ENDPROPERTIES должны быть определены следующие свойства:

  • Uiduid (не тот же, что в CollectionUid.)
  • MaxNormalWidthwidth.
  • MaxConsecutiveFillCharsmax.
  • Bold[1/0].
  • Italic[1/0].
  • FONTASCENTascent.
  • FONTDESCENTdescent.

Обычно приходится вводить вручную Uid и MaxNormalWidth. Если какое-либо из свойств пропущено, fnttran сообщит об этом.

После того как новый шрифт создан и скопирован в папку \system\fonts, его можно использовать как обычный системный шрифт.

CFont* CMyGameView::GetMyOwnFont()
{
_LIT(KMyFontName,"MyFont");
CFont* myFont;
TFontSpec myFontSpec(KMyFontName,1);
CGraphicsDevice* screenDevice= iCoeEnv->ScreenDevice();
screenDevice->GetNearestFontInTwips(myFont,myFontSpec);
return myFont;
}

Шрифт можно скопировать на любой диск (C:\system\fonts, E:\system\fonts), после этого необходимо произвести мягкую перезагрузку устройства. Можно установить шрифт динамически, использовав CWsScreenDevice::AddFile в своей программе. Это позволяет использовать шрифт без перезагрузки.


Перевод:aRix




Наши соцсети

Подписаться Facebook Подписаться Вконтакте Подписаться Twitter Подписаться Google Подписаться Telegram

Популярное

Ссылки

Новости [1] [2] [3]... Android/ iOS/ J2ME[1] [2] [3]) Android / Архив

Рейтинг@Mail.ru Яндекс.Метрика
MobiLab.ru © 2005-2018
При использовании материалов сайта ссылка на www.mobilab.ru обязательна