资源管理
游戏中所用到的所有资源都会放在资源管理器中进行管理,在使用资源之前需要将资源添加到资源管理器中,并为资源设置一个资源名,在需要时直接使用资源名。这样做的好处:
- 统一资源入口管理。
- 在 Eva.js 加载资源时,资源管理器可以对资源进行预处理,减少运行时处理资源产生卡顿等问题
添加资源
import { RESOURCE_TYPE, resource } from ‘@eva/eva.js’
下面列举了最常使用的几种资源
图片
{name: “image”,type: RESOURCE_TYPE.IMAGE,src: {image: {type: “png”,url: “//gw.alicdn.com/bao/uploaded/TB1lVHuaET1gK0jSZFhXXaAtVXa-200-200.png”}},}
龙骨动画
{name: “dragonBone”,type: RESOURCE_TYPE.DRAGONBONE,src: {ske: {type: “json”,url: “//gw.alicdn.com/bao/uploaded/TB1SFUHVAzoK1RjSZFlXXai4VXa.json”,},tex: {type: “json”,url: “//gw.alicdn.com/bao/uploaded/TB17n.IVrrpK1RjSZTEXXcWAVXa.json”,},image: {type: “png”,url: “//gw.alicdn.com/bao/uploaded/TB11W7FVyrpK1RjSZFhXXXSdXXa-489-886.png”},},}
spine 动画
{name: “spineAnimation”,type: RESOURCE_TYPE.SPINE,src: {ske: {type: “json”,url: “//gw.alicdn.com/bao/uploaded/TB1SFUHVAzoK1RjSZFlXXai4VXa.json”,},atlas: {type: “json”,url: “//gw.alicdn.com/bao/uploaded/TB17n.IVrrpK1RjSZTEXXcWAVXa.atlas”,},image: {type: “png”,url: “//gw.alicdn.com/bao/uploaded/TB11W7FVyrpK1RjSZFhXXXSdXXa-489-886.png”},},}
实际项目中可能需要一次性添加很多资源,可以通过 addResource 实现这一目的
import { RESOURCE_TYPE, resource } from ‘@eva/eva.js’resource.addResource([{name: ‘img1’,type: RESOURCE_TYPE.IMAGE,src: {image: {type: ‘png’,url: ‘//gw.alicdn.com/bao/uploaded/TB1lVHuaET1gK0jSZFhXXaAtVXa-200-200.png’}}}// other resources])
资源预加载
使用 preload() 方法将资源列表中 preload 为 true 的资源进行加载,可以通过监听 resource 上的事件来获取当前加载进度,适合在游戏初始化展示 loading,切换场景时请求资源时使用。
resource.on(LOAD_EVENT.START, () => {}) // 开始loaderresource.on(LOAD_EVENT.PROGRESS, () => {}) // 加载进度更新resource.on(LOAD_EVENT.LOADED, () => {}) // 某文件加载成功resource.on(LOAD_EVENT.COMPLETE, () => {}) // 加载完成resource.on(LOAD_EVENT.ERROR, () => {}) // 某文件加载失败resource.preload()
获取资源
getResource(resourceName)
使用 getResource 方法获取资源,该方法返回的是一个 promise。资源将会存在于 data 属性中,如果资源是 JSON 文件,则 data 的值是一个 js 对象;如果资源是图片,则 data 的值将会是 Image 实例。
resource.getResource(‘img1’).then(res => {const name = res.name // 资源名称const data = res.data // 资源中文件对应的内容 json 或者 img 等const instance = res.instance // 处理后的实例})
loadSingle(resource)
使用 loadSingle 来加载单个资源,不需要将资源添加到 addResource 里面,该方法返回的是 promise。
resource.loadSingle({name: ‘img1’,type: RESOURCE_TYPE.IMAGE,src: {image: {type: ‘png’,url: ‘//gw.alicdn.com/bao/uploaded/TB1lVHuaET1gK0jSZFhXXaAtVXa-200-200.png’}},preload: true}).then(res => {})
资源处理
通过为某种类型的资源注册方法,可以在资源请求回来时对资源进行处理,在使用时可以直接获取到资源实例。
resource.registerInstance(RESOURCE_TYPE.SPRITE, async ({ name, data }) => {const instance = await instanceSth(data)return instance})
资源销毁
资源可以主动销毁,需要要注意的是,在销毁资源前要确保游戏中没有使用该资源。
resource.destroy(‘img1’)
如果为该类型资源注册了销毁方法,则会调用该方法销毁资源。
resource.registerDestroy(RESOURCE_TYPE.SPRITE, async ({ instance }) => {await instance.destroy()})
加载超时事件设置
resource.timeout = 30000
