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

Label类的类图如下图所示:

创建Label类静态create函数常用的有如下几个:

  1. static Label* createWithSystemFont(conststd::string &text,             //是要显示的文字
  2. const std::string& font,                                                       //系统字体名
  3. float fontSize,                                                            //字体的大小
  4. const Size& dimensions = Size::ZERO,                            //在屏幕上占用的区域大小,可省略
  5. TextHAlignment  hAlignment = TextHAlignment::LEFT,          //文字横向对齐方式,可省略
  6. TextVAlignment  vAlignment = TextVAlignment::TOP)   //文字纵向对齐方式,可省略
  7. static Label* createWithTTF(conststd::string & text,
  8. const std::string &  fontFile,                                                              //字体文件
  9. float fontSize,
  10. const Size &  dimensions = Size::ZERO,                                           //可省略
  11. TextHAlignment          hAlignment= TextHAlignment::LEFT,          //可省略
  12. TextVAlignment           vAlignment= TextVAlignment::TOP              //可省略
  13. )
  14. static Label* createWithTTF(constTTFConfig& ttfConfig,
  15. const std::string& text,
  16. TextHAlignment alignment =TextHAlignment::LEFT,
  17. int maxLineWidth = 0
  18. )
  19. static Label* createWithBMFont(conststd::string& bmfontFilePath,          //位图字体文件
  20. const std::string&  text,
  21. const TextHAlignment& alignment =TextHAlignment::LEFT, //可省略
  22. int maxLineWidth = 0,                                                                       //可省略
  23. const Point&  imageOffset = Point::ZERO                                //可省略
  24. )

其中createWithSystemFont是创建系统字体标签对象,createWithTTF是创建TTF字体标签对象,createWithBMFont是创建位图字体标签对象。

下面我们通过一个实例介绍一下,它们的使用。这个实例如图下图所示。

下面我们看看HelloWorldScene.cpp中init函数如下:

  1. bool HelloWorld::init()
  2. {
  3. if ( !Layer::init() )
  4. {
  5. return false;
  6. }
  7. Size visibleSize = Director::getInstance()->getVisibleSize();
  8. Point origin = Director::getInstance()->getVisibleOrigin();
  9. auto closeItem = MenuItemImage::create(
  10. "CloseNormal.png",
  11. "CloseSelected.png",
  12. CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
  13. closeItem->setPosition(Point(origin.x+ visibleSize.width - closeItem->getContentSize().width/2 ,
  14. origin.y + closeItem->getContentSize().height/2));
  15. auto menu = Menu::create(closeItem, NULL);
  16. menu->setPosition(Point::ZERO);
  17. this->addChild(menu, 1);
  18. autolabel1 = Label::createWithSystemFont("Hello World1","Arial", 36);                                   ①
  19. label1->setPosition(Point(origin.x+ visibleSize.width/2,
  20. origin.y + visibleSize.height - 100));
  21. this->addChild(label1,1);
  22. autolabel2 = Label::createWithTTF("Hello World2", "fonts/MarkerFelt.ttf", 36);                       ②
  23. label2->setPosition(Point(origin.x+ visibleSize.width/2,
  24. origin.y + visibleSize.height - 200));
  25. this->addChild(label2,1);
  26. autolabel3 = Label::createWithBMFont("fonts/BMFont.fnt", "HelloWorld3");                            ③
  27. label3->setPosition(Point(origin.x+ visibleSize.width/2,
  28. origin.y + visibleSize.height - 300));
  29. this->addChild(label3,1);
  30. TTFConfigttfConfig("fonts/Marker Felt.ttf",
  31. 36,
  32. GlyphCollection::DYNAMIC);                                                                                                  ④
  33. autolabel4 = Label::createWithTTF(ttfConfig, "Hello World4");                                                  ⑤
  34. label4->setPosition(Point(origin.x+ visibleSize.width/2,
  35. origin.y + visibleSize.height - 400));
  36. this->addChild(label4, 1);
  37. ttfConfig.outlineSize= 4;                                                                                                     ⑥
  38. autolabel5 = Label::createWithTTF(ttfConfig, "Hello World5");                                                  ⑦
  39. label5->setPosition(Point(origin.x+ visibleSize.width/2,
  40. origin.y + visibleSize.height - 500));
  41. label5->enableShadow(Color4B(255,255,255,128),Size(4, -4));                                        ⑧
  42. label5->setColor(Color3B::RED);                                                                                                 ⑨
  43. this->addChild(label5,1);
  44. return true;
  45. }

在上面的代码中第①是通过createWithSystemFont函数创建Label对象,第②行代码是通过createWithTTF是创建TTF字体标签对象,第③行代码是createWithBMFont是创建位图字体标签对象。

第④行代码TTFConfig ttfConfig("fonts/Marker Felt.ttf", 36, GlyphCollection::DYNAMIC)是创建一个TTFConfig结构体变量,TTFConfig结构体的定义如下:

  1. _ttfConfig(constchar* filePath = "",                                                                         //字体文件路径
  2. int  size = 12,                                                                                            //字体大小
  3. constGlyphCollection& glyphCollection = GlyphCollection::DYNAMIC,     //字体库类型
  4. constchar * customGlyphCollection = nullptr,                                     //自定义字体库
  5. booluseDistanceField = false,                                                                         //用户是否可缩放字体
  6. intoutline = 0                                                                                                      //字体描边
  7. )

第⑤行代码Label::createWithTTF(ttfConfig,"Hello World4")是通过指定TTFConfig创建TTF字体标签。第⑥行代码ttfConfig.outlineSize = 4设置TTFConfig的描边字段。第⑦行代码Label::createWithTTF(ttfConfig,"Hello World5")是重新创建TTF字体标签。

第⑧行代码label5->enableShadow(Color4B(255,255,255,128),Size(4, -4))是设置标签的阴影效果。第⑨行代码label5->setColor(Color3B::RED)是设置标签的颜色。


[1] FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件。——引自于百度百科http://baike.baidu.com/view/4579855.htm

Cocos2d-x 3.0标签类Label的更多相关文章

  1. Flutter 标签类控件大全Chip

    老孟导读:Flutter内置了多个标签类控件,但本质上它们都是同一个控件,只不过是属性参数不同而已,在学习的过程中可以将其放在放在一起学习,方便记忆. RawChip Material风格标签控件,此 ...

  2. JavaEE自定义标签:标签类的创建、tld配置文件的创建(位置、如何创建)、Web-XML配置、JSP应用

    1.标签 以类似于html标签的方式实现的java代码的封装. 第一:形成了开发标签的技术标准---自定义标签的技术标准. 第二:java标准标签库(sun之前自己开发的一系列的标签的集合)jstl, ...

  3. 小tips:JS语法之标签(label)

    JavaScript语言允许,语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置,标签的格式如下. label: statement 标签可以是任意的标识符,但是不能是保留字,语句 ...

  4. EffectiveJava(20)使用子类型化优化标签类

    标签类:其中有许多样板代码,包括枚举声明,标签域和条件语句 如果要给它添加风格,除了有权限修改源码之外,你还得给每个条件语句都添加一个条件,否则就会在运行时失败 标签类过于冗长,容易出错,并且效率低下 ...

  5. 列表框、分组列表框、标签(label)、分组框(fieldset)、框架(frameset)

    列表框(select) 下拉列表,用户可以从一些可选项中选择. 示例:简单的下拉列表 <select name="country"> <option value= ...

  6. EF 5.0 帮助类

    EF 5.0 帮助类 加入命名空间: using System; using System.Data; using System.Data.Entity; using System.Data.Enti ...

  7. EffectiveJava——类层次优于标签类

    标签类: 有时候,可能会遇到带有两种甚至更多钟风格的类的实例的类,并包含表示实例风格的(tag)域.例如下面这个类,它能够表示圆形或者矩形: /** * 类层次优先与标签类 * @author wei ...

  8. EF 5.0 帮助类 增删改查

    原文地址:http://www.cnblogs.com/luomingui/p/3362813.html EF 5.0 帮助类 加入命名空间: using System; using System.D ...

  9. Aspose.Cells for .NET 8.5.0 工具类

    基于 Aspose.Cells for .NET 8.5.0 工具类, Aspose.Cells for .NET 8.5.0 这个自己去CSDN下载里面有破解的,没有破解的导出excel的时候会(A ...

随机推荐

  1. BZOJ 1084: [SCOI2005]最大子矩阵 DP

    1084: [SCOI2005]最大子矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n* ...

  2. codeforces Gym 100187F F - Doomsday 区间覆盖贪心

    F. Doomsday Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/F ...

  3. C#生成软件注册码

    开发软件时,当用到商业用途时,注册码与激活码就显得很重要了.现在的软件破解技术实在在强了,各种国内外大型软件都有注册机制,但同时也不断地被破解.下面发的只是一个常用版本,发出源码被破就更容易了,但我们 ...

  4. Circle-Progress-View

    https://github.com/jakob-grabner/Circle-Progress-View

  5. android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索

    最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车.公交.步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两 ...

  6. JVM系列文章(四):类载入机制

    作为一个程序猿,只知道怎么用是远远不够的. 起码,你须要知道为什么能够这么用.即我们所谓底层的东西. 那究竟什么是底层呢?我认为这不能一概而论.以我如今的知识水平而言:对于Web开发人员,TCP/IP ...

  7. 深入解析ext2文件系统之mke2fs

      上一遍博文的重点其实将ext2整体的组织框架,我们知道了ext2文件系统由块组组成,每个块组里面的组织形式.我们甚至直接把超级块和组描述符里面的内容,用十六进制形式展现了出来.这篇博文主要讲述如何 ...

  8. Blocks 推出矩阵公式。矩阵快速密

    Blocks 设涂到第I块时,颜色A,B都为偶数的数量为ai,一奇一偶的数量为bi,都为奇数为ci,  那么涂到第i+1快时有 a[i+1]=2*a[i]+b[i]+0*c[i]; b[i+1]=2* ...

  9. spring mvc 的各种参数的绑定方式

    本文转自http://www.cnblogs.com/HD/p/4107674.html SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: ...

  10. DIH处理包含回车符换行符html标签内容的文本

    数据样例:2010-03-19 10:18:06130010543234203guqun09-12月-12liuyin18-6月 -14<P style="MARGIN-TOP: 0p ...