文字

CCLabelTTF
CCLabelTTF::labelWithString(const char *label,          //文字内容 
                            const CCSize& dimensions,   //范围 CCSize(0,0)默认大小 
                            CCTextAlignment alignment,  //对齐方式 0左 1中 2右 
                            const char *fontName,       //字体名 
                            float fontSize              //字号)
CCLabelTTF对象渲染比较慢,每次调用setString的时候,一个新的OpenGL纹理将被创建,这意味着setString和创建一个新的标签一样慢,所以当需要频繁更新label的时候,应该选择另外两种文字类。
由于CCLabelTTF这个类使用的是系统中的字体,不需要额外往项目文件中添加字体文件。但如果你有自定义的字体也可以加到项目中,如果无法使用,可以查看一下ccConfig.h中的CC_FONT_LABEL_SUPPORT是否enable了。


CCLabelAtlas
CCLabelAtlas::labelWithString(const char *label,         //标签文字内容 
                              const char *charMapFile,   //图片路径 
                              unsigned int itemWidth,    //元素的宽度 
                              int unsigned itemHeight,   //高度       
                              unsigned char startCharMap //起始的字符)
引擎模板里面左下角显示帧率的数字,就是利用CCLabelAtlas来实现的。因为帧率一直在变。
每个字符的高度和宽度不能设置错误,否则显示的时候可能就不对了。最后一个起始的字符用来对应字符和图像的关系的。

做游戏经常用到自定义的数字。如果已经有了这样的图片,怎么在cocos2d里面显示出来呢?CCLabelAtlas就能胜任这个工作:

[CCLabelAtlas labelWithString:s charMapFile:filePath itemWidth:25 itemHeight:27 startCharMap:'1'];
charMapFile:存放字符的图片路径
itemWidth:图片中每个字符所占的宽度
startCharMap:图片中第一个字符的ascII值
这个类会将传入的图片“分成”指定宽高的小块,根据需要获得字符的ASCII与startCharMap指定的图中的第一个 字符的ASCII计算偏移量,取得对应的小块。这就需要图片中的字符是按照ASCII的顺序连续排列的。
因此如果图片中只有数字1~9,那很简单,在startCharMap那里传入‘1’或者49都可以,49是字符1的ASCII。因为1~9的ASCII是连续的。
如果数字中含有0呢?0的ASCII是0(是48 不过方法可以),如果把0放在第一个位置,那么需要把1放在第50个位置,制作这样的图片就比较麻烦。但是我们可以换个思路,把0排在9的后面。9后面的ASCII对应的字符是‘:’,当我们需要获得字符串的时候只需要将字符串中的0替换成‘:’就行了。例如1024替换成1:24。


CCLabelBMFont
CCLabelBMFont::labelWithString(const char *str,  
                               const char *fntFile)
它是CCSpriteSheet的一个子类,对每一个字符就像一个CCSprite来对待,因此每个单独的字符可以进行旋转、缩放、设置透明等操作。
所有字符都是使用anchorPoint(0.5, 0.5),所以最好不要更改它,会影响渲染。
使用该类之前,需要添加好字体文件,包括一个图片文件(AA.png)和一个字体坐标文件(AA.fnt)。两个文件的名称相同,只是扩展名不同。
CCLabelBMFont的改变相当于每次只改变图片坐标。

CCLabelBMFont中每个文字相当于一个CCSprite,可以旋转,移动,改变尺寸等

CCLabelBMFont  相当于每次改变只改变了图片坐标,而CCLabelTTF要重新渲染.这个类使用之前,需要添加好字体文件,包括一个图片文件 (**.png) 和一个 字体坐标文件 (**.fnt)。

在 cocos2d-x的示例项目中有现成的,可以先拿过来练习一下,找的时候注意两个文件的名称是相同的,只是扩展名不同。

CCLabelIBMFont *label = CCLabelIBMFont::labelWithString("the string", "font-hd.png");

this->addChild(label);

label->setPosition(ccp(100, 100));

label->setString("change string");

 

下面是 font-hd.png文件的截图


 font-hd.fnt文件定义了 图像文件的名称,以及每个字符对应的位置信息。

 这个没办法指定字体的字号,但可以用scale属性进行缩放来调整大小。就当它是sprite,可以简单的实现很炫的文字的动画效果。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值