PixiJS学习之如何实现文字的绘制

 更新时间:2023年02月20日 08:59:22   作者:前端西瓜哥  
PixiJS是一个开源的基于web的渲染系统,为游戏、数据可视化和其他图形密集型项目提供了极快的性能。这篇文章主要带大家学习一下PixiJS是如何实现文字绘制的,希望对大家有所帮助

大家好,我是前端西瓜哥,今天我们来学 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。

到此这篇关于PixiJS学习之如何实现文字的绘制的文章就介绍到这了,更多相关PixiJS绘制文字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用html+js+css 实现页面轮播图效果(实例讲解)

    使用html+js+css 实现页面轮播图效果(实例讲解)

    下面小编就为大家带来一篇使用html+js+css 实现页面轮播图效果(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • JavaScript实战(原生range和自定义特效)简单实例

    JavaScript实战(原生range和自定义特效)简单实例

    下面小编就为大家带来一篇JavaScript实战(原生range和自定义特效)简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Bootstrap学习笔记之环境配置(1)

    Bootstrap学习笔记之环境配置(1)

    这篇文章主要为大家详细介绍了Bootstrap学习笔记之环境配置的具体操作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • js+html5操作sqlite数据库的方法

    js+html5操作sqlite数据库的方法

    这篇文章主要介绍了js+html5操作sqlite数据库的方法,以完整实例形式分析了JavaScript封装的html5操作SQLite数据库类,并分析了具体使用技巧,需要的朋友可以参考下
    2016-02-02
  • JavaScript中的几种继承方法示例

    JavaScript中的几种继承方法示例

    这篇文章主要给大家介绍了关于JavaScript中的几种继承方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • bootstrap fileinput实现文件上传功能

    bootstrap fileinput实现文件上传功能

    这篇文章主要为大家详细介绍了bootstrap fileinput实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • js下弹出窗口的变通

    js下弹出窗口的变通

    js下弹出窗口的变通...
    2007-04-04
  • 利用JS判断用户是否上网(连接网络)

    利用JS判断用户是否上网(连接网络)

    本篇文章主要介绍了利用JS判断用户是否上网(连接网络)。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • Script标签与访问HTML页面详解

    Script标签与访问HTML页面详解

    本篇文章主要是对Script标签与访问HTML页面进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • JS获取当前时间实例代码(年月日时分秒)

    JS获取当前时间实例代码(年月日时分秒)

    在javascript中,可以使用Date对象中的Date()方法来获取当前时间,下面这篇文章主要给大家介绍了关于JS获取当前时间(年月日时分秒)的相关资料,需要的朋友可以参考下
    2022-09-09

最新评论