cocos2dx lable字体加粗
在 Cocos2d-x 3.0 版本之前,我们通常使用 CCLabelTTF
、CCLabelBMFont
和 CCLabelAtlas
来创建文本标签。不过,在 3.0 版本发布之后,虽然这些旧的标签仍然可以使用,但我们有了更好的选择。
Cocos2d-x 3.0 引入了一种新的文本标签 Label
,它具有以下优势:
- 使用 FreeType 技术,确保在不同平台上具有相同的视觉效果。
- 采用更快的缓存代理,渲染速度更快。
- 提供了绘边、阴影等特效特性。
鉴于 Label
的这些优点,我决定放弃使用 LabelTTF
和 LabelBMFont
。
常用接口一览
由于很多接口与 LabelTTF
等类似,下面仅列出一些不同的接口:
// 创建普通的文本标签,效果和 CCLabelTTF::create(...) 一样。TTFConfig 下面会介绍
static Label * create(const std::string& text, const std::string& fontName, float fontSize,
const Size& dimensions = Size::ZERO, TextHAlignment hAlignment = TextHAlignment::LEFT,
TextVAlignment vAlignment = TextVAlignment::TOP);
// 通过读取 TTFConfig 配置的方式创建标签
static Label* createWithTTF(const TTFConfig& ttfConfig, const std::string& text, TextHAlignment alignment = TextHAlignment::LEFT, int lineWidth = 0);
// 使用 .fnt 的方式创建标签,类似 CCLabelBMFont::create()
static Label* createWithBMFont(const std::string& bmfontFilePath, const std::string& text,
const TextHAlignment& alignment = TextHAlignment::LEFT, int lineWidth = 0,
const Point& imageOffset = Point::ZERO);
// 使用 .png 的方式创建标签,类似 CCLabelAtlas::create()
static Label * createWithCharMap(const std::string& charMapFile, int itemWidth, int itemHeight, int startCharMap);
// 启用阴影效果
virtual void enableShadow(const Color3B& shadowColor = Color3B::BLACK, const Size &offset = Size(2,-2), float opacity = 0.75f, int blurRadius = 0);
// 启用描边效果
virtual void enableOutline(const Color4B& outlineColor, int outlineSize = -1);
// 启用荧光效果,只支持 TTF
virtual void enableGlow(const Color3B& glowColor);
// 取消所有特效
virtual void disableEffect();
// 特效的种类
enum class LabelEffect {
NORMAL, // 普通标签
OUTLINE, // 有描边的标签
SHADOW, // 有阴影的标签
GLOW // 有荧光的标签
};
TTFConfig 介绍
TTFConfig
是一个结构体,包含了创建 TTF 标签的常用配置,具体如下:
typedef struct _ttfConfig
{
std::string fontFilePath; // 文件路径
int fontSize; // 字体大小,默认 12
GlyphCollection glyphs; // 使用的字符集,默认 DYNAMIC
const char *customGlyphs; // 自定义字符集
bool distanceFieldEnabled; // 是否让文字显得紧凑,默认为 false
int outlineSize; // 字体描边的大小,默认为 0
// 构造函数
...
// 注意:当 outlineSize 初始化的值大于 0 时,distanceFieldEnabled 则为 false
} TTFConfig;
// GlyphCollection 有四种类型
enum class GlyphCollection {
DYNAMIC,
NEHE,
ASCII,
CUSTOM
};
Label 的用法
使用 .ttf 文件创建标签
1. 创建标签
TTFConfig config2("fonts/Marker Felt.ttf", 30); // 初始化 TTFConfig,第一个参数为字库的路径,第二个参数为字体大小
auto label2 = Label::createWithTTF(config2, "createWithTTF", TextHAlignment::LEFT); // 创建 label,并向左对齐
label2->setPosition(Point(visibleSize.width / 2, 300));
label2->setAnchorPoint(Point::ANCHOR_MIDDLE); // 设置锚点居中
this->addChild(label2, 2);
当然,也可以使用 Label::create
创建普通的标签,效果和 CCLabelTTF::create()
一样:
auto label4 = Label::create("create", "Marker Felt", 30);
2. 让字体看起来更紧凑
直接修改 config
里的 distanceFieldEnabled
:
TTFConfig config2("fonts/Marker Felt.ttf", 30, GlyphCollection::DYNAMIC, nullptr, true); // 修改 config
3. 设置荧光效果
label2->enableGlow(Color3B::GREEN); // 荧光颜色为绿色
注意:想要显示荧光效果,必须令 distanceFieldEnabled = true
,否则看不到效果。
4. 设置描边效果
label2->enableOutline(Color4B(255, 125, 0, 255), 8); // 第一个参数为描边的颜色,第二个参数为描边的大小
注意:使用描边效果后,distanceFieldEnabled
将变成 false
,这意味着在有描边的情况下无法显示荧光效果。
5. 设置阴影效果
label2->enableShadow(Color3B::RED, Size(2, -2), 0.2, 0.5); // 第一个参数为阴影颜色,第二个参数为阴影相对于
使用 .fnt 文件创建标签
1. 创建标签
auto label3 = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "createWithBMFont");
label3->setPosition(Point(visibleSize.width / 2, 250));
label3->setAnchorPoint(Point::ANCHOR_MIDDLE);
this->addChild(label3, 2);
label3->enableShadow();
2. 设置阴影效果
label3->enableShadow(Color3B::RED);
可以将此效果与前面的效果进行对比。
使用 .png 文件创建标签
假设我们有一张合适的图片,使用方法如下:
1. 创建标签
auto label4 = Label::createWithCharMap("fonts/costFont.png", 30, 44, '/'); // 参数分别为:路径、每个字符的宽和高、起始字符
label4->setPosition(Point(visibleSize.width / 2, 200));
label4->setAnchorPoint(Point::ANCHOR_MIDDLE);
label4->setString("10"); // 设置显示的内容为 "10"
this->addChild(label4, 2);
2. 设置阴影效果
label4->enableShadow(Color3B::RED);
取消所有特效
label->disableEffect(); // 取消所有特效
以上就是关于 Cocos2d-x Label
的基本介绍,希望对你有所帮助。