cocos2d-x使用第三方的TTF字体库

news/2024/11/24 6:08:19/

                                            cocos2d-x使用第三方的TTF字体库          

       最近再做一款手机游戏,用的是cocos2d-x引擎,对于这个引擎我不太熟悉,以前我是做苹果系统的UI界面的,对于cocos2d-x这个引擎接触的比较少。后来遇到一个问题就是游戏中的很多角色都需要使用特殊的字体,比如隶书,行楷等等。但是ios内部不支持这么复杂的中文字体,怎么办呢,不多废话了,直接本主题吧。。。

1.从网上下载你所需要的字体,比如xxx.ttf,我这里推荐一个网站,http://www.zhaozi.cn/s/all/ttf/ (这是我们部门的美工推荐给我的)。

2.打开Xcode,我是在Xcode下进行编码的,至于以后移植安卓,再做介绍。打开Xcode的plist文件。如下图,首先把需要的字体文件添加进Resource目录下,然后打开这个目录下的info.plist文件(cocos2d和cocos2d-x的名字是info.plist,如果自己建别的工程,名字可能会不同),右键新建一行,起名叫做Font provided by application ,然后把你想要添加的自己写入相应的item中,注意要带后缀名。



3.我们已经把自己加入了系统中,但是如何使用呢?我看过不少网站上写着说TTF字库的名字就是字体名字,有的说你双击打开字库,窗口上的标题就是自己名字,例如


或许对于英文字库来说,可能是正确的,但是对于中文字库来说,错误率很高,设置说几乎都是错的,这也是为什么我要写这篇文章。我研究了好几天,试了很多方法,才把这个问题搞定了。下面我来介绍一下我的方法吧。

首先新建一个cocos2d或者基础的ios应用工程,注意不是cocos2d-x的,因为我们要用到oc的代码,我就新建了一个cocos2d的工程,在HelloWorldLayer类的init()方法改写成如下:


-(id) init
{
    // always call "super" init
    // Apple recommends to re-assign "self" with the "super's" return value
    if( (self=[super init]) ) {
        
        
        NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
        NSArray *fontNames;
        
        NSInteger indFamily, indFont;
        
        for (indFamily=0; indFamily<[familyNames count]; ++indFamily)
        {
            NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);
            
            fontNames = [[NSArray alloc] initWithArray:
                         
                         [UIFont fontNamesForFamilyName:
                          
                          [familyNames objectAtIndex:indFamily]]];
            
            for (indFont=0; indFont<[fontNames count]; ++indFont)
                
            {
                
                NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
                
            }
            
            [fontNames release];
            
        }
        
        [familyNames release];
    }
    return self;
}

运行程序,控制台就会把当前系统支持的字体都打印出来,但是这个时候面对了两三百行的字体名字,你也不知道到底哪个才是你想要的,到了关键时刻了,怎么办呢?你把这些输出复制出来,打开TextWrangler这个工具,粘贴进去,当然直接粘贴进代码也是可以的。然后你把info.plist文件中加入的几个字体库删除了,在运行一遍,这时候你得到的输出就是没有那些字体名称的,这时就找到了字体的名称


//        2013-03-01 13:43:00.934 Cocos2dLabelFont[3739:c07] Family name: FZXingKai-S04T
//        2013-03-01 13:43:00.935 Cocos2dLabelFont[3739:c07]     Font name: FZXKFW--GB1-0
//        2013-03-01 13:43:01.006 Cocos2dLabelFont[3739:c07] Family name: FZPangWa-M18T
//        2013-03-01 13:43:01.007 Cocos2dLabelFont[3739:c07]     Font name: FZPWFW--GB1-0
//        2013-03-01 13:43:00.920 Cocos2dLabelFont[3739:c07]     Font name: TJenLei-Medium

好了,到这里你就可以使用你的字体了,记得把从info.plist文件删除的字库文件名加上。

5.现在我们在init()方法中[fontNames release];后面写上如下代码

        CCLabelTTF *label1 = [CCLabelTTF labelWithString:@"长城中隶繁体0123456789" fontName:@"TJenLei-Medium" fontSize:24];
        CCLabelTTF *label2 = [CCLabelTTF labelWithString:@"方正胖娃繁体0123456789" fontName:@"FZPWFW--GB1-0" fontSize:24];
        CCLabelTTF *label3 = [CCLabelTTF labelWithString:@"方正行楷繁体0123456789" fontName:@"FZXKFW--GB1-0" fontSize:24];
        CCLabelTTF *label4 = [CCLabelTTF labelWithString:@"方正行楷繁体0123456789" fontName:@"--unknown-1--" fontSize:24];


        CGSize size = [[CCDirector sharedDirector] winSize];
        
    
        label1.position =  ccp( size.width /2 , size.height/2+50 );
        label2.position =  ccp( size.width /2 , size.height/2 );
        label3.position =  ccp( size.width /2 , size.height/2-50 );
        label4.position =  ccp( size.width /2 , size.height/2-100 );

       
        
        [self addChild: label1];
        [self addChild: label2];
        [self addChild: label3];
        [self addChild: label4];

6.运行,结果如下图



7.好了,大功告成了,现在知道了字库的自己名称,那么我们就可以把它用在cocos2d-x的工程中了,同理,使用方法如下

    CCLabelTTF* labelTitle = CCLabelTTF::create("测试字体", "--unknown-1--", 24);
这就可以了。











http://www.ppmy.cn/news/172349.html

相关文章

Linux 6.x 下Oracle 11g R2 安装配置

Oracle 11g R2 数据库安装硬件配置要求&#xff1a; 最小内存 1 GB of RAM 虚拟内存容量&#xff0c;这个oracle也有要求&#xff0c;不用担心此时的swap分区不够oracle的要求 。虚拟内存swap如何增加容量&#xff0c;后面将会讲到 Available RAM Swap Space Required Betwee…

zynq 7000 clg400 可作为外部AD 的引脚列表

我用的XC7Z010-1CLG400C(AC7020 为 XC7Z020-2CLG400I&#xff09; &#xff0c;想用zynq7000 的自带ADC, 查找得到如下列表&#xff0c;适用于zynq 7000 的 CLG400 封装。 Pin Pin Name Memory Byte Group Bank C20 IO_L1P_T0_AD0P_35 0…

Kubernetes 学习总结(27)—— Kubernetes 安装 Redis 集群的两个方案

一、自定义 yaml 文件安装 背景 在 Kubernetes 中部署 Redis 集群面临挑战&#xff0c;因为每个 Redis 实例都依赖于一个配置文件&#xff0c;该文件可以跟踪其他集群实例及其角色。为此&#xff0c;需要结合使用 Kubernetes StatefulSets 和 PersistentVolumes 实现。Redis …

字库中英文对照表

方正字库中英文照表&#xff1a; 简体 中文字体名 英文字体名 文件名 PSname 字数 方正报宋简体 FZBaoSong-Z04S FZBSJW FZBSJW—GB1-0 7156 方正粗圆简体 FZCuYuan-M03S FZY4JW FZY4JW—GB1-0 7156 方正大标宋简体 FZDaBiaoSong-B06S FZDBSJW FZDBSJW—GB1…

地表最强系列之Sqoop安装以及使用

什么是Sqoop Sqoop(发音&#xff1a;skup)是一款开源的工具&#xff0c;主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递&#xff0c;可以将一个关系型数据库&#xff08;例如 &#xff1a; MySQL ,Oracle ,Postgres等&#xff09;中的数据导进到…

Sklearn:天池新人实战赛o2o优惠券使用预测 part2

日萌社 人工智能AI&#xff1a;Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战&#xff08;不定时更新&#xff09; 阿里云官网&#xff1a;天池新人实战赛o2o优惠券使用预测 数据集下载链接&#xff1a;https://pan.baidu.com/s/13OtaUv6j4x8dD7cgD4sL5g 提取码…

倍加福光电传感器OBE10M-18GM60-SE5-V1

倍加福光电传感器OBE10M-18GM60-SE5-V1 双色指示 LED 亮通/暗通&#xff0c;可编程 灵敏度调节器&#xff0c;确保最佳地满足应用需要 防护等级 IP67 坚固的圆柱形金属外壳 M18 x 1 产品阐述 对射型光电传感器&#xff0c;M18 螺纹外壳设计&#xff0c;镀镍黄铜外壳&#xff0…

外螺纹对照表_螺纹螺距对照表

紧固件螺纹直径与螺距对照表 螺纹规 M3 M4 M5 M6 M8 M10 M12 M14 M16 M18 M20 M22 M24 M27 M30 M33 M36 M39 M42 M45 M48 M52 M56 M60 M64 粗牙螺距 0.5 0.7 0.8 1.0 1.25 1.5 1.75 2.0 2.0 2.5 2.5 2.5 3.0 3.0 3.5 3.5 4.0 4.0 4.5 4.5 5.0 5.0 5.5 5.5 6.0 细牙螺距…