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

原创 2015年05月04日 17:41:49

在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="http://img.blog.csdn.net/20150505162221798" alt="" />
版权声明:本文为博主原创文章,未经博主允许不得转载。(讨论问题+Q763949771)

相关文章推荐

Cocos2d-x 3.0标签类Label

Cocos2d-x 3.0后推出了新的标签类Label,这种标签通过使用FreeType[1]来使它在不同的平台上有相同的视觉效果。由于使用更快的缓存代理,它的渲染也将更加快速。Label提供了描边和...

COCOS学习笔记--4种Label文字标签及其渲染特性

游戏开发中所有的文字信息的显示都会用到字体标签Label,比如玩家名字的显示、道具信息、公告栏通知等等。这篇博客就对Cocos2d-x的字体标签的使用做一下介绍。 Cocos3.0版本后废弃了之前的...

cocos2dx 3.x Label使用

cocos2dx cc.label字体颜色在3.x中,Label支持四种方式的标签创建。并新增了阴影Shadow、轮廓Outline、发光Glow效果的支持。还支持文字内容的行间距、文字间距、自动换行...

cocos2dx中的label可点击事件

cocos2dx中的label可点击事件: Label* agreeText = Label::create(G2U("我已经详细阅读并同意《咪咕游戏许可及服务协议》"), "Arial", ...

Cocos2d-x游戏开发之CCLabelTTF标签详解之Create方法(设置自动换行的标签)和换行符的巧妙使用(十六)(高级篇)

在上面的一篇文章之中,我们讲解了标签的对齐方式,设置后,可以固定标签的位置,向固定的方向增加内容,就像是写字一样的。 好的,问题来了,写字的时候,当一行足够填写内容的时候,上面的方法是OK的;当我们要...

【cocos2d-x游戏开发】使用关节

在场景中我们可以使用关节来让两个刚体联系在一起。 首先创建一个物理世界

Cocos2d-x游戏开发之音效使用

在我们的游戏开发之中,除了UI是重中之重以外,音乐同样是不可缺少的重要部分。 因为人有两只眼睛和耳朵。 现在先来看引入的库文件,总的来说比较简单。 首先引入的库文件,并使用命名空间: #incl...

Cocos2d-x-Lua 游戏中使用Lua脚本进行游戏开发

对于游戏公司而言,采用游戏脚本lua、python等进行开发也很常见,但是很多童鞋对脚本并没有很熟悉的概念,本篇则向大家简单介绍脚本的用途以及在Cocos2dx基础用法; Lua和python这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)