一起学 pixijs(4):如何绘制文字md

大家好,我是前端西瓜哥,今天我们来学 pixijs 如何绘制文字。pixijs 版本为 7.1.2。

使用原生的 WebGL 来绘制文字是非常繁琐的,pixijs 对此进行了高层级的封装,提供了 Text 类和 BitMapText 类来绘制文字。

Text

最基本的写法,这里没有设置样式:

const app = new PIXI.Application({ width: 640, height: 360, background: 0xffffff });
document.body.appendChild(app.view);

// 创建文本
const text = new PIXI.Text("前端西瓜哥");
text.x = 100;
text.y = 50;
app.stage.addChild(text);

效果:

可以设置文字样式,需要用 TextStyle 类。

const textStyle = new PIXI.TextStyle({
  fill: "#FF0044",
  fontSize: 32,
  strokeThickness: 1,
  fontWeight: "bold",
});

const text = new PIXI.Text("前端西瓜哥", textStyle);
text.x = 100;
text.y = 50;

也可以通过给 text.style 赋值的方式来设置样式。

效果:

更多文字样式,读者可自行前往官方提供的交互式网页,尝试设置不同样式看看渲染效果:

https://pixijs.io/pixi-text-style

通过 Text 类绘制文字,会将文字内容从头到位进行解析并光栅化,如果你要通过 transform 改变文字的大小,会导致一些失真,建议修改字体大小的方式去绘制。

文字内容如果比较多,且变化得比较频繁,可能造成一些性能上的问题。这种情况下,可以考虑能不能用 BitMapText 来优化。

BitMapText

BitMap 就是位图的意思,它会将一些字体的单个字符先预渲染。当然这个预渲染的是指定了特定的样式的。然后在绘制的时候,pixijs 就可以将一个个预渲染的字符拼接在一起,而不是重新计算绘制点并光栅化,效率很高。

缺点是样式是固定的,如果样式一直变,就比较难命中缓存,不太适合使用了。

另外,BitMap 更适合拉丁语系,因为字符集有限,而像是中文这种象形文字,字符集太多了,做缓存性价比不高。

下面是官方示例。

const app = new PIXI.Application({ background: '#1099bb' });
document.body.appendChild(app.view);

PIXI.Assets.load('./desyrel.xml').then(() => {
    const bitmapFontText = new PIXI.BitmapText(
        'bitmap fonts are supported!\nWoo yay!', {
            fontName: 'Desyrel',
            fontSize: 55,
            align: 'left',
        },
    );

    bitmapFontText.x = 50;
    bitmapFontText.y = 200;

    app.stage.addChild(bitmapFontText);
});

pixijs 从 desyrel.xml 文件中提取信息,desyrel.xml 关联了一个 png 图片,里面放了一些位图字体。感觉有点像 SpriteSheet。

绘制的结果为:

将字体的转换为位图,可以用一个名为 msdf-bmfont-xml 的 npm 库工具去实现。

结尾

总结一下,

如果文本量少,或者字体经常发生样式的变化,用 Text。

如果字符集有限,字体样式变化少但内容经常变化,用 BitMapText。

我是前端西瓜哥,欢迎关注我,学习更多前端知识。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于PixiJS 和 Three.js 的资料,以下是一些推荐的资源: PixiJS: 1. 官方文档:PixiJS 官方网站提供了详细的文档,包含了教程、示例和 API 参考。你可以在这里找到所有需要的信息:https://pixijs.io/documentation/ 2. PixiJS 习路径:CSDN 上有一个名为 "Pixi.js 实战教程" 的系列文章,涵盖了从入门到进阶的内容。你可以在这里找到相关的教程:https://blog.csdn.net/column/details/25287.html 3. Github 示例项目:PixiJS 的官方 Github 存储库中有一些示例项目,可以帮助你习和理解 PixiJS 的使用。你可以在这里找到这些示例:https://github.com/pixijs/examples Three.js: 1. 官方文档:Three.js 官方网站提供了详细的文档,包含了教程、示例和 API 参考。你可以在这里找到所有需要的信息:https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene 2. Three.js 习路径:CSDN 上也有一个名为 "Three.js 实战教程" 的系列文章,涵盖了从入门到进阶的内容。你可以在这里找到相关的教程:https://blog.csdn.net/column/details/25288.html 3. Github 示例项目:Three.js 的官方 Github 存储库中有一些示例项目,可以帮助你习和理解 Three.js 的使用。你可以在这里找到这些示例:https://github.com/mrdoob/three.js/tree/dev/examples 希望这些资源能帮助你开始PixiJS 和 Three.js!如果有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值