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

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

  • CCLabelTTF
  • CCLabelBMFont
  • CCLabelAtlas

CCLabelTTF

   TTF(TrueTypeFont)是一种字库名称,是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式。

           CCLabelTTF 每次调用 setString (即改变文字)的时候,一个新的OpenGL纹理将会被创建.。这意味着setString 和创建一个新的标签一样慢。

           所以,当你需要频繁的更新它们的时候,尽可能的不用去使用标签对象。  而应该使用CCLabelAtlas或者是CCLabelBMFont 

OK, 看下它的使用方法 

CCLabelTTF *label = CCLabelTTF::labelWithString("the string", "Marker Felt", 21);

    this->addChild(label);

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

    label->setString("change string");//修改文字的方法


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

 

CCLabelBMFont

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

         在 cocos2d-x的示例项目中有现成的,可以先拿过来练习一下,找的时候注意两个文件的 名称是相同的,只是扩展名不同。

CCLabelIBMFont *label = CCLabelIBMFont::labelWithString("the string", "konqa32-hd.fnt");

this->addChild(label);

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

label->setString("change string");

下面是 konqa32-hd.png文件的截图

cocos2d-x 中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)_第1张图片

    .fnt 文件定义了 图像文件的名称,以及每个字符对应的位置信息。

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

 

CCLabelAtlas        

        如果你用cocos2d-x项目模板创建过项目,那么你已经看过它的效果了,就是左下角显示帧率的数字。

        因为帧率一直在变,使用CCLabelTTF的话效率太低,因为只是数字所以也犯不上使用 CCLabelBMFont 加载那么大的文字图像,所以使用这个比较合适。

CCLabelAtlas *label = CCLabelAtlas::labelWithString("12", "fps_images.png", 12, 18, ".");

this->addChild(label);

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

label->setString("34");

       在项目文件中,在resourse group里你可以找一下一个叫 fps_images.png的这个图像文件,文件如下:

        cocos2d-x 中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)_第2张图片

       所以,这个只能显示上面这个12个字符,abcd什么的就不行了。

       解释一下参数,

       12 就是字符,

       fps_images.png就是字符的图像文件(这个只要图像文件就可以了),

       12 是每个字符的宽度,

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

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

你可能感兴趣的:(cocos2d-x)