cocos creator资源加载

资源加载是游戏中最常见的功能之一, 并不复杂

1:为什么要用bundle?

cocos2.4版本以前,是没有bundle的.但是有bundle雏形的(编译之后见src/setting.js)

2.4版本以前,所有的资源配置都在src/setting.js里面, 好不好管理?  占不占用宝贵的首屏加载时间?

所以2.4版本以后,就有了bundle, 通过bundle去加载资源

所以就是有通用的加载资源方式,先判断有无bundle,如果没则加载bundle,然后通用bundle去加载资源

2: 为什么不用 bundle.load('imgs/spine.png') 这种形式?

大家都知道, cocos creator加载资源的常见形式是 bundle.load('imgs/spine', cc.SpriteFrame)  bundle.load('imgs/spine', cc.JsonAsset)...

是不是路径(不带文件后缀)+类型就能得到资源地址?

是的.那么怎么得到的呢, 是不是存在一个配置文件?

是的.项目中有个配置library/uuid-to-mtime,  编译之后会生成config.json

config.json很重要很重要,是bundle加载的核心

config中有个path的配置,  path的包括的就是没有路径的地址+类型

太巧了吧,和资源加载的方式一样了,你说神不神奇

path的键就是uuid, uuid就是资源的核心

也就是通过paths+types可能找到uuid, 通过uuid就能找到asset

抛出一个新问题, config里的uuid一定对应一个资源吗?

3:怎样自定义加载?

现有个需求,需要在cocos creator中显示gif动画(非静态图),

cocos中默认是把gif当图片加载处理的,怎么办?

但是要解析gif的话,是需要解析gif二进制文件的.

cc.assetManager.downloader.register('.gif', (file, options, onComplete) => {
    //@ts-ignore
    cc.assetManager.downloader._downloaders[".bin"](file, options, (err, data) => {
        if (!err) {
            if (typeof data === "string") {
                cc.assetManager.parser.parse(file, data, ".bin", options, onComplete);
                return;
            } else {
                onComplete && onComplete(null, data);
            }
        } else {
            onComplete && onComplete(err, data);
        }
    });
});
cc.assetManager.parser.register('.gif', (file, options, onComplete)=>{
    onComplete(null, file)
})

4: 加载的文件存在哪里了?

 cc.assetManager.assets 控制台里看一下,可以看一下有没有加载成功

远程加载存储时的的值是url地址

非远程加载存储时的的值是uuid

 

总结:网上cocos creator资源加载相关的资料一大堆, 

          但是这篇会有一些与众不同, 不是讲的多么复杂,

          而是从几个小问题,可以一步一步让你成为资源加载的行家

 

posted @ 2023-01-06 01:03  wanhong  阅读(772)  评论(0编辑  收藏  举报