Cocos Creator 加载zip文件,解压解析json

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();
                    }
                });
            }

        });
    },

下面是我的微信小游戏,希望大家批评指正