探cocos2dx文本显示实现(label_nodes),源码版本(2.2.3)

来源:互联网 发布:python 除法符号 编辑:程序博客网 时间:2024/05/22 02:02
追本溯源的话,一个文本的显示在计算上也就是点阵图,而一行文本也就是一系列点阵图按照顺序排序显示而成的。早期的计算机图形实现的图案可以说都是一个个几何形状组合而成,到了近代计算机图形技术的发展,加入了纹理技术,使得图形可以表现得越来越丰富。比如说类似于计算机上各种各样的字体,使用几何图形组合的方案已经很难达到丰富的效果了。在cocos2dx里边,文本显示的实现也是基于纹理技术的,当然出于性能上的考量,文本显示的字的纹理图都会被放到一张大图里边,以此来减少opengl对2指数宽高图片需求带来的性能开销。当cocos2dx的文本显示类获取需要显示的字符串之后,会根据具体的字符字母调整映射纹理坐标和绘制矩形坐标,最终会显示到屏幕上。

模块相关类:
CCLabelAtlas:不基于具体的字体文件的文本显示类,使用图片的方式保存需要显示的字体,解析字符串的时候会通过索引进行解析,比如说第一个字符是'1',那么就会自动解析第二个字符为'2'。
CCLabelBMFont:基于fnt字体文件的显示类,需要提供fnt字体文件,使用CCSpriteBatchNode渲染(fnt字体文件可以使用BMFont软件生成)。

CCLabelTTF:基于TTF字体文件的显示类,使用具体平台的api将文本绘制成一个位图,然后在根据这个位图生成一个纹理,限制可能比较高,跨平台不好。


uml图:


使用方式:
CCLabelAtlas *tempAtlasNode = CCLabelAtlas::create("hello label","fontFileName.ttf");
addChild(tempAtlasNode);
CCLabelBMFont *tempBMFontNode = CCLabelBMFont::create("hello label","fontFileName.fnt");
addChild(tempBMFontNode);
CCLabelTTF *tempTTFNode = CCLabelTTF::create("hello label","Arial",32);
addChild(tempTTFNode);

扩展:

适合扩展的类还是CCLabelBMFont,可以实现比较灵活、具有丰富效果的字体,修改在解析字符串生成纹理的代码就完全可以实现了。

0 0
原创粉丝点击