关闭

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

标签: coocs游戏开发字体标签
1795人阅读 评论(0) 收藏 举报
分类:

在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="" />
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:94006次
    • 积分:2295
    • 等级:
    • 排名:第18438名
    • 原创:133篇
    • 转载:27篇
    • 译文:0篇
    • 评论:24条
    最新评论