cocos2d-x实战 C++卷 学习笔记--第4章 使用标签
前言:
介绍cocos2d-x中 标签类。
cocos2d-x中 标签类 主要有三种:LabelTTF, LabelAtlas, 和 LabelBMFont。此外,在Cocos2d-x 3.x之后推出了 新的标签类 Label。
LabelTTF 标签类
LabelTTF是使用系统中的字体,它是最简单的标签类。
create 静态函数完整定义:(此处只介绍一种常用的 create 静态方法)
static LabelTTF * create(const std::string& string,
const std::string& fontName,
float fontSize,
const Size& dimensions = Size::ZERO,
TextHAlignment hAlignment = TextHAlignment::CENTER,
TextVAlignment vAlignment = TextVAlignment::TOP);
create函数的第1个参数是要显示的文字,第2个参数是系统字体名,第3个参数是字体的大小。后面省略了三个参数。
示例:
/////////// 4.2.1 LabelTTF
LabelTTF* labelOne = LabelTTF::create();
labelOne->setPosition(Point(origin.x + visibleSize.width / 2, //// 字体居中显示
origin.y + visibleSize.height - labelOne->getContentSize().height));
);
LabelAtlas 标签类
LabelAtlas 是图片集标签,其中的 Atlas 本意是“地图集”、“图片集”,这种标签显示的文字是从一个图片集中取出的,因此使用LabelAtlas需要额外加载图片集文件。
LabelAtlas 比 LabelTTF快很多。
LabelAtlas 中的每个字符必须有固定的高度和宽度。
create 静态函数完整定义:
static LabelAtlas* create(const std::string& string,
const std::string& charMapFile,
int itemWidth,
int itemHeight,
int startCharMap);
create 函数的第1个参数是要显示的文字,第2个参数是图片集文件,第3个参数是字符宽度,第4个参数是字符高度,第5个参数是开始字符。
示例:
///////////// 4.2.2 LabelAtlas
//创建 并初始化标签
auto labelTwo = LabelAtlas::create(, , ' ');
labelTwo->setPosition(Point(origin.x + visibleSize.width / 2 - labelTwo->getContentSize().width/2, //// 字体居中显示
origin.y + visibleSize.height - labelTwo->getContentSize().height * ));
// labelTwo->setAnchorPoint(ccp(0.5, 0.5));
);
注意:在 LabelAtlas 创建在字体中,anchorPoint默认好像是ccp(0,0) 的。你可以创建 LabelAtlas 字体 验证验证。
LabelBMFont 标签类
LabelBMFont是位图字体标签,需要添加字体文件:包括一个图片集(.png)和一个字符坐标文件(.fnt)。
LabelBMFont 比 LabelTTF 快很多。
LabelBMFont 中的每个字符的宽度是可变的。
create 静态函数完整定义:
static LabelBMFont * create(const std::string& str,
const std::string& fntFile,
,
TextHAlignment alignment = TextHAlignment::LEFT,
const Point& imageOffset = Point::ZERO);
create 函数第1个参数是要显示的文字,第2个参数是图片集文件(.fnt)。
示例:
///// 4.2.3 LabelBMFont
auto labelThree = LabelBMFont::create("hello LabelBMFont", "Demo3/BMFont.fnt");
labelThree->setPosition(Point(origin.x + visibleSize.width / 2 ,
origin.y + visibleSize.height - labelThree->getContentSize().height * ));
);
Cocos2d-x 3.x 标签类 Label
cocos2d-x 3.x 后推出了新的标签类Label,这种标签通过使用 FreeType 来使它在不同的平台上有相同的视觉效果。由于使用更快的缓存代理,它的渲染也将更加快速。Label 提供了描边和阴影等特性。
static Label* createWithSystemFont(const std::string& text, /// 要显示的文字
const std::string& font, /// 系统字体名
float fontSize, /// 字体的大小
const Size& dimensions = Size::ZERO, /// 在屏幕上占用区域的大小,可以省略
TextHAlignment hAlignment = TextHAlignment::LEFT, /// 文字横向对齐方式,可以省略
TextVAlignment vAlignment = TextVAlignment::TOP); /// 文字纵向对齐方式 ,可以省略
createWithSystemFont 示例:
通过 createWithSystemFont 函数创建 Label 对象
auto label1 = Label::createWithSystemFont();
label1->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - label1->getContentSize().height));
);
static Label * createWithTTF(const std::string& text,
const std::string& fontFile, /// 字体文件
float fontSize,
const Size& dimensions = Size::ZERO,
TextHAlignment hAlignment = TextHAlignment::LEFT,
TextVAlignment vAlignment = TextVAlignment::TOP);
createWithTTF 示例:
通过 createWithTTF 创建 TTF 字体标签对象
auto label2 = Label::createWithTTF();
label2->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
);
static Label* createWithTTF(const TTFConfig& ttfConfig,
const std::string& text,
TextHAlignment alignment = TextHAlignment::LEFT,
);
createWithTTF 示例:
通过 指定的 TTFConfig 创建 TTF 字体标签对象
TTFConfig ttfConfig(, GlyphCollection::DYNAMIC);
auto label3 = Label::createWithTTF(ttfConfig, "Hello Label3");
label3->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
);
ttfConfig.outlineSize = ;
auto label4 = Label::createWithTTF(ttfConfig, "hello Label4");
label4->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
label4->, , , ), Size(, -));
label4->setColor(Color3B::RED);
);
static Label* createWithBMFont(const std::string& bmfontFilePath,
const std::string& text,
const TextHAlignment& alignment = TextHAlignment::LEFT,
,
const Point& imageOffset = Point::ZERO);
示例:
通过 createWithBMFont 创建位图字体标签对象
auto label5 = Label::createWithBMFont("Demo3/BMFont.fnt", "Hello Label5");
label5->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
);
补充说明:
Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin();
标签中文乱码问题:
auto testLabel1 = LabelTTF::create();
testLabel1->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
);
auto testLabel2 = LabelBMFont::create("中国2", "bitmapFontChinese.fnt");
testLabel2->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
);
auto testLabel3 = Label::createWithBMFont("bitmapFontChinese.fnt", "中国3");
testLabel3->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
);
TTFConfig ttfConfig(, GlyphCollection::DYNAMIC);
auto testLabel4 = Label::createWithTTF(ttfConfig, "晚上好!", TextHAlignment::CENTER, visibleSize.width);
testLabel4->setPosition(Point(origin.x + visibleSize.width / , origin.y + visibleSize.height - ));
);
在windows中文环境下使用Visual Studio创建的源程序文件是采用 GBK 编码。
解决方法:
方法1:在Visual Studio工具中选择【文件】-->【高级保存】,选择【Unicode(UTF-8无签名) - 代码页 65001】,单击确定按钮保存。
方法2:用记事本打开文件,另存为 UTF-8 。
cocos2d-x实战 C++卷 学习笔记--第4章 使用标签的更多相关文章
- cocos2d-x实战 C++卷 学习笔记--第4章 字符串 __String类
前言: <cocos2d-x实战C++卷>学习笔记.(cocos2d-x 是3.0版本) 介绍 cocos2d-x 通用的字符串类 __String . 使用cocos2d::__Str ...
- cocos2d-x实战 C++卷 学习笔记--第7章 动作、特效(一)
前言: 介绍cocos2d-x中的动作.特效. 动作: 动作(action)包括基本动作和基本动作的组合,这些基本动作有缩放.移动.旋转等,而且这些动作变化的速度也可以设定. 动作类是 Action. ...
- cocos2d-x实战 C++卷 学习笔记--第6章 场景与层
前言: 一个场景(Scene)是由多个层(Layer)组成,而且层的个数要至少是1,不能为0. 场景切换 场景切换相关函数 1)void runWithScene(Scene* scene) 该函 ...
- cocos2d-x实战 C++卷 学习笔记--第4章 使用菜单
前言: 菜单中包含菜单项,菜单项类是 MenuItem ,每个菜单项都有三个基本状态:正常.选中和禁止. (MenuItem)菜单分类: (文本菜单)MenuItemLabel : MenuItemA ...
- cocos2d-x实战 C++卷 学习笔记--第4章 win32平台下中文乱码问题
前言: 将GBK编码的字符串转为UTF-8编码.(通俗点说就是解决中文乱码问题) 简要介绍: 在Win32平台下通过 log 输出中文字符时,会出现中文乱码问题.同样的代码在 ios 和 Androi ...
- cocos2d-x实战 C++卷 学习笔记--第5章 精灵
前言: 精灵类是Sprite类.它的子类有PhysicsSprite 和 Skin. PhysicsSprite 是物理引擎精灵类,而Skin是皮肤精灵类,用于骨骼动画. 创建Sprite精灵对象 创 ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- Spring实战第八章学习笔记————使用Spring Web Flow
Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...
随机推荐
- hdoj 2817 A sequence of numbers【快速幂】
A sequence of numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- Python用特殊符号切割字符串并生成list(简单)
采用re模块,可以指定字符进行切割,例如切割IP地址: import socket import re localIP = socket.gethostbyname(socket.gethostnam ...
- VirtualBox NAT方式与主机互相通信
之前说过,桥接方式适合在统一的网络环境中使用(一样的网关和许可). 如果网络环境发生改变,那就难堪了 -- 这就是我遇到的问题,公司里每人的IP都是固定的. 解决办法,改为NAT网络地址转换模式. 但 ...
- 委托、匿名函数、Lambda表达式和事件的学习
委托: 还记得C++里的函数指针么?大家可以点击这里查看一下以前的笔记.C#的委托和C++中的函数指针效果一致. 当我们需要将函数作为对象进行传递和使用时就需要用到委托. 下面我们看一个例子: usi ...
- ASP.NET MVC- EF基础
EF是在ADO.NET的基础上做进一步封装,以后如果做新的项目我可能会考虑不用ADO.NET,而用EF. 其实很久以前我就接触过EF,可是太久没用,有些忘记了,前几天重温,也做了一点笔记.记录如下: ...
- SQL Server 重新恢复自动编号列的序号
1. truncate table tablename2. DBCC CHECKIDENT (tablename,reseed,1) truncate命令不但会清除所有的数据,还会将IDENTIT ...
- OpenCV训练分类器制作xml文档
OpenCV训练分类器制作xml文档 (2011-08-25 15:50:06) 转载▼ 标签: 杂谈 分类: 学习 我的问题:有了opencv自带的那些xml人脸检测文档,我们就可以用cvLoad( ...
- 别名的应用(New-Alias)
New-Alias -name appcmd -value $env:windir\system32\inetsrv\appcmd.exe 这样就可以在当前PS环境下直接使用appcmd了
- JavaScript中的Partial Application和Currying
这篇文章是一篇学习笔记,记录我在JS学习中的一个知识点及我对它的理解,知识点和技巧本身并不是我原创的.(引用或参考到的文章来源在文末) 先不解释Partial Application(偏函数应用)和C ...
- 使用 Windows 窗体 TextBox 控件创建密码文本框
密码框是一种 Windows 窗体文本框,它在用户键入字符串时显示占位符. 创建密码文本框 将 TextBox 控件的 PasswordChar 属性设置为某个特定字符. PasswordChar 属 ...