cocos2d-x中关于字体的类主要有三种
CCLabelAtlas
CCLabelBMFont
CCLabelTTF
简单介绍
CCLabelAtlas
继承关系图
介绍
上面说明了以下几点:
1、CCLabelAtlas 比CCLabel(CCLabelTTF)快很多
1、CCLabelAtlas 比CCLabel(CCLabelTTF)快很多
2、CCLabelAtlas 中的每个字符必须有固定的高度和宽度
3、CCLabelAtlas 可以做你想要的,前提是你提供给他一张你想操作的字体的图片
4、CCLabelBMFont 比CCLabelAtlas 更灵活,他支持边宽的字体
5、增加一点,要用CCLabelAtlas创建字体你必须给出图片到字体的映射方式,也就是设置里面startCharMap的参数值,每种字体的映射方式不一样
CCLabelAtlas:
CCLabelTTF:
CCLabelAtlas:
1、将字符串清空
2、将设置的字符串赋值给先前清空的字符串
CCLabelBMFont:
1、将字符串清空
2、
将设置的字符串赋值给先前清空的字符串
3、将每个节点设置为隐藏(
CCLabelBMFont 中对待每个字符是以CCNode的方式,因为他是CCSpriteBathNode的派生类)
4、显示新的字符(我们可以猜测这里的createFontChars的功能就是将新的字符赋值到每个节点中,后将节点显示出来)
CCLabelTTF
1、将字符串析构掉
2、重新new一个字符串
3、创建新的texture
4、将texture设置进去
从上面的setString函数调用开销可以看出一般我们在需要频繁改变显示的字符串的时候我们最好是采用
CCLabelAtlas,比如说显示时钟的时候,其次是
CCLabelBMFont,最后是
CCLabelTTF
具体的创建和使用上面三个类,我们可以通过Cocos2d-x中FontTest来进行测试
最后需要说明的是上面的这些类全都继承自CCNode,CCNode有个接口函数runAction,也就是说我们可以将cocos2d-x中的所有动作和这些label结合起来显示,而CCLabelBMFont是以CCNode的方式对待每个字符,那么每个字符都可以创建出动作
CCLabelBMFont
继承关系图
介绍
1、 首先CCLabelBMFont是CCSpriteBatchNode的一个子类(这个很强大)
2、 他能够把每一个字符当做一个CCSprite,这意味着每一个单独的字符都可以有自己的动作(什么旋转,放大,改变透明度)
3、 所有内部字符的的定位点(anchorpoint)为(0.5,0.5),也就是说每一个字符相对于坐标点的位置为该字符的中心点(而不是左上角,或则左下角),这里说了建议不要去修改他,因为这种改变可能会影响绘制
4、 CCLabelBMFont不仅具有CCLabel(CCLabelTTF)的灵活性,而且有CCLabelAtlas的速度和所有CCSprite的功能,如果你在考虑用CCLabelBMFont还是CCLabelAtlas时,那么就用CCLabelBMFont吧
CCLabelTTF
继承关系图
CCLabelTTF很慢,考虑用CCLabelAtlas和CCLabelBMFont来替代
字体的创建方式
和cocos2d-x中大多数类型一样,字体也实现了静态工厂的模式(通过静态方法创建,采用CCPoolManager管理内存),当然你也可以采用非静态方法来创建
上面已经说了
CCLabelAtlas创建的字体相对于你给的字体图片来说必须有固定的宽度和高度,你还应该给出固定的映射方式(否则创建的字体达不到你的要的效果)
setString函数:
我们可以通过初始化的方式设置label显示的字符串,如果你想改变label显示的字符串,那么你就需要用到setString函数