在iOS,android和windows下使用ttf字体的套路都稍微有点不同,具体在下面几个方面:

1)安装:

windows平台    使用ttf字体时如系统字库中未安装该字体,则需右键点击字体文件进行安装,然后才可使用;

android平台     无需安装直接打包到apk的资源中即可;

ios平台            需要在xcode项目的info.plist中添加字体文件,具体位置如下:

3d7db833be2d6594fca3f03f2e5c3210.png

打开该文件后先查找是否有 Fonts provided by application 该项,如果没有则在文件如下图位置点击加号进行添加

af9f4e6f559c7bdc6f0b3f212f0bea2e.png

在Fonts provided by application选项中增加需使用的字体文件,添加后的截图如下:

ed8313d4ad4df2d71c5cac798515e892.png

这里需要注意的是该ttf文件所在的目录路径,我这边的路径是resources/fnt/fangzheng.ttf, 这里注意根据自己的资源路径进行设置,完成这步后ios下字体资源安装就算搞定了。

2)使用:

windows平台,使用代码示例如下:

UILabel *pLabel = UILabel::create();

pLabel->setFontName("方正.ttf");

pLabel->setText("中国智造,慧及全球");

android和ios的调用代码和windows一样,但在设置字体名称时是有区别的,这里一定要注意:

pLabel->setFontName("方正.ttf");

在android中字体文件的名称不能为中文,表现为在打包apk时会输出下面的错误信息:

方正.ttf :error: Invalid filename. Unable to add.

这里只需把文件名改为非中文表示,比如改为 "fangzheng.ttf",然后修改设置字体名称的代码如下:

pLabel->setFontName("fangzheng.ttf");

再重新进行apk打包就可以了。

在ios下会稍微麻烦些,主要原因是在ios下设置的字体名称不是文件名,而是该字体真实的字体名称,关于如何获取真实字体名称,可以借鉴下面这位同学的技术贴,

具体原理是新建一个ios应用项目,将需要使用使用的ttf字体包含进去,具体方法和上面讲的ios安装ttf字体套路一样,只是plist的位置不一样而已,然后通过下面的代码:

NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];

NSArray *fontNames;

NSInteger indFamily, indFont;

for (indFamily=0; indFamily

{

NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);

fontNames = [[NSArray alloc] initWithArray:

[UIFont fontNamesForFamilyName:

[familyNames objectAtIndex:indFamily]]];

for (indFont=0; indFont

{

NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);

}

}

将该项目所支持的所有字体的名称信息全部输出到 target output中,如下图:

60b9affdc6cb0e42d87c27428897dafd.png

然后复制所有输出的内容保存到文本文件中,修改项目属性将刚才添加ttf字体移除,再次执行得到新的支持字体的信息,将这两个文本进行对比即可找到自己添加的ttf字体的真是font name,

这里注意的是需使用的是 Font name,不是Family name

详细的步骤可参见下面这位同学分享的技术帖:

http://blog.csdn.net/wang_meng_jiangnanan/article/details/8665040

我根据上面帖子中的方法找到的字体名字为 FZCTHFW--GB1-0

修改设置字体的代码如下:

pLabel->setFontName("FZCTHFW--GB1-0");

由于在ios和android中使用的字体名称不一致,这个可以定义一个全局变量,然后根据不同平台设置不同的值即可,示例如下:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

std::string FONT_NAME = "fangzheng.ttf";

#else

std::string FONT_NAME = "FZCTHFW--GB1-0";

#endif

到此处在cocos2dx2.2.2中跨平台使用的ttf字体就基本搞定了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐