cocos2d-x学习之添加显示文字

本文详细介绍了cocos2d中添加显示文字的三种方式:CCLabelTTF、CCLabelBMFont和CCLabelAtlas,并对比了它们的优缺点,特别是针对频繁更新文字场景的性能考量,提供了在不同需求下的最佳实践建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cocos2d 中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)

在 cocos2d 中有三个类可以在层或精灵中添加文字:

  • CCLabelTTF
  • CCLabelBMFont
  • CCLabelAtlas

CCLabelTTF

CCLabelTTF <wbr>每次调用 setString (即改变文字)的时候,一个新的OPENGL纹理将会被创建.。这意味着setString 和创建一个新的标签一样慢。所以,<span style="color:red">当你需要频繁的更新它们的时候,尽可能的不用去使用标签对象。 <wbr>而应该使用CCLabelAtlas或者是CCLabelBMFont。</wbr></span>OK, 看下它的使用方法 </wbr>

<wbr></wbr>

CCLabelTTF *label = <wbr>CCLabelTTF::labelWithString("hello world", CCSizeMake(100, 25), (CCTextAlignment)intAlign, strFontName, fontSize);</wbr>

label->setAnchorPoint(ccp(0, 0));

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

这个类使用的是系统中的字体,不需要额外往项目文件中添加字体文件。但如果你有自定义的字体也可以加到项目中,如果无法使用,可以查看一下ccConfig.h中的CC_FONT_LABEL_SUPPORT是否enable了。 <wbr><wbr></wbr></wbr>

<wbr></wbr>

CCLabelBMFont

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

<wbr></wbr>

假设字体文件为:fonts/bmFont.fnt

<wbr></wbr>

CCLabelBMFont *label CCLabelBMFont::labelWithString("hello world", "fonts/bmFont.fnt");

layer->addChild(label);

label->setAncherPoint(ccp(0, 0));

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

label->setString(" "); <wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr></wbr></wbr>

这个没办法指定字体的字号,但可以用 scale 属性进行缩放来调整大小。就当它是sprite。

<wbr></wbr>

CCLabelAtlas <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

如果你用cocos2d项目模板创建过项目,那么你已经看过它的效果了,就是左下角显示帧率的数字。因为帧率一直在变,使用CCLabelTTF的话效率太低,因为只是数字所以也犯不上使用CCLabelBMFont 加载那么大的文字图像,所以使用这个比较合适。

<wbr></wbr>

CCLabelAtlas *label = CCLabelAtlas::labelWithString(labelWithString, charMapFile, itemWidth, itemHeight, startChar); <wbr></wbr>

<wbr></wbr>

这个只能显示图像上面的字符。

解释一下参数,

<wbr><wbr><wbr><wbr><wbr><wbr>labelWithString就是字符,</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr>charMapFile 就是字符的图像文件(这个只要图像文件就可以了),</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr>itemWidth是每个字符的宽度,</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr>itemHeight是每个字符的高度,这个不能设错,否则显示的时候可能就不对了。</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr>最后一个是起始字符,它是使用这个其实字符来对应字符和图像关系的。</wbr></wbr></wbr></wbr></wbr></wbr>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值