原帖子地址:http://cn.cocos2d-x.org/tutorial/show?ID=1186
在这个文章中原作者已经说的很清楚,我在这个其他改动一些适用我项目中需求
1.满足Web和Native一套工程:为了维护方便
2.检测更新每天只执行一次:每次打开会等待,一天打开多次会卡多次。这个改动只适合自己的
AssetsManager 类:
var __failCount = 0;toFix = function(num,length) { return ('' + num).length < length ? ((new Array(length + 1)).join('0') + num).slice(-length) : '' + num;};var AssetsManagerLoaderScene = cc.Scene.extend({ _am:null,_progress:null,_percent:0,_percentByfile:0,_progresstext : "",run:function(){ if (!cc.sys.isNative){ this.loadGame(); return; } else{ var myDate = new Date(); var year = myDate.getFullYear(); var month = toFix(myDate.getMonth() + 1,2); var day = toFix(myDate.getDate(),2); var NowDate = year + "" + month + "" + day; var lastDate = cc.sys.localstorage.getItem("kAssetsDate"); //一天只检测一次 if(parseInt(NowDate) > parseInt(lastDate) || lastDate == null || lastDate == undefined || lastDate == ""){ cc.sys.localstorage.setItem("kAssetsDate",NowDate); } else{ this.loadGame(); return; } } var layer = new cc.Layer(); this.addChild(layer); this._progresstext = "升级中 "; if(cc.sys.language == cc.sys.LANGUAGE_ENGliSH){ this._progresstext = "UPDATING "; } this._progress = new cc.LabelTTF(this._progresstext +"0.00%","Arial",40); this._progress.x = cc.winSize.wIDth / 2; this._progress.y = cc.winSize.height / 2 + 50; layer.addChild(this._progress); // androID: /data/data/com.huanle.magic/files/ var storagePath = (Jsb.fileUtils ? Jsb.fileUtils.getWritablePath() : "/"); cc.log("AssetsManagerLoaderScene storagePath="+storagePath); this._am = new Jsb.AssetsManager("res/project.manifest",storagePath); this._am.retain(); if (!this._am.getLocalManifest().isLoaded()) { cc.log("Fail to update assets,step skipped."); this.loadGame(); } else {// cc.log("packageUrl = "+); var that = this; var Listener = new Jsb.EventListenerAssetsManager(this._am,function(event) { cc.log("Listener................"); switch (event.getEventCode()){ case Jsb.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST: cc.log("No local manifest file found,skip assets update."); that.loadGame(); break; case Jsb.EventAssetsManager.UPDATE_PROGRESSION: that._percent = event.getPercent(); that._percentByfile = event.getPercentByfile(); cc.log(that._percent + "%"); var msg = event.getMessage(); if (msg) { cc.log(msg); } break; case Jsb.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST: case Jsb.EventAssetsManager.ERROR_PARSE_MANIFEST: cc.log("Fail to download manifest file,update skipped."); that.loadGame(); break; case Jsb.EventAssetsManager.ALREADY_UP_TO_DATE: case Jsb.EventAssetsManager.UPDATE_FINISHED: cc.log("Update finished."); that.loadGame(); break; case Jsb.EventAssetsManager.UPDATE_Failed: cc.log("Update Failed. " + event.getMessage()); __failCount ++; if (__failCount < 5) { that._am.downloadFailedAssets(); } else { cc.log("Reach maximum fail count,exit update process"); __failCount = 0; that.loadGame(); } break; case Jsb.EventAssetsManager.ERROR_UPDATING: cc.log("Asset update error: " + event.getAssetID() + "," + event.getMessage());// that.loadGame(); break; case Jsb.EventAssetsManager.ERROR_DECOMPRESS: cc.log(event.getMessage()); that.loadGame(); break; default: break; } }); cc.eventManager.addListener(Listener,1); this._am.update(); cc.director.runScene(this); } this.schedule(this.updateProgress,0.5); },loadGame:function(){ cc.log("loadGame"); if (cc.sys.isNative){ cc.loader.loadJs(["src/files.Js"],function(err){ cc.loader.loadJs(Jsfiles,function(err){ cc.LoaderScene.preload(g_resources,function () { cc.director.runScene(new MainScene()); },this); }); }); } else{ cc.LoaderScene.preload(g_resources,function () { cc.director.runScene(new MainScene()); },this); } },updateProgress:function(dt){ this._progress.string = this._progresstext + this._percent.toFixed(2)+"%";//"" + this._percent; },onExit:function(){ cc.log("AssetsManager::onExit"); this._am.release(); this._super(); }});
QQ群:239759131 cocos 技术交流 欢迎您
总结以上是内存溢出为你收集整理的cocos2d-js 热更新模块 使用AssetsManager全部内容,希望文章能够帮你解决cocos2d-js 热更新模块 使用AssetsManager所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)