原帖子地址:http://cn.cocos2d-x.org/tutorial/show?id=1186

在这个文章中原作者已经说的很清楚,我在这个其他改动一些适用我项目中需求

1.满足Web和Native一套工程:为了维护方便

2.检测更新每天只执行一次:每次打开会等待,一天打开多次会卡多次。这个改动只适合自己的

AssetsManager 类:

  1. var __failCount = 0;
  2. toFix = function(num, length) {
  3. return ('' + num).length < length ? ((new Array(length + 1)).join('0') + num).slice(-length) : '' + num;
  4. };
  5. var AssetsManagerLoaderScene = cc.Scene.extend({
  6. _am:null,
  7. _progress:null,
  8. _percent:0,
  9. _percentByFile:0,
  10. _progressText : "",
  11. run:function(){
  12. if (!cc.sys.isNative){
  13. this.loadGame();
  14. return;
  15. }
  16. else{
  17. var myDate = new Date();
  18. var year = myDate.getFullYear();
  19. var month = toFix(myDate.getMonth() + 1,2);
  20. var day = toFix(myDate.getDate(),2);
  21. var nowDate = year + "" + month + "" + day;
  22. var lastDate = cc.sys.localStorage.getItem("kAssetsDate");
  23. //一天只检测一次
  24. if(parseInt(nowDate) > parseInt(lastDate)
  25. || lastDate == null
  26. || lastDate == undefined
  27. || lastDate == ""){
  28. cc.sys.localStorage.setItem("kAssetsDate",nowDate);
  29. }
  30. else{
  31. this.loadGame();
  32. return;
  33. }
  34. }
  35. var layer = new cc.Layer();
  36. this.addChild(layer);
  37. this._progressText = "升级中 ";
  38. if(cc.sys.language == cc.sys.LANGUAGE_ENGLISH){
  39. this._progressText = "UPDATING ";
  40. }
  41. this._progress = new cc.LabelTTF(this._progressText +"0.00%", "Arial", 40);
  42. this._progress.x = cc.winSize.width / 2;
  43. this._progress.y = cc.winSize.height / 2 + 50;
  44. layer.addChild(this._progress);
  45. // android: /data/data/com.huanle.magic/files/
  46. var storagePath = (jsb.fileUtils ? jsb.fileUtils.getWritablePath() : "/");
  47. cc.log("AssetsManagerLoaderScene storagePath="+storagePath);
  48. this._am = new jsb.AssetsManager("res/project.manifest", storagePath);
  49. this._am.retain();
  50. if (!this._am.getLocalManifest().isLoaded())
  51. {
  52. cc.log("Fail to update assets, step skipped.");
  53. this.loadGame();
  54. }
  55. else
  56. {
  57. //            cc.log("packageUrl = "+);
  58. var that = this;
  59. var listener = new jsb.EventListenerAssetsManager(this._am, function(event) {
  60. cc.log("listener................");
  61. switch (event.getEventCode()){
  62. case jsb.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST:
  63. cc.log("No local manifest file found, skip assets update.");
  64. that.loadGame();
  65. break;
  66. case jsb.EventAssetsManager.UPDATE_PROGRESSION:
  67. that._percent = event.getPercent();
  68. that._percentByFile = event.getPercentByFile();
  69. cc.log(that._percent + "%");
  70. var msg = event.getMessage();
  71. if (msg) {
  72. cc.log(msg);
  73. }
  74. break;
  75. case jsb.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST:
  76. case jsb.EventAssetsManager.ERROR_PARSE_MANIFEST:
  77. cc.log("Fail to download manifest file, update skipped.");
  78. that.loadGame();
  79. break;
  80. case jsb.EventAssetsManager.ALREADY_UP_TO_DATE:
  81. case jsb.EventAssetsManager.UPDATE_FINISHED:
  82. cc.log("Update finished.");
  83. that.loadGame();
  84. break;
  85. case jsb.EventAssetsManager.UPDATE_FAILED:
  86. cc.log("Update failed. " + event.getMessage());
  87. __failCount ++;
  88. if (__failCount < 5)
  89. {
  90. that._am.downloadFailedAssets();
  91. }
  92. else
  93. {
  94. cc.log("Reach maximum fail count, exit update process");
  95. __failCount = 0;
  96. that.loadGame();
  97. }
  98. break;
  99. case jsb.EventAssetsManager.ERROR_UPDATING:
  100. cc.log("Asset update error: " + event.getAssetId() + ", " + event.getMessage());
  101. //                        that.loadGame();
  102. break;
  103. case jsb.EventAssetsManager.ERROR_DECOMPRESS:
  104. cc.log(event.getMessage());
  105. that.loadGame();
  106. break;
  107. default:
  108. break;
  109. }
  110. });
  111. cc.eventManager.addListener(listener, 1);
  112. this._am.update();
  113. cc.director.runScene(this);
  114. }
  115. this.schedule(this.updateProgress, 0.5);
  116. },
  117. loadGame:function(){
  118. cc.log("loadGame");
  119. if (cc.sys.isNative){
  120. cc.loader.loadJs(["src/files.js"], function(err){
  121. cc.loader.loadJs(jsFiles, function(err){
  122. cc.LoaderScene.preload(g_resources, function () {
  123. cc.director.runScene(new MainScene());
  124. }, this);
  125. });
  126. });
  127. }
  128. else{
  129. cc.LoaderScene.preload(g_resources, function () {
  130. cc.director.runScene(new MainScene());
  131. }, this);
  132. }
  133. },
  134. updateProgress:function(dt){
  135. this._progress.string = this._progressText + this._percent.toFixed(2)+"%";//"" + this._percent;
  136. },
  137. onExit:function(){
  138. cc.log("AssetsManager::onExit");
  139. this._am.release();
  140. this._super();
  141. }
  142. });

cocos2d-js 热更新模块 使用AssetsManager的更多相关文章

  1. 【Quick 3.3】资源脚本加密及热更新(三)热更新模块

    [Quick 3.3]资源脚本加密及热更新(三)热更新模块 注:本文基于Quick-cocos2dx-3.3版本编写 一.介绍 lua相对于c++开发的优点之一是代码可以在运行的时候才加载,基于此我们 ...

  2. Cocos2d-js 热更新学习笔记

    转载至: http://blog.csdn.net/pt_xxj/article/details/68927705 为什么还要再写一篇关于cocos2d js热更新的笔记,最单纯的想法就是记录心得,另 ...

  3. webpack开启本地服务器与热更新

    第一个webpack本地服务 webpack本地服务相关的一些操作指令与应用 一.第一个webpack本地服务 //工作区间 src//文件夹 index.js//入口文件 index.css//测试 ...

  4. React Native拆包及热更新方案 · Solartisan

    作者:solart 版权声明:本文图文为博主原创,转载请注明出处. 随着 React Native 的不断发展完善,越来越多的公司选择使用 React Native 替代 iOS/Android 进行 ...

  5. 轻松理解webpack热更新原理

    一.前言 - webpack热更新 Hot Module Replacement,简称HMR,无需完全刷新整个页面的同时,更新模块.HMR的好处,在日常开发工作中体会颇深:节省宝贵的开发时间.提升开发 ...

  6. Webpack与Vite热更新差异对比

    随着项目的日渐迭代,项目整体的代码量也会越来越多,从而导致项目体积越来越大:在Webpack时代,很多人会对历史项目(巨型项目)感到头疼,因为往往巨型项目在本地开发调试的时候会因为本地代码的修改触发H ...

  7. 另类Unity热更新大法:代码注入式补丁热更新

    对老项目进行热更新 项目用纯C#开发的? 眼看Unity引擎热火朝天,无数程序猿加入到了Unity开发的大本营. 一些老项目,在当时ulua/slua还不如今天那样的成熟,因此他们选择了全c#开发:也 ...

  8. Lua热更新时正确设置文件名

    Lua热更新时正确设置文件名(金庆的专栏 2016.12)Lua热更新模块见:https://github.com/jinq0123/hotfix其中使用 load(chunk) 来加载更新后的内容, ...

  9. 内核补丁热更新ceph内核模块

    前言 内核模块的更新一般需要卸载模块再加载,但是很多时候使用场景决定了无法做卸载的操作,而linux支持了热更新内核模块的功能,这个已经支持了有一段时间了,一直没有拿ceph的相关模块进行验证 准备工 ...

随机推荐

  1. JVM 知识点总览 - 高级 Java 工程师面试必备

    在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...

  2. 1001 字符串“水”题(二进制,map,哈希)

    1001: 字符串“水”题 时间限制: 1 Sec  内存限制: 128 MB提交: 210  解决: 39[提交][状态][讨论版] 题目描述 给出一个长度为 n 的字符串(1<=n<= ...

  3. 09-THREE.JS 物体缩放,坐标,旋转,位移,是否可见

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  4. yeomen/bower/grunt

    yeomen: npm install yo angular-in-action project npm install -g generator-angular npm install -g gen ...

  5. Codeforces Round #286 (Div. 2)B. Mr. Kitayuta's Colorful Graph(dfs,暴力)

    数据规模小,所以就暴力枚举每一种颜色的边就行了. #include<iostream> #include<cstdio> #include<cstdlib> #in ...

  6. 双向链表(Double-Linked List)

    public class doubleLinkedList <Item>{ private Node first; private Node last; private int itemc ...

  7. Unity 头发随动效果

    目标 实现角色的衣袖.头发.裙摆.披风.尾巴等,在角色运动时,可以产生随动的效果.类似王者荣耀角色展示界面. 准备 源码出出处:https://github.com/unity3d-jp/unityc ...

  8. Unity Shader 创建程序纹理贴图

    创建一个脚本 附加到一个游戏体上 using UnityEngine;using System.Collections; public class ProceduralTexture : MonoBe ...

  9. BZOJ1047:[HAOI2007]理想的正方形

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...

  10. Linux 驱动编程知识

    1.包含的头文件 1.1 GPIO相关操作 #include <asm/arch/gpio.h>