Cocos Creator 加载zip文件,解压解析json
- cocos
- 2024-08-24
- 175热度
- 2评论
jszip的实际项目应用
游戏中有大量配置的情况下,文件会变得非常大,所以有些游戏会采用zip包压缩解压
例如我的这个成语填空游戏,配置文件加一起都有3m了,将游戏配置json文件一起压缩成zip包,加载后进行解压使用
在cocos中使用jszip
首先,在github上下载jszip库
将下载的jszip.min.js放在项目assets/libs下,将jszip.js放在项目根目录的libs下。 (jszip.js在dist中)
然后将游戏的配置文件,多个json,压缩成zip包,放在resources/config下
代码中加载zip文件,并解析获取其中的游戏物品配置idiom.json
loadZip() {
let self = this;
let url = cc.url.raw('resources/config/config.zip');
cc.loader.load({ url: url, type: "binary" }, (err, zipData) => {
//2.1.3在安卓平台下会出现load不到资源的情况
if (err) {
let httpUrl = `资源服务地址${url}`;
console.log('loadConfigZip httpUrl: ', httpUrl);
let oReq = new XMLHttpRequest();
oReq.open("GET", httpUrl, true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
let arrayBuffer = oReq.response; // 注意:不是oReq.responseText
if (arrayBuffer) {
console.log('LoadConfig::unzip 0');
self.unzip(arrayBuffer);
}
};
oReq.send(null);
}
else {
console.log("unzip unzip");
this.unzip(zipData);
}
});
},
unzip(zipData) {
let self = this;
let newZip = new JSZip(); // 因为将jszip导入为插件,所以可以全局直接访问
newZip.loadAsync(zipData).then(zip=>{
// console.log(zip);
let fileList = zip.files;
for(let filename in fileList){
zip.file(filename).async('string').then(data=>{
let json = JSON.parse(data);
// console.log(JSON.stringify(json));
console.log(filename,json[0]);
if( filename == "idiom.json" ){
self.idiomDatas = json;
self.readyGame();
}
});
}
});
},
[…] 上一个文章,在cocos creator中加载解压zip包没问题,但是在输出到微信小游戏后,在小游戏工具中运行后提示找不到这个插件。 […]
在cocos中不要以插件形式使用既可