跳过主体内容
版本:v8.x

文本

无论是高分还是图表标签,文本往往是向项目中传达信息的最优方式。令人惊讶的是,利用 WebGL 将文本绘制到屏幕上是一个非常复杂的过程 - 对此根本没有内置的支持。PixiJS 提供的一个值是隐藏这种复杂性,让你能够用几行代码绘制出各种样式、字体和颜色的文本。此外,这些文本块和精灵一样都是场景对象 - 你可以给文本着色、旋转、进行 Alpha 混合,并像其他图形对象一样进行处理。

让我们深入了解其工作原理。

文本有三种

由于在 WebGL 中使用文本时存在挑战,PixiJS 提供了三种截然不同的解决方案。在本指南中,我们将详细介绍这两种方法,以帮助你为项目的需要做出正确的选择。选择错误的文本类型可能对项目的效果和外观产生很大的负面影响。

文本对象

为了将文本绘制到屏幕上,可以使用 Text 对象。在此类中,会利用浏 览器的普通文本渲染功能将文本绘制到非屏幕缓冲区,然后使用该非屏幕缓冲区作为绘制文本对象的源。事实上,这意味着每当你创建或更改文本时,PixiJS 都会创建一个该文本的新栅格图像,然后将它当作精灵来处理。这种方法允许真正丰富的文本显示,同时保持较高的渲染速度。

因此,在使用文本对象时,有两组选项——标准的显示对象选项(如位置、旋转等),这些选项在文本在内部光栅化之后起作用;以及在光栅化使用的文本样式选项。由于呈现后的文本基本上只是一个精灵,因此没有必要回顾标准选项。相反,让我们专注于文本的样式。

查看文本示例代码

文本样式

提供了许多文本样式选项(见TextStyle),但它们可以归为 5 个主要组

字体fontFamily 以选择要使用的 Web 字体,fontSize 以指定要绘制的文本的大小,以及字体粗细、样式和变体的选项。

外观:使用 fill 设置颜色或添加 stroke 轮廓,包括渐变填充选项。

阴影:使用 dropShadow 设置阴影,带有一系列相关选项来指定偏移、模糊、不透明度等。

布局:使用 wordWrapwordWrapWidth 启用,然后自定义 lineHeightalignletterSpacing

实用工具:如果需要,添加 paddingtrim 额外空间以处理奇特的字体系列。

要对文本样式功能进行交互式测试,查看此工具

加载和使用字体

为了让 PixiJS 构建文本对象,你需要确保要使用的字体已被浏览器加载。这可以用我们的好朋友Assets轻松完成

// load the fonts
await Assets.load('short-stack.woff2');

// now they can be used!

const text = new Text({
text:'hello',
style:{
fontFamily:'short-stack'
}
})

警告和陷阱

虽然 PixiJS 简化了文本操作,但有些事情需要留意。

首先,更改现有的文本字符串需要重新生成该文本的内部渲染,这是一个缓慢的操作,如果在每一帧都更改许多文本对象,则可能会影响性能。如果你的项目需要屏幕上同时出现大量频繁更改的文本,请考虑使用 BitmapText 对象(如下所述),该对象使用定点位图字体,文本更改时不需要重新生成。

第二,要注意文字缩放。将文字对象的缩放值设置为 > 1.0 将导致模糊/像素化显示,因为文字并没有在更清晰的高分辨率下重新渲染——它仍然是生成时的相同分辨率。为了解决这个问题,可以先渲染更大的初始尺寸然后缩小。这会占用更多内存,但能让你的文字始终清晰可辨。

位图文字

除了通过标准文字方法将文字添加到你的项目中之外,PixiJS 还支持位图字体。位图字体与 TrueType 或其他通用字体截然不同,它们由一张图像组成,其中包含你要使用的每个字母的预渲染版本。当使用位图字体绘制文字时,PixiJS 不需要将字体字形渲染到一个临时缓冲区——它可以简单地从主字体图像中复制并冲压出一条字符串的每个字符。

这种方法的主要优点是速度——频繁更改文字的成本更低,由于共享源纹理,渲染每一额外部分的文字的速度也更快。

查看位图文字示例代码

位图字体

  • 第三方解决方案
  • BitmapFont 自动生成

选择正确的方法

文本

  • 静态文字
  • 文字对象数量少
  • 高保真文字渲染(例如字距调整)
  • 文字布局(行距和字距)

位图文字

  • 动态文字
  • 文字对象数量多
  • 更低内存

HTMLText

  • 静态文字
  • 需要 HTML 格式