Cocos2dx 学习笔记24 CCLabelTTF ,CCLabelBMFont,CCLabelAtlas

前端之家收集整理的这篇文章主要介绍了Cocos2dx 学习笔记24 CCLabelTTF ,CCLabelBMFont,CCLabelAtlas前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文地址:http://www.tairan.com/archives/3558

cocos2d的支持TTF(True Type字体)标签和纹理地图集标签
TTF标签的优点和缺点:(CCLabelTTF)
所有的TTF字体的优点:任何大小,字距支持,等等。
易于使用。无需使用外部编辑器。
创建/更新速度非常慢,因为会创建一个新的纹理,尤其是在Android系统中。
纹理地图集标签的优点和缺点:(CCLabelAtlas,CCLabelBMFont)
创建/更新速度非常快,因为他们不创造一个新的纹理。
字体可以进行定制(阴影,渐变,模糊等)
依赖于外部编辑器:AngelCode/ Hiero编辑器,GIMP/软件
如果调整大小,文本可能失去效果

标签对象

创建标签:简单的方法

创建一个标签,最简单的方法是通过使用CCLabelTTF对象。示例:

CCLabelTTF* ttf1 =::create("Hello World","Helvetica"12  CCSizeMake(24532),255)"> CCTextAlignmentCenter);

fontname是TTF字体所用的名字。您也可以使用自己的自定义TTF文件。您只需要添加ttf文件到项目。
如果它不能加载的字体,它会使用UIFont的类。
重要提示:OpenGL纹理的大小将自动计算基础上的字体大小和字体名称

创建标签:复杂的方式
您也可以使用下面的API创建的纹理:

(const char *stringfontNamefloat fontSizeCCSize 
&dimensionsCCTextAlignment hAlignmentCCVerticalTextAlignment vAlignment)

如果你用这种方式,你必须通过使用OpenGL纹理的尺寸。如果纹理不够大,只有部分的标签将被渲染。

可能的对齐方式:

	kCCTextAlignmentLeft (left alignment)
	kCCTextAlignmentCente center alignment
	kCCTextAlignmentRight right alignment)

与实现了CCLabel协议的任何对象一样,你可以使用setString方法更新它。示例:

label->setString"Hello World 2");

重要提示:每次调用SetString一个新的OpenGL纹理将被创建,这意味着SetString与创建一个新的CCLabel一样慢。所以,如果你需要经常更新CCLabel对象,不要使用它,而是考虑使用CCLabelAtlas或CCBitmapFontAtlas来代替。

颜色
通过简单地调用像这样的颜色参数,来改变您的字体颜色:

.color  ccc30); 
//or
label ccc4);

ccc3示例颜色

white -255
black 
blue 
green
red 
Grey84Brown16542Pink192203Purple160240YellowGold215)

对齐

如果你要修改对齐方式,你可以使用anchorPoint属性。示例:

//left alignmentsetAnchorPointccp0.5f));
// right alignment1// center aligment (default)));

纹理地图集标签
有2种类型的标签是基于纹理图集的:
CCLabelBMFont
CCLabelAtlas

CCLabelBMFont

介绍

建议使用CCLabelBMFont的方式来快速创建标签,原因有下面几点:
可定制的编辑位图(图片
您可以更新/初始化标签而没有消耗
这是非常灵活的。每一个标签的字符可以被看作一个CCSprite

字距支持
CCLabelBMFont标签解析天使代码格式来创建一个标签。要创建这些类的标签,你可以用这些编辑器:

http://www.n4te.com/hiero/hiero.jnlp(Java版)

http://slick.cokeandcode.com/demos/hiero.jnlp(Java版)

http://www.angelcode.com/products/bmfont/(仅适用于Windows)

http://glyphdesigner.71squared.com/(仅限于Mac)

http://www.bmglyph.com(仅限于Mac)

http://tinyfont.com(仅限于Mac)

Java编辑器与Windows的编辑器:
Windows编辑器是官方的代码编辑器
Java编辑器:在Mac上运行
Java编辑器:有额外的功能,如阴影,渐变,模糊

创建CCLabelBMFont
要创建一个CCLabelBMFont的对象,你需要做的:

CCLabelBMFontlabel =CCLabelBMFont(LongSentencesExample "fonts/markerFelt.fnt" sizewidth/1.5 kCCTextAlignmentCenter);

因为字体大小是固定的,你需要仔细考虑你需要的字体大小。由于纹理存储器,单独的每个大小的字体可能是低效的。在这种情况下,它缩小标签可能是有意义的,以实现不同的尺寸的大字体。由于标签仅仅是一个CCNode,你可以做到这一点通过scale属性

操作每个字符
由于CCLabelBMFont是CCSpriteSheet的子类,你可以像一个CCSprite一样操纵的每个字符。第一个字符将用tag= 0添加,第二个字符将用tag= 1添加,依此类推。示例:

"Bitmap Font Atlas""bitmapFontTest.fnt"CCSpritechar_B  labelgetChildByTag // character 'B'char_m 3// character 'm'

LabelAtlas

介绍

CCLabelAtlas是最快添加到cocos2d的标签,但它被CCBitmapFontAtlas所取代。CCLabelAtlas保持向后兼容性,但是你应该使用CCBitmapFontAtlas代替。

创建一个LabelAtlas

CCLabelAtlascharMapFileunsigned@H_107_404@intitemWidthitemHeightstartCharMap)

例子:

CCLabelAtlaslabel1 create "tuffy_bold_italic-charmap.png"4864' ');

charMapFile是一个包含了所有的字符的图像文件,每个字符根据其ASCII值排序,图像不能包含超过256个字符。
itemWidth是字符的宽度(以像素为单位)
itemHeight是字符的高度(以像素为单位)
startCharMap是在地图的第一个字符。

更新一个LabelAtlas/ BitmapFontAtlas。
如同任何对象,你可以使用setString方法更新它。

);

值得指出,更新一个CCLabelAtlas或一个CCBitmapFontAtlas的,几乎没有消耗。
LabelAtlas/ BitmapFontAtlas的对齐方式
如果你要修改对齐方式,你可以使用的anchorPoint属性。示例:

:(  ccp
 ));

CCLabelTTF与CCLabelAtlas
CCLabelTTF和CCLabelAtlas之间的主要区别是地图集版本(像所有其他的地图集类),使用一个预渲染所有字符的大纹理来绘制一个字符串。这意味着,绘图的速度要快得多,因为如果你画100个标签,图形处理器不会读取100个纹理,但只是在内存中保持一个纹理。但是,这也意味着,所有的字母将有一个固定的大小。如果你想要避开固定大小的限制,使用CCBitmapFontAtlas。

CCLabelTTF为每个标签创建一个纹理,因而CCLabelAtlas使用所提供的纹理(包含所有字符),能快速地渲染文字,因此使用CCLabelAtlas降低了内存消耗。

参考文献

Labels and Fonts(http://www.cocos2d-iphone.org/wiki/doku.PHP/prog_guide:labels)

猜你在找的Cocos2d-x相关文章