前言:

介绍cocos2d-x中 标签类。

cocos2d-x中 标签类 主要有三种:LabelTTF, LabelAtlas, 和 LabelBMFont。此外,在Cocos2d-x 3.x之后推出了 新的标签类 Label。

LabelTTF 标签类

LabelTTF是使用系统中的字体,它是最简单的标签类。

create 静态函数完整定义:(此处只介绍一种常用的 create 静态方法)

  1. static LabelTTF * create(const std::string& string,
  2. const std::string& fontName,
  3. float fontSize,
  4. const Size& dimensions = Size::ZERO,
  5. TextHAlignment hAlignment = TextHAlignment::CENTER,
  6. TextVAlignment vAlignment = TextVAlignment::TOP);

create函数的第1个参数是要显示的文字,第2个参数是系统字体名,第3个参数是字体的大小。后面省略了三个参数。

示例:

  1. /////////// 4.2.1 LabelTTF
  2. LabelTTF* labelOne = LabelTTF::create();
  3. labelOne->setPosition(Point(origin.x + visibleSize.width / 2, //// 字体居中显示
  4. origin.y + visibleSize.height - labelOne->getContentSize().height));
  5. );

LabelAtlas 标签类

LabelAtlas 是图片集标签,其中的 Atlas 本意是“地图集”、“图片集”,这种标签显示的文字是从一个图片集中取出的,因此使用LabelAtlas需要额外加载图片集文件。

LabelAtlas 比 LabelTTF快很多。

LabelAtlas 中的每个字符必须有固定的高度和宽度。

create 静态函数完整定义:

  1. static LabelAtlas* create(const std::string& string,
  2. const std::string& charMapFile,
  3. int itemWidth,
  4. int itemHeight,
  5. int startCharMap);

create 函数的第1个参数是要显示的文字,第2个参数是图片集文件,第3个参数是字符宽度,第4个参数是字符高度,第5个参数是开始字符。

示例:

  1. ///////////// 4.2.2 LabelAtlas
  2. //创建 并初始化标签
  3. auto labelTwo = LabelAtlas::create(, , ' ');
  4. labelTwo->setPosition(Point(origin.x + visibleSize.width / 2 - labelTwo->getContentSize().width/2, //// 字体居中显示
  5. origin.y + visibleSize.height - labelTwo->getContentSize().height * ));
  6. // labelTwo->setAnchorPoint(ccp(0.5, 0.5));
  7. );

注意:在 LabelAtlas 创建在字体中,anchorPoint默认好像是ccp(0,0) 的。你可以创建 LabelAtlas 字体 验证验证。

LabelBMFont 标签类

LabelBMFont是位图字体标签,需要添加字体文件:包括一个图片集(.png)和一个字符坐标文件(.fnt)。

LabelBMFont 比 LabelTTF 快很多。

LabelBMFont 中的每个字符的宽度是可变的。

create 静态函数完整定义:

  1. static LabelBMFont * create(const std::string& str,
  2. const std::string& fntFile,
  3. ,
  4. TextHAlignment alignment = TextHAlignment::LEFT,
  5. const Point& imageOffset = Point::ZERO);

create 函数第1个参数是要显示的文字,第2个参数是图片集文件(.fnt)。

示例:

  1. ///// 4.2.3 LabelBMFont
  2. auto labelThree = LabelBMFont::create("hello LabelBMFont", "Demo3/BMFont.fnt");
  3. labelThree->setPosition(Point(origin.x + visibleSize.width / 2 ,
  4. origin.y + visibleSize.height - labelThree->getContentSize().height * ));
  5. );

Cocos2d-x 3.x 标签类 Label

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

  1. static Label* createWithSystemFont(const std::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); /// 文字纵向对齐方式 ,可以省略

createWithSystemFont 示例:

通过 createWithSystemFont 函数创建 Label 对象

  1. auto label1 = Label::createWithSystemFont();
  2. label1->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - label1->getContentSize().height));
  3. );
  1. static Label * createWithTTF(const std::string& text,
  2. const std::string& fontFile, /// 字体文件
  3. float fontSize,
  4. const Size& dimensions = Size::ZERO,
  5. TextHAlignment hAlignment = TextHAlignment::LEFT,
  6. TextVAlignment vAlignment = TextVAlignment::TOP);

createWithTTF 示例:

通过 createWithTTF 创建 TTF 字体标签对象

  1. auto label2 = Label::createWithTTF();
  2. label2->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
  3. );
  1. static Label* createWithTTF(const TTFConfig& ttfConfig,
  2. const std::string& text,
  3. TextHAlignment alignment = TextHAlignment::LEFT,
  4. );

createWithTTF 示例:

通过 指定的 TTFConfig 创建 TTF 字体标签对象

  1. TTFConfig ttfConfig(, GlyphCollection::DYNAMIC);
  2. auto label3 = Label::createWithTTF(ttfConfig, "Hello Label3");
  3. label3->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
  4. );
  5. ttfConfig.outlineSize = ;
  6. auto label4 = Label::createWithTTF(ttfConfig, "hello Label4");
  7. label4->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
  8. label4->, , , ), Size(, -));
  9. label4->setColor(Color3B::RED);
  10. );
  1. static Label* createWithBMFont(const std::string& bmfontFilePath,
  2. const std::string& text,
  3. const TextHAlignment& alignment = TextHAlignment::LEFT,
  4. ,
  5. const Point& imageOffset = Point::ZERO);

示例:

通过 createWithBMFont 创建位图字体标签对象

  1. auto label5 = Label::createWithBMFont("Demo3/BMFont.fnt", "Hello Label5");
  2. label5->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
  3. );

补充说明:

Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin();

标签中文乱码问题:

  1. auto testLabel1 = LabelTTF::create();
  2. testLabel1->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
  3. );
  4.  
  5. auto testLabel2 = LabelBMFont::create("中国2", "bitmapFontChinese.fnt");
  6. testLabel2->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
  7. );
  8.  
  9. auto testLabel3 = Label::createWithBMFont("bitmapFontChinese.fnt", "中国3");
  10. testLabel3->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
  11. );
  12.  
  13. TTFConfig ttfConfig(, GlyphCollection::DYNAMIC);
  14. auto testLabel4 = Label::createWithTTF(ttfConfig, "晚上好!", TextHAlignment::CENTER, visibleSize.width);
  15. testLabel4->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
  16. );

在windows中文环境下使用Visual Studio创建的源程序文件是采用 GBK 编码。

解决方法:

方法1:在Visual Studio工具中选择【文件】-->【高级保存】,选择【Unicode(UTF-8无签名) - 代码页 65001】,单击确定按钮保存。

方法2:用记事本打开文件,另存为 UTF-8 。

cocos2d-x实战 C++卷 学习笔记--第4章 使用标签的更多相关文章

  1. cocos2d-x实战 C++卷 学习笔记--第4章 字符串 __String类

    前言: <cocos2d-x实战C++卷>学习笔记.(cocos2d-x 是3.0版本) 介绍 cocos2d-x 通用的字符串类  __String . 使用cocos2d::__Str ...

  2. cocos2d-x实战 C++卷 学习笔记--第7章 动作、特效(一)

    前言: 介绍cocos2d-x中的动作.特效. 动作: 动作(action)包括基本动作和基本动作的组合,这些基本动作有缩放.移动.旋转等,而且这些动作变化的速度也可以设定. 动作类是 Action. ...

  3. cocos2d-x实战 C++卷 学习笔记--第6章 场景与层

    前言: 一个场景(Scene)是由多个层(Layer)组成,而且层的个数要至少是1,不能为0. 场景切换 场景切换相关函数 1)void  runWithScene(Scene*  scene) 该函 ...

  4. cocos2d-x实战 C++卷 学习笔记--第4章 使用菜单

    前言: 菜单中包含菜单项,菜单项类是 MenuItem ,每个菜单项都有三个基本状态:正常.选中和禁止. (MenuItem)菜单分类: (文本菜单)MenuItemLabel : MenuItemA ...

  5. cocos2d-x实战 C++卷 学习笔记--第4章 win32平台下中文乱码问题

    前言: 将GBK编码的字符串转为UTF-8编码.(通俗点说就是解决中文乱码问题) 简要介绍: 在Win32平台下通过 log 输出中文字符时,会出现中文乱码问题.同样的代码在 ios 和 Androi ...

  6. cocos2d-x实战 C++卷 学习笔记--第5章 精灵

    前言: 精灵类是Sprite类.它的子类有PhysicsSprite 和 Skin. PhysicsSprite 是物理引擎精灵类,而Skin是皮肤精灵类,用于骨骼动画. 创建Sprite精灵对象 创 ...

  7. Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver

    1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...

  8. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥

    1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...

  9. Spring实战第八章学习笔记————使用Spring Web Flow

    Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...

随机推荐

  1. 似曾相识的 RecyclerView

    一.常用方法 RecyclerView 与 ListView.GridView 类似,都是可以显示同一种类型 View 的集合的控件. 首先看看最简单的用法,四步走: ①接入 build.gradle ...

  2. jquery validation 简单验证手机号码

    js代码 // 手机号码验证 jQuery.validator.addMethod("isMobile", function(value, element) { var lengt ...

  3. Unity3D4.x之AssetBundle学习笔记

    关于AssetBundle AssetBundle可用来将多个资源打包为一个文件,实现动态下载和更新.需要注意的是Unity3D5.x以后对打包方式进行了升级,不用再在依赖关系上伤透脑筋,但是和4.x ...

  4. ABAP ALV 颜色设置(行,列,单元格)

    BCALV_EDIT_03 http://blog.sina.com.cn/s/blog_a87b19300102who3.html 关于ALV表格颜色,这种需求在项目中会经常用到. 列颜色 列的颜色 ...

  5. 淘宝IP地址查询

    官方网址:http://ip.taobao.com/index.php 相关文章: http://www.cnblogs.com/zetee/p/3482085.html http://www.cnb ...

  6. 教你50招提升ASP.NET性能(十二):在生产环境,仔细考虑你需要记录哪些日志

    (18)When in production, carefully consider what you need to log 招数18: 在生产环境,仔细考虑你需要记录哪些日志 Many peopl ...

  7. 关于python文件操作 (转载)

    总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...

  8. js Uncaught SyntaxError: Unexpected token错误

    今天遇到js报错Uncaught SyntaxError: Unexpected token 不知道是什么原因,并且js还会继续往下执行. 经过排查竟然是在保存行的上面有个if少一个大括号,真是坑爹啊 ...

  9. 【C/C++多线程编程之六】pthread相互排斥量

    多线程编程之线程同步相互排斥量       Pthread是 POSIX threads 的简称,是POSIX的线程标准.          Pthread线程同步指多个线程协调地,有序地同步使用共享 ...

  10. UpdatePanel的用法

    UpdatePanel控件也是Ajax里用得最多的控件之中的一个,UpdatePanel控件是用来局部更新网页上的内容,网页上要局部更新的内容必须放在UpdatePanel控件里,他必须和上一次说的S ...