不要轻易说不行,提出问题,想办法解决问题
后期验收的时候,客户要求制作精良震撼的烟花效果图,设计甩来了10M的动画帧图集。我当时就抱怨图太大,严重拖垮项目。而理智告诉我,遇到问题,正是我们增长智慧的时候。于是我想到了CDN缓存图片。
因为cocos-creator集合了打包流程,可以让新手傻瓜式编译成程序文件,但是也让新手感到困惑,不知道该怎么缓存图片。所有的预制体,所有的图片,我们在cocos-creator编辑器里面都是在本地拖拽使用的。按照之前的做法是要把图片文件放在CDN服务器上,再通过绝对路径去获取回来。但是cocos-creator编辑器里把路径引用,实例化Node节点等操作全部可视化了。看起来似乎是没有办法CDN缓存图片。于是我开始研究文档和查看其他人的经验。比较有帮助的是:
解决思路: 在编辑器打包好之后的文件中,找到main.js入口文件的cc.assetManager.loadBundle方法,进行路径拼接。贴关键代码:
var count = 0;
var remote_url = "https://yourServer/daxigua/202107/assets/"; // 打包后的assets文件放入CDN服务器的地址
function cb (err) {
if (err) return console.error(err.message, err.stack);
count++;
if (count === bundleRoot.length + 1) { // 加载到最后一项资源后,cc.game.run启动游戏进程
cc.assetManager.loadBundle(remote_url + MAIN, function (err) {
if (!err) cc.game.run(option, onStart);
});
}
}
cc.assetManager.loadScript(settings.jsList.map(function (x) { return 'src/' + x;}), cb);
for (var i = 0; i < bundleRoot.length; i++) { // 如果编辑器上只有assets一个文件夹,bundleRoot[i]就是assets
cc.assetManager.loadBundle(remote_url + bundleRoot[i], cb);
}
- 方法解释: 这个方法是将所有编辑器里,我们放在assets文件夹里的资源进行打包,也就是说我们
CDN上是放打包编译后的assets文件夹,里面存放了图片,js文件,json文件等。
小插曲:运维部署好我的assets文件夹后,获取资源显示跨域。因为我们是不同域,后来代理设置为允许我们测试域名通过get方式获取资源,图片资源可以访问了,但是js和json资源不能访问,后来开启这些文件格式也允许访问的配置,所有资源都可以加载了。