【cocos2d-x游戏开发】Label标签的使用

在3.x中重新整合了2.x中的LabelTTF、LabelAltas、LabelBMFont三个字体类,重新生成了全新的Label标签字体类。另外在3.x中,新版本的Label支持四种方式的标签创建。并新增了阴影Shadow、轮廓Outline、发光Glow效果的支持。还支持文字内容的行间距、文字间距、自动换行的设置。

创建系统字体:createWithSystemFont

下面的结构体是系统字体的设置情况:

static Label* createWithSystemFont(  
        const std::string& text,                          //字符串内容  
        const std::string& font,                          //字体(字体名称、或字体文件)  
        float fontSize,                                   //字号                             
        const Size& dimensions = Size::ZERO,              //label的尺寸大小,默认不设置尺寸  
        TextHAlignment hAlignment = TextHAlignment::LEFT, //水平对齐方式,默认左对齐::LEFT  
        TextVAlignment vAlignment = TextVAlignment::TOP   //垂直对齐方式,默认顶部  ::TOP  
    );  

下面的是代码:

//创建一个系统字体标签前三个参数是必须设置的,后面的可以是缺省值
	Label* label = Label::createWithSystemFont("Hello cocos!","Arial",24,Size(200,200),TextHAlignment::RIGHT,TextVAlignment::BOTTOM);
	
	label->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));
	this->addChild(label);


	//下面设置一个颜色层,是为了更好的区分字体标签参数的作用
	LayerColor* layerColor = LayerColor::create(Color4B(0, 0, 255, 255));//默认区域为窗口大小
	//自定义尺寸
	layerColor->setContentSize(Size(200, 200));
	layerColor->ignoreAnchorPointForPosition(false);
	layerColor->setAnchorPoint(Vec2(0.5,0.5));
	layerColor->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));
	this->addChild(layerColor,-1);
下面的是效果图:



创建LabelTTF标签

LabelTTF是一个标准的字体容器类,包含有字体方向、描边、阴影、轮廓都有其方法。
直接使用字体文件(.ttf)来创建LabelTTF标签。
下面是代码:

//创建一个系统字体标签前三个参数是必须设置的,后面的可以是缺省值
	Label* label = Label::createWithTTF("Hello cocos!", "fonts/Marker Felt.ttf", 50);
	label->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));
	this->addChild(label);


	//创建阴影效果。第一个参数为阴影颜色,第二个参数为阴影相对于字体标签的移动区域,如设置为Size(10,10)即为在字体标签的右上角。
	label->enableShadow(Color4B::GREEN, Size(10, 10));
	//设置字体标签的轮廓,第一个参数为颜色,第二参数为宽度
	label->enableOutline(Color4B::RED, 3);
	//设置字体标签的轮廓,参数为轮廓颜色
	label->enableGlow(Color4B::GREEN);

	//取消上述设置的特效
	label->disableEffect();


其中Outlint和Glow其中只能同时有一个效果,无法一起使用。下面的是实际效果图:


另外你也可以自己设置字体标签的对其方式,类似于createWithSystemFont的设置。

下面是自动换行的代码:
//创建一个系统字体标签前三个参数是必须设置的,后面的可以是缺省值
	Label* label = Label::createWithTTF("Hello cocos!", "fonts/Marker Felt.ttf", 50);
	label->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));
	this->addChild(label);


	//创建阴影效果。第一个参数为阴影颜色,第二个参数为阴影相对于字体标签的移动区域,如设置为Size(10,10)即为在字体标签的右上角。
	//label->enableShadow(Color4B::GREEN, Size(10, 10));
	//设置字体标签的轮廓,第一个参数为颜色,第二参数为宽度
	//label->enableOutline(Color4B::RED, 3);
	//设置字体标签的轮廓,参数为轮廓颜色
	//label->enableGlow(Color4B::GREEN);

	//取消上述设置的特效
	//label->disableEffect();

	label->setLineBreakWithoutSpace(true);  //设置为真来支持自动换行
	label->setWidth(80);
	label->setMaxLineWidth(120);  //设置每行显示的最宽的间距,这种方法只有在LabelWidth==0时才会有效。并且如果设置了setWidth,这个就无效了

下面是两种效果图:


下面是文字之间的间距
setLineHeight设置行间距
setAdditionalKerning设置额外文字间距

	label->setLineHeight(80);
	label->setAdditionalKerning(10);

下面是效果图:



下面讲解单独对LabelTTF的某个字符进行操作:
Sprite* label0 = label->getLetter(0);
	label0->setColor(Color3B::GREEN);   //对其字符设置颜色
	label0->setScale(2.0f);

	Sprite* label10 = label->getLetter(10);
	label10->setColor(Color3B::RED);
	label10->runAction(RepeatForever::create(RotateBy::create(1.0f, 90)));  //执行旋转动作




创建LabelAtlas标签


LabelAtlas是图片集标签,其中Atlas本意是“地图集”、“图片集”,这种标签显示的文字是从一个图片集中取出的,因此使用LabelAtlas需要额外加载图片集文件。LabelAtlas比LabelTTF快很多。LabelAtlas中的每个字符必须有固定的高度和宽度。并且LabelAtlas适合经常变化的数字,例如分数和金钱之类的数字。

auto label = LabelAtlas::create("0123456789", "Atlas.png", 24, 32, '0');
	this->addChild(label);
	label->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));

下面是效果图:



对于LabelAtlas来说需要的是一张PNG图片,并且将该资源放在Resource目录下。
对于LabelAtlas::create函数来说:
  1. //创建一个Atlas字体  
  2.     //第一个参数:显示的内容  
  3.     //第二个参数:图片名  
  4.     //第三个参数:图片的宽度  
  5.     //第四个参数:图片的高度  
  6.     //第五个参数:图片中第一个字的ASCALL码值  
可以写下述代码更改文字内容:
<span style="font-family: Arial, Helvetica, sans-serif;">	label->setString("123456");</span>



创建LabelBMFont标签

LabelBMFont是位图字体标签,需要添加字体文件:包括一个图片集(.png)和一个字符坐标文件(.fnt)。LabelBMFont比LabelTTF快很多。LabelBMFont中的每个字符的宽度是可变的。

auto label = LabelBMFont::create("Hello cocos!", "bitmapFontTest.fnt");
	label->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));
	this->addChild(label);


下面实现字体的旋转和缩放:
auto label = LabelBMFont::create("Hello cocos!", "bitmapFontTest.fnt");
	label->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));
	this->addChild(label);

	Sprite* label0 = label->getLetter(0);
	label0->setScale(2.0);
	label0->runAction(RepeatForever::create(RotateBy::create(1.0f, 90)));
使用LabelBMFont需要注意的是:图片集文件和坐标文件需要放置在Resources目录下,并且文件名要相同,图片集合和坐标文件是可以通过位图字体工具制作而成的。
<img src="https://img-blog.csdn.net/20150505162221798" alt="" />
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值