cocos2d-x-3.0学习笔记之标签类

来源:互联网 发布:淘宝御泥坊适合年龄 编辑:程序博客网 时间:2024/05/29 18:43

游戏场景中的文字标签包括静态文字与动态文字,其中动态文字为美工在制作图片资源时就已经添加上去的文字,因为是图片的一部分,具有很强的随意性,可以是各种各样的文字,但是这种文字也是我们在程序里所不能修改的,动态文字则是我们可以在程序中进行控制的,而cocos2d-x一般是通过标签来实现。

cocos2d-x的标签类主要有三种:LabelTTF、LabAtlas和LabelBMFont,在3.0及以上的版本中,又推出了新的标签类Label。

1.LabelTTF:使用系统中的字体,继承关系如图。
这里写图片描述
如图所示,LabelTTF继承了Node类,具有节点的基本特性,同时也实现了LabelProtocol接口
示例代码如下:

auto label = LabelTTF::create("我是LabelTTF", "Arial", TITLE_FONT_SIZE);    // position the label on the center of the screen    label->setPosition(Point(origin.x + visibleSize.width/2,                            origin.y + visibleSize.height - label->getContentSize().height));    // add the label as a child to this layer    this->addChild(label, 1);

运行结果:
这里写图片描述

继续查看LabelTTF::create函数的源代码发现

static LabelTTF * create(const std::string& string, const std::string& fontName, float fontSize,                             const Size& dimensions = Size::ZERO, TextHAlignment hAlignment = TextHAlignment::CENTER,                             TextVAlignment vAlignment = TextVAlignment::TOP);

发现create函数其实有6个参数,如果我们不设定则会有默认值,代表着标签的一些属性,例如位置信息之类的。

2.LabelAtlas:图片标签属性
这种标签显示的文字是从一个图片集中取出来的,因此需要加载图片集文件,LabelAtlas中的每个字符必须有固定的高度和宽度
LabelAtlas的运行效率比LabelTTF要快很多。
这里写图片描述

同样是继承了Node类,下面来实现一个例子:

auto labe1 = LabelAtlas::create("123 Test", "ttuffy_bold_italic-charmap.png",48,64,' ');    addChild(labe1, 0);    labe1->setPosition(Point(10, 100));    labe1->setOpacity(200); //设置透明度    // add the label as a child to this layer    this->addChild(labe1);    //参数以此为,要写的标签文字、字体文件、字体宽、高、起始字符

3.LabelBMFont:位图字体标签
使用位图标签类需要一个图片集(.png)和一个字符坐标文件(.fnt)
LabelBMFont中的每个字体宽度是可变的,LabelAtlas的运行效率比LabelTTF要快很多。类图如下所示
这里写图片描述

示例如下:

auto labe1 = LabelBMFont::create("HelloWorld", "fonts/BMFont.fnt");    addChild(labe1, 1);    labe1->setPosition(Point(10, 100));    labe1->setOpacity(200); //设置透明度

4.Label 提供了更丰富的视觉效果
类图如下:
这里写图片描述

创建函数主要有一下几个
这里写图片描述

示例代码:

 auto label1 = Label::create();    label1->setString("Default Font");    label1->setPosition( Point(size.width/2, size.height * 0.7) );    addChild(label1);    auto label3 = Label::createWithSystemFont("Marker Felt","Marker Felt",32);    label3->setPosition( Point(size.width/2, size.height * 0.5) );    addChild(label3);
0 0
原创粉丝点击