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