Graphics(3)(转)

此博客转载自 ITPUB博客,链接为 http://blog.itpub.net/10294527/viewspace-126363/,强调转载需注明出处,否则追究法律责任,涉及操作系统领域。
几乎在每一个游戏里都需要在屏幕上面显示一些文字.在游戏中,字体从头到尾都应该有一个整体的风格.Symbian系统提供了一个标准的字体设置,但是开发者也可以根据情况,使用自己的比特图字体.每一个字体都只能有一个实例存在与系统中,而且他被所有的系统线程所共享,因此,他被保存在主内存中.

当你使用一个特定的字体时,应该注意:
1.创建CFront的一个对象来获得屏幕设备给定的一个参数(CGraphicsDevice::GetNearestFontInTwips).
2.在开始画Text之前,在图形连接里面建立一个字体.(CWindowGc::UseFont)
3.当一个字体不再被使用时,他应该被释放掉.释放的步骤首先在图形连接里使用CWindowGc:20050809152903725.gifiscardFont释放,然后在CGraphicsDevice::ReleaseFont释放.下面示例代码演示了如何创建新字体,显示一些文本,和释放字体:
以下内容为程序代码:

void CMyGameView:biggrin.gifraw( const TRect& /*aRect*/ wink.gif const

{

CWindowGc& gc = SystemGc();



// Get smallest possible arial font

_LIT(KMyFontName,"Arial"wink.gif;

CFont* myFont;

TFontSpec myFontSpec(KMyFontName,1);



CGraphicsDevice* screenDevice = iCoeEnv->ScreenDevice();

screenDevice->GetNearestFontInTwips(myFont,myFontSpec);



// Use new font

gc.UseFont(myFont);



// Draw some text

_LIT(KMyText,"My text"wink.gif;

gc.DrawText(KMyText, TPoint(40, 40) wink.gif;



// Discard and release the font

gc.DiscardFont();

screenDevice->ReleaseFont(myFont);

}

在实际运用过程中,字体通常使用ConstructL来创建,然后用爆破装置(C4炸弹)Boom!!!一下就会被炸的稀巴烂,哈哈.使用TFontSpec来指定字体的一些特性:字体高度,字体(宋体,仿宋,罗马等),字体样式(加粗,黑体等).当你使用相关方法查询当前字体的相关描述时,将会返回一个最接近的描述.

CEikonEnv中也包含了一个方法可以获得环境中的字体信息,CEikonEnv::TitleFont可以获得标题的字体,这样可以方便的使周围环境的字体和标题字体相一致.

你可以使用CGraphicsDevice ::NumTypeFaces来获得你储存字体的号码,使用CGraphicsDevice ::TypeFaceSupport来获得这些字体的详细信息.示例代码:
以下内容为程序代码:

void CMyGameView::ListMyFontsL()

{

// Find out the number of typefaces

TInt iNumTypefaces = iCoeEnv->ScreenDevice()->NumTypefaces();



// Show name of each available font

TBuf<64> myFontName;

TBuf<128> text;

for(TInt t = 0; t < iNumTypefaces; t++)

{

// Get font name

TTypefaceSupport myTypefaceSupport;

iCoeEnv->ScreenDevice()->TypefaceSupport(myTypefaceSupport, t);

myFontName = myTypefaceSupport.iTypeface.iName.Des();



_LIT(KMyText, "Font %d/%d:"wink.gif;

text.Format(KMyText, t, iNumTypefaces);

iEikonEnv->InfoWinL(text, myFontName);

}

}

特别是在游戏中,有时候,你需要创建一个属于自己的字体.你自己的字体必须含有所有你要显示的字的样式,这样做的好处是你可以在游戏里显示多个字体,但是自己做一个这样的字体比较浪费时间.所以你也可以创建一个新的Symbian OS字体,使用已经存在的字体和图片API,把你想要使用的字体包含进来.创建一个自定义字体,你需要:
1.建立一个字体定义文件,例如MyFont.gd
2.创建Adobe BDF (Bitmap Distribution Format)字体比特图;例如MyFont.bdf.
3.使用fnttran工具建立一个Symbian OS字体储存文件,例如 MyFont.gdr(例如fnttran MyFont.bdf MyFont.gd MyFont.gdr)
4.拷贝MyFont.gdr到指定的systemfonts文件夹下面,然后在建立软件安装包的时候,要修改.pkg文件,模拟器会自动拷贝字体文件到fonts文件夹.

MyFont.gd文件示例代码:
以下内容为程序代码:

Typeface tf_MyFont

Name "My Font" Proportional

FontBitmaps

MyFont // Name of the font in BDF file

EndFontBitmaps

EndTypeface



FontStoreFile

CollectionUid 123456789 // Uid of the font; must be unique

KPixelAspectRatio 1000

CopyrightInfo

"MyCopyrightInfo"

EndCopyrightInfo

Typefaces

tf_MyFont

EndTypefaces

EndFontStoreFile

自从BDF格式被广泛使用后,他的多种格式可以被用来创建字体.BDF文件可以以多种方法来创建,例如windows比特图,字体编辑器等,或者也可以手动创建.因为字体文件的基础就是一个文本文件,但是手动创建会很困难.

当创建了BDF文件以后,经常性的会需要一些修正,这些属性存在于BDF文件里(在STARTPROPERTIES和ENDPROPERTIES之间).
以下内容为程序代码:

Uid uid (并不是和收集的Uid一样.)

MaxNormalWidth width.

MaxConsecutiveFillChars max.

Bold [1/0].

Italic [1/0].

FONTASCENT ascent.

FONTDESCENT descent.

通常情况下Uid和MaxNormalWidth是BDF文件中缺失的,fnttran将会在某些属性缺失的情况下通知你.当你创建字体储存文件MyFont.gdr的时候,他就已经被拷贝到systemfonts下面了,他也会和其他字体一样在手机或模拟器里使用.示例:
以下内容为程序代码:

CFont* CMyGameView::GetMyOwnFont()

{

_LIT(KMyFontName,"MyFont"wink.gif;

CFont* myFont;

TFontSpec myFontSpec(KMyFontName,1);



CGraphicsDevice* screenDevice = iCoeEnv->ScreenDevice();

screenDevice->GetNearestFontInTwips(myFont,myFontSpec);

return myFont;

}

字体文件可以被拷贝到任意驱动器的文件夹下,如C:systemfonts, E:systemfonts,但是一旦被移动了,在字体被应用程序使用之前需要重启动一下.你也可以使用CWsScreenDevice::AddFile,来防止这种情况的发生.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126363/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126363/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值