2.4.1 标签(Label)

优质
小牛编辑
130浏览
2023-12-01

Cocos2d-x 提供 Label 对象给用户,可以使用位图字体,TrueType 字体,系统字体创建标签。这个单一的类能处理你所有的标签需求。下面介绍使用各种字体,创建标签的方法。

BMFont

BMFont 是一个使用位图字体创建的标签类型,位图字体中的字符由点阵组成。使用这种字体标签性能非常好,但是不适合缩放。由于点阵的原因,缩放会导致失真。标签中的每一个字符都是一个单独的 Sprite,也就是说精灵的属性(旋转,缩放,着色等)控制都适用于这里的每个字符。

创建 BMFont 标签需要两个文件:.fnt 文件和 .png 文件。可以使用像 Glyph Designer 这样的工具来创建位图字体,这些文件将会自动生成。

使用位图字体创建标签:

auto myLabel = Label::createWithBMFont("bitmapRed.fnt", "Your Text");

所有在标签中出现的字符都应该能在提供的 .fnt 文件找到,如果找不到,字符就不会被渲染。如果你渲染了一个 Label,同时它有丢失字符,记得去查看一下 .fnt 文件是否完备。

TTF

TrueType 字体 和我们上面了解的位图字体不同,使用这种字体很方便,你不需要为每种尺寸和颜色单独使用字体文件。不像 BMFont,如果想不失真的缩放,就要提供多种字体文件。

要创建这种标签,需要指定 .ttf 字体文件名,文本字符串和字体大小。

使用 TrueType 字体创建标签:

auto myLabel = Label::createWithTTF("Your Text", "Marker Felt.ttf", 24);

虽然使用 TrueType 字体比使用位图字体更灵活,但是它渲染速度较慢,并且更改标签的属性(字体,大小)是一项非常消耗性能的操作。

如果您需要具有相同属性的多个 Label 对象,那可以创建一个 TTFConfig 对象来统一配置,TTFConfig 对象允许你设置所有标签的共同属性。

通过以下方式创建一个 TTFConfig 对象:

// create a TTFConfig files for labels to share
TTFConfig labelConfig;
labelConfig.fontFilePath = "myFont.ttf";
labelConfig.fontSize = 16;
labelConfig.glyphs = GlyphCollection::DYNAMIC;
labelConfig.outlineSize = 0;
labelConfig.customGlyphs = nullptr;
labelConfig.distanceFieldEnabled = false;

// create a TTF Label from the TTFConfig file.
auto myLabel = Label::createWithTTF(labelConfig, "My Label Text");

TTFConfig 也能用于展示中文,日文,韩文的字符。

SystemFont

SystemFont 是一个使用系统默认字体,默认字体大小的标签类型,这样的标签不要改变他的属性,它会使用系统的规则。

使用系统字体创建标签:

auto myLabel = Label::createWithSystemFont("My Label Text", "Arial", 16);

标签效果

在屏幕上有标签后,它们可能看起来很普通,这时你希望让他们变漂亮。你不用创建自定义字体! Label 对象就可以对标签应用效果,包括阴影,描边,发光。

阴影效果:

auto myLabel = Label::createWithTTF("myFont.ttf", "My Label Text", 16);

// shadow effect is supported by all Label types
myLabel->enableShadow();

描边效果:

auto myLabel = Label::createWithTTF("myFont.ttf", "My Label Text", 16);

// outline effect is TTF only, specify the outline color desired
myLabel->enableOutline(Color4B::WHITE, 1));

发光效果:

auto myLabel = Label::createWithTTF("myFont.ttf", "My Label Text", 16);

// glow effect is TTF only, specify the glow color desired.
myLabel->enableGlow(Color4B::YELLOW);