PixiJS学习(8)预加载

简介

        预加载是什么?

        提前加载图片,当用户需要查看或使用时可直接从本地缓存中渲染。

        在 pIxiJs 中,一般情况下我们也需要进行预加载,这样就可以保证素材和资源在使用时可以直接应用,不需要等待较长的时间。一般来说可以进行预加载的内容包括:纹理图片,位图文本,字体包……

        其中预加载频率最多的应该就是纹理,在PixiJs 中预加载也是有对应的类: PIXI.Loader()

使用URL预加载

        一般情况下我们会使用图片的地址对位图纹理进行预加载。在加载时可以对纹理起一个别名,便于更好的进行区分。否则的话,加载后纹理的名称就是图片的名称。

// pixi 资源加载的类
const loader = new PIXI.Loader();

// 设置请求资源的参数,防止缓存的出现
loader.defaultQueryString = 'v=' + Math.random();

// 添加需要加载的资源,别名 + 资源地址
loader.add("A00000", "../images/3/A00000.png");
loader.add("A00001", "../images/3/A00001.png");
loader.add("A00002", "../images/3/A000020.png"); // 没有这张图片,会加载错误
loader.add("A00003", "../images/3/A00003.png");

// 开始加载
loader.onProgress.add(res => {
  console.log("开始加载一个资源")
});
// 加载出错
loader.onError.add(res => {
  console.log("加载出错")
});
// 加载完成
loader.onLoad.add(res => {
  console.log("加载完成一个资源")
});
// 完成所有加载
loader.onComplete.add(res => {
  console.log("完成所有资源加载")
});
// 输出纹理
loader.load((loader, resources) => {
  console.log("输出加载完的资源纹理");
  // 纹理
  let A00000Texture = resources.A00000.texture;
  let A00001Texture = resources.A00001.texture;
  let A00003Texture = resources.A00003.texture;
});

雪碧图

        雪碧图是什么?通俗的讲,将多张小图合并在一起之后的一整张图片称作雪碧图。

        使用雪碧图的优点有以下几点:

  • 将图片进行合并之后,可以适当减少图片大小
  • 加载雪碧图时,只需一次请求,就能拿到所有资源,可以减小资源请求时“建立连接”的消耗

        在 PixiJs 中经常也会使用到雪碧图,例如需要优化性能或者使用序列帧动画时。而且它的预加载机制,也能之间处理和加载这些雪碧图。

使用JSON文件进行预加载

        上面我们说了雪碧图可以在 PixiJs 进行使用,可以优化性能,减少请求。但是我们在 PixiJs 中使用雪碧图不能像 CSS 中一样使用绝对定位的方式,一般还是需要使用纹理,因此需要一个 JSON 文件来定义每个小图片的名称和位置。

        Pixi 官方推荐的雪碧图生成工具是:TexturePacker - Create Sprite Sheets for your game!

这个工具最终生成的文件就是一个 JSON 文件,以及对应的雪碧图。

        这个文件中会解释每个纹理对应的大小和位置。

// pixi 资源加载的类
const loader = new PIXI.Loader();

// 设置请求资源的参数,防止缓存的出现
loader.defaultQueryString = 'v=' + Math.random();

// 添加需要加载的资源
loader.add("cat", "../../images/3/cat.json");

// 开始加载
loader.onProgress.add(res => {
  console.log("开始加载一个资源")
});
// 加载出错
loader.onError.add(res => {
  console.log("加载出错")
});
// 加载完成
loader.onLoad.add(res => {
  console.log("加载完成一个资源")
});
// 完成所有加载
loader.onComplete.add(res => {
  console.log("完成所有资源加载")
});
// 输出纹理
loader.load((loader, resources) => {
  console.log("输出加载完的资源纹理");
  console.log(resources);
  let A00000Texture = resources.cat.textures["A00000.png"];
  let A00001Texture = resources.cat.textures["A00001.png"];
  let A00002Texture = resources.cat.textures["A00002.png"];
  console.log(A00000Texture)
  // this.pixiSpriteModule(A00002Texture, this.frameStage.stage, 0, 0, 0.5, 0);
});

注意事项:

        预加载可以优化一些性能的问题,但是凡事都有两面性,先加载也就意味着 Loading 的时间会加长。在生产过程中,需要权衡利弊,也可以采用分段加载的方式。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻蝶Love

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值