cocos js 熱更新--版本號方法

    最近用cocos js在做h5遊戲,經常更新之後,要清理瀏覽器緩存才能更新資源,代碼,但是如果是嵌入到app裏的h5遊戲,比如直播中嵌入遊戲,不要說很多用戶不知道在哪裏清緩存,就算用戶知道,這樣的操作也非常影響用戶體驗,所以就研究了下用版本號進行熱更新的辦法。

    其實說起來很簡單,主要就是找到CCBoot.js,在:項目名\frameworks\cocos2d-html5\CCBoot.js,裏面有個_loadConfig,這個函數是加載project.json的,給這裏的project.json加上版本號,每次更新的時候,只要修改project.json裏面相應的js文件的版本號,退出之後再進,就會加載新的js文件.

下面放上原來的函數和修改的地方,以及修改過後的函數

原函數

   _loadConfig: function () {
        // Load config
        // Already loaded
        if (this.config) {
            this._initConfig(this.config);
            return;
        }
        // Load from document.ccConfig
        if (document["ccConfig"]) {
            this._initConfig(document["ccConfig"]);
        }
        // Load from project.json 
        else {
            try {
                var cocos_script = document.getElementsByTagName('script');
                for(var i = 0; i < cocos_script.length; i++){
                    var _t = cocos_script[i].getAttribute('cocos');
                    if(_t === '' || _t) {
                        break;
                    }
                }
                var _src, txt, _resPath;
                if(i < cocos_script.length){
                    _src = cocos_script[i].src;
                    if(_src){
                        _resPath = /(.*)\//.exec(_src)[0];
                        cc.loader.resPath = _resPath;
                        _src = cc.path.join(_resPath, 'project.json');  //這裏加版本號
                    }
                    txt = cc.loader._loadTxtSync(_src);
                }
                if(!txt){
                    txt = cc.loader._loadTxtSync("project.json");//這裏加版本號
                }
                var data = JSON.parse(txt);
                this._initConfig(data || {});
            } catch (e) {
                cc.log("Failed to read or parse project.json");
                this._initConfig({});
            }
        }
    },

修改過後的函數

_loadConfig: function () {
        // Load config
        // Already loaded
        if (this.config) {
            this._initConfig(this.config);
            return;
        }
        // Load from document.ccConfig
        if (document["ccConfig"]) {
            this._initConfig(document["ccConfig"]);
        }
        // Load from project.json 
        else {
            try {
                var cocos_script = document.getElementsByTagName('script');
                for(var i = 0; i < cocos_script.length; i++){
                    var _t = cocos_script[i].getAttribute('cocos');
                    if(_t === '' || _t) {
                        break;
                    }
                }
                var _src, txt, _resPath;
                if(i < cocos_script.length){
                    _src = cocos_script[i].src;
                    if(_src){
                        _resPath = /(.*)\//.exec(_src)[0];
                        cc.loader.resPath = _resPath;
var time = new Date();   //加上時間戳
time = time.getTime();
_src = cc.path.join(_resPath, 'project.json?version='+time);                   
                    }
                    txt = cc.loader._loadTxtSync(_src);
                }
                if(!txt){
txt = cc.loader._loadTxtSync("project.json?version="+time);             
                }
                var data = JSON.parse(txt);
                this._initConfig(data || {});
            } catch (e) {
                cc.log("Failed to read or parse project.json");
                this._initConfig({});
            }
        }
    },


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章