最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
cocos2d-x label字符串不同大小
在 Cocos2d-x 3.x 版本中,废弃了 2.x 里的 LabelTTF、LabelAtlas、LabelBMFont 三个字体类,取而代之的是全新的字体标签 Label。实际上,Label 将这三个字体类进行了融合,实现了统一的管理与渲染,这使得创建字体标签 Label 的方式更加统一和方便。
3.x 中 Label 的特性
在 3.x 中,Label 支持四种方式的标签创建,新增了阴影(Shadow)、轮廓(Outline)、发光(Glow)效果的支持,还支持文字内容的行间距、文字间距、自动换行的设置。
创建方式
- 创建系统原生字体 API:
createWithSystemFont - 创建 TTF:
createWithTTF(原LabelTTF) - 创建 CharMap:
createWithCharMap(原LabelAtlas) - 创建 BMFont:
createWithBMFont(原LabelBMFont)
Label 的属性与方法
- 文字效果渲染:
Shadow、Outline、Glow - 对齐方式:
TextHAlignment、TextVAlignment - Label 的尺寸大小
- 自动换行
- 行间距、文字间距
- 单独设置某个字符
PS:关于图片资源,请在 Cocos2dx 给出的官方样例 cpp-tests 中寻找。
具体创建方式
createWithSystemFont
这是创建系统原生字体的 API,创建方式如下:
static Label* createWithSystemFont(
const std::string& text, // 字符串内容
const std::string& font, // 字体(字体名称、或字体文件)
float fontSize, // 字号
const Size& dimensions = Size::ZERO, // label 的尺寸大小,默认不设置尺寸
TextHAlignment hAlignment = TextHAlignment::LEFT, // 水平对齐方式,默认左对齐
TextVAlignment vAlignment = TextVAlignment::TOP // 垂直对齐方式,默认顶部对齐
);
使用举例:
// 使用系统的字体名称 "Arial" 来创建
Label* lb1 = Label::createWithSystemFont("123abc", "Arial", 24);
createWithTTF
创建 TTF 的方式有以下两种:
方式一:与 2.x 中 LabelTTF 的创建类似
不过使用的 fontFile 必须为字体文件,不支持使用系统字体名称来创建。
方式二:通过 TTF 的配置信息数据结构 TTFConfig 来创建
1. TTFConfig 配置
typedef struct _ttfConfig
{
std::string fontFilePath; // 字体文件路径,如 "fonts/Arial.ttf"
int fontSize; // 字体大小,默认 12
GlyphCollection glyphs; // 使用的字符集,默认 "DYNAMIC"
const char *customGlyphs;
bool distanceFieldEnabled; // 是否让字体紧凑,默认 false
int outlineSize; // 字体轮廓大小,默认 0
// 构造函数
_ttfConfig(
const char* filePath = "",
int size = 12,
const GlyphCollection& glyphCollection = GlyphCollection::DYNAMIC,
const char *customGlyphCollection = nullptr,
bool useDistanceField = false,
int outline = 0
);
} TTFConfig;
2. 使用 TTFConfig 创建 TTF
TTFConfig ttfConfig;
ttfConfig.fontFilePath = "fonts/Marker Felt.ttf"; // 必须配置
ttfConfig.fontSize = 12;
ttfConfig.distanceFieldEnabled = false;
ttfConfig.outlineSize = 0;
ttfConfig.glyphs = GlyphCollection::DYNAMIC;
ttfConfig.customGlyphs = nullptr;
// 使用 TTFConfig 配置,来创建 TTF
Label* lb3 = Label::createWithTTF(ttfConfig, "123abc");
createWithCharMap
CharMap 的用法与 2.x 中的 LabelAtlas 一样,一般用来显示数字,不过也可以用来显示其他字符,如英文字符。字体文件资源一般来自一张 .png 图片,或 .plist 文件。
注意:图片中每个字符的大小必须是固定的,若要改变字体大小,只能通过 setScale 放缩来实现。
创建 CharMap 有三种方式:
- 使用
.png图片创建 - 使用纹理
Texture2D创建 - 使用
.plist创建
从图片中从左到右,一块一块截取。从字符 startCharMap 开始一一对应,第一块小图片对应字符 startCharMap;第二块小图片对应字符 startCharMap + 1;第三块对应 startCharMap + 2……以此类推。
注意:startCharMap 为 ASCII 码,即数字 '0' 为 48。
// 使用 .png 图片创建
static Label* createWithCharMap(const std::string& charMapFile, int itemWidth, int itemHeight, int startCharMap);
// 使用纹理 Texture2D 创建
static Label* createWithCharMap(Texture2D* texture, int itemWidth, int itemHeight, int startCharMap);
// 使用 .plist 创建
static Label* createWithCharMap(const std::string& plistFile);