【转载】cocos2dx–字体方案

【转载】cocos2dx–字体方案

我们在游戏中,经常会看到非常好看的字体,这些字体,可以为游戏增色不少,今天,我们就来看看cocos2d中,对于字体一般是怎么处理的。

        当然,我们可以采用程序默认的处理,那么字体可能就不那么好看,那么,我们想自己使用一些个性化的字体要怎么办呢?cocos2d中有三种办法来使用自定义字体,我们看2个最常用的.

        在这之前,先说一个可能大家都用过的办法,那就是把字体做成透明背景的png图片,当然,这的确是一个办法,这个办法有很多好处,比如,我们可以自己定义字体的形状,颜色,大小等,而且这种图片形式的字体是绝对不会失真的,当然,缺点也有,那就是不能灵活的改变内容和占用的体积要大。

图片字体用的非常广,比如下图,石头剪子布这就是一个图片字体:

这个字体采用了变色,描边,旋转处理,而且边缘无锯齿,看起来比较舒服(至少我个人这么认为

我们再看2个实际的例子:


这是游戏的说明,我们用了一个自定义字体,但是,这种字体边缘会有锯齿出现,我们来看看这个该怎么实现:

首先,我们需要准备一个字体文件TTF放到资源目录中


1.CCLabelTTF *label = CCLabelTTF::create("Thanks for playing \r\nthis game, any question, please contact me via Email\r\nzy_software@126.com.\r\n\r\n\r\nzystudios.cn",
2."finger-guessing/font/grobold.ttf", 26,CCSize(300,300),kCCTextAlignmentCenter,kCCVerticalTextAlignmentTop);
3. 
4.this->addChild(label);


我们使用CCLabelTTF来加载一个自定义的字体,这个是最常用的一个方法,非常简单,注意看上面的参数,第一个表示文字内容,第二个表示加载的TTF字体,没有的话则为默认字体,第三个是字号大小,第四个是整个字体的显示尺寸,注意最后2个参数,这两个参数是对其参数,第一个是水平居中对其,第二个是垂直置顶对其,当然,我们还有很多可选参数,看一下cocos2d 给我们的参数选择:


CCVerticalTextAlignment 文本垂直对齐参数

typedef enum{

  kCCVerticalTextAlignmentTop,

  kCCVerticalTextAlignmentCenter,

  kCCVerticalTextAlignmentBottom

}CCVerticalTextAlignment

CCTextAlignment 文本水平对齐参数

typedef enum{

  kCCTextAlignmentLeft,

  kCCTextAlignmentCenter,

  kCCTextAlignmentRight,

}CCTextAlignment

CCLineBreakMode 文本断行模式参数

typedef enum{

  kCCLineBreakModeWordWrap,

  kCCLineBreakModeCharacterWrap,

  kCCLineBreakModeClip,

  kCCLineBreakModeHeadTruncation,

  kCCLineBreakModeTailTruncation,

  kCCLineBreakModeMiddleTruncation

}CCLineBreakMode



通过上面的方法,我们就可以很容易的设置一个文本,并指定一些显示方法和自定义参数,非常方便。但是,它有个缺点,就是无法抗锯齿显示,所以,为了抗锯齿,我们还有另外一个方法,采用图形化的字体,先看个例子:

比如游戏中我们有计时器,这个时间是不断变换的,文本也要跟着变换,同时它没有锯齿,而且还能自定义字体,这个我们应该怎么弄呢?

我们首先要准备一个包含要显示文字的图片,这个要怎么弄呢?比如下图:

这个就是我们游戏要用到的计时文字了,我们按照一定的间隔和大小把这些文字排列在一张PNG图片上,当然,我们可以使用很多工具来生成这张图片,比如比较常用的一个软件Hiero

生成这样一张图片后,我们把它放入资源目录中区,然后,我们可以使用cocos2dx中的CClabelAtlas方法来处理这张图片字体:


1.label=CCLabelAtlas::create("0123456789.","finger-guessing/font/num.png",80,105,'0'); 
2.label->setString("0:0");
3.label->setScale(0.5);
4.label->setPosition(ccp(100,0));

首先看第一个参数,表示需要显示的字符,第二个表示图片路径,第三四个表示这个图片中每一个字符的大小,最后一个表示默认显示第几个,这里尤其是要注意的是,具体显示哪个字符,是根据序号来决定的。0表示第一个,1表示第二个,以此类推,但是,我们比如要显示第11个该咋办?如果你输入11,那就会发现,会显示2个1 而不是一个11,根据cocos2dx的定义,字符的具体排列顺序是按照ASCII码来决定的,我们来查表发现9后面的是:(冒号),所以,要显示第11个就是输入冒号:就可以了,比如,上面想显示0.0,就要输入:

label->setString("0:0");

 这点大家一定要注意啦,想显示哪个字符,就要去ASCII码表里查顺序啦。

这样,我们通过setString方法,就可以灵活的使用图片字体了。

 

[原文链接]http://www.zystudios.cn/blog/post/67.Shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值