用 Pixi.js 仿一个 Brotato (三 加载资源)

简介: 用 Pixi.js 仿一个 Brotato

d52bc303b4b9c0e6a1a4f32218e8bd6.png

系列文章:

水果兄弟 BroFruit(仿 Brotato) - 码上掘金 (juejin.cn)

前言

上一节我们已经基本了解了 PixiJS 的一些常用 api,本节就带大家开始正式开发游戏相关的一些模块,废话不多,马上开始

资源管理

作为一个游戏应用,图片资源的加载必然是少不了的,而且由于图片加载速度,和渲染性能方面的原因,一般都会在游戏初始化的时候把这些图片资源加载好或者部分加载好后台继续加载,放在缓存中,方便随时调用

PixiJS 也提供了相应的 Assets 模块,里面有各种方法来 (backgroundLoadBundle,loadBundle等) 对我们应用中所用到的资源进行管理,接下来我就带着大家一起了解这些方法

资源清单 manifest

manifest 这个单词大家应该都不陌生,它描述了应用程序相关的信息,这里我们定义一个 manifest 对象来记录相关资源的信息

const manifest = {
    bundles: [{
        name: 'game-screen',
        assets: [
            {
                name: 'monster',
                srcs: 'https://pixijs.io/examples/examples/assets/flowerTop.png',
            }
        ]
    }]
}
复制代码

初始化信息 init

await PIXI.Assets.init({ manifest: manifest })
复制代码

注意这里使用了 await ,资源管理的大部分方法都是异步执行的,包括后面的 backgroundLoadBundle与loadBundle

后台加载 backgroundLoadBundle

PIXI.Assets.backgroundLoadBundle(['game-screen'])
复制代码

backgroundLoadBundle 方法可以通过指定 manifest.bundles 中的对象名称进行资源加载,加载成功后,就可以在我们的应用中以纹理的形式传进精灵 Sprite 中进行使用

资源包的加载与使用 loadBundle

const gameScreen = await PIXI.Assets.loadBundle('game-screen')
const monster = new PIXI.Sprite(gameScreen.monster)
app.stage.addChild(monster)
复制代码

通过使用 loadBundle 加包名获取资源对象,让后通过访问属性名称加载对应的图片纹理,在添加给精灵 Sprite,最后显示到舞台上即可

84729bacc5786f882d43e2fa871c948.png

普通加载 addBundle

一般小应用我们也可以使用普通加载的方式,我们修改下 manifest 的结构,并且在添加一张图片,使用 addBundle 来试下加载效果

const manifest = {
    monster: 'https://pixijs.io/examples/examples/assets/flowerTop.png',
    monster2: 'https://pixijs.io/examples/examples/assets/flowerTop.png',
}
PIXI.Assets.addBundle('game-screen', manifest)
const gameScreen = await PIXI.Assets.loadBundle('game-screen', (res) => {
    console.log(res);
})
const monster = new PIXI.Sprite(gameScreen.monster)
app.stage.addChild(monster)
复制代码

c0a3ba1b0c4ea354537b98104265757.png

我们可以看到, addBundle 提供了一个回调方法让我们可以实时的打印出加载情况,后续我们的加载进度条,就可以利用这一特性进行开发

好了,关于加载资源这方面的 api 用法到这就基本完成了,下一节我们来一起实现一个资源加载的类,完成后可以直接用于各个项目,敬请关注~谢谢

相关文章
|
4月前
|
JavaScript 前端开发 Java
面试官:你的项目有什么亮点?我:解决了JS脚本加载失败的问题!
面试官:你的项目有什么亮点?我:解决了JS脚本加载失败的问题!
|
8月前
|
自然语言处理 前端开发 JavaScript
使用 Promise 来改写 JavaScript 的加载逻辑
使用 Promise 来改写 JavaScript 的加载逻辑
57 0
|
8月前
|
JavaScript 前端开发 开发者
SAP UI5 应用的 Component.js 文件是如何在运行时被加载的?
SAP UI5 应用的 Component.js 文件是如何在运行时被加载的?
31 0
|
6月前
|
缓存 JavaScript 应用服务中间件
Nginx+Tomcat代理环境下JS无法完全加载问题
Nginx+Tomcat代理环境下JS无法完全加载问题
|
7月前
|
缓存 JavaScript
Node.js安装教程【附安装包资源】
Node.js安装教程【附安装包资源】
99 0
|
24天前
|
JavaScript 前端开发
EasyUi js 加载数据表格DataGrid
EasyUi js 加载数据表格DataGrid
|
29天前
|
JavaScript
理解DOM树的加载过程(js的问题)
理解DOM树的加载过程(js的问题)
10 0
|
2月前
|
JavaScript
js判断图片是否加载完成
js判断图片是否加载完成
25 0
|
3月前
|
缓存 JavaScript 前端开发
前端工程化:优化JS加载速度
在现代Web应用中,JavaScript已成为必不可少的一部分,但是随着业务复杂度的增加,JS文件的体积也越来越大,导致网页加载速度变慢,影响用户体验。本文将介绍前端工程化的优化策略,以提高JS文件的加载速度。
24 2
|
4月前
|
JSON JavaScript 前端开发
Danfo.js专题 - 附:Dnotebook(Danfo Notebook)单机资源与汉化文档
Danfo.js专题 - 附:Dnotebook(Danfo Notebook)单机资源与汉化文档
51 0