原文地址: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 Grey–84Brown16542Pink192203Purple160240YellowGold215)
对齐
如果你要修改对齐方式,你可以使用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)