在iOS,android和windows下使用ttf字体的套路都稍微有点不同,具体在下面几个方面:
1)安装:
windows平台 使用ttf字体时如系统字库中未安装该字体,则需右键点击字体文件进行安装,然后才可使用;
android平台 无需安装直接打包到apk的资源中即可;
ios平台 需要在xcode项目的info.plist中添加字体文件,具体位置如下:
打开该文件后先查找是否有 Fonts provided by application 该项,如果没有则在文件如下图位置点击加号进行添加
在Fonts provided by application选项中增加需使用的字体文件,添加后的截图如下:
这里需要注意的是该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中,如下图:
然后复制所有输出的内容保存到文本文件中,修改项目属性将刚才添加ttf字体移除,再次执行得到新的支持字体的信息,将这两个文本进行对比即可找到自己添加的ttf字体的真是font name,
这里注意的是需使用的是 Font name,不是Family name
详细的步骤可参见下面这位同学分享的技术帖:
我根据上面帖子中的方法找到的字体名字为 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字体就基本搞定了。