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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值