cocos2dx js 3.2 热更新
COCOS IDE用手机调试更新是正常的,是预想的结果,但用COCOS IDE打包发布APK,安装到手机上,热更新下载图片、JSON UI什么的都能正常更新替换,但JS脚本没有替换,这是为毛。
更新文件是已经有下载到手机上了
root@hwB199:/ # ls -l /data/data/org.cocos2dx.CocosJSGame/files/
ls -l /data/data/org.cocos2dx.CocosJSGame/files/
-rw------- u0_a113 u0_a113 738 2014-12-18 15:51 project.manifest
drwx------ u0_a113 u0_a113 2014-12-18 15:51 res
drwx------ u0_a113 u0_a113 2014-12-18 15:51 src
-rw------- u0_a113 u0_a113 303 2014-12-18 15:51 version.manifest
res文件夹:
root@hwB199:/ # ls -l /data/data/org.cocos2dx.CocosJSGame/files/res
ls -l /data/data/org.cocos2dx.CocosJSGame/files/res
-rw------- u0_a113 u0_a113 324064 2014-12-18 15:51 HelloWorld.png
-rw------- u0_a113 u0_a113 133659 2014-12-18 15:51 image.png
src文件夹:
root@hwB199:/ # ls -l /data/data/org.cocos2dx.CocosJSGame/files/src
ls -l /data/data/org.cocos2dx.CocosJSGame/files/src
-rw------- u0_a113 u0_a113 2309 2014-12-18 15:51 app.js
-rw------- u0_a113 u0_a113 257 2014-12-18 15:51 resource.js
贴出代码:
project.json
{
"project_type":"javascript",
"debugMode":1,
"showFPS":true,
"frameRate":60,
"id":"gameCanvas",
"renderMode":0,
"engineDir":"frameworks/cocos2d-html5",
"modules":[
"cocos2d",
"extensions"
],
"jsList":[
"src/AssetsManager.js"
]
}
AssetsManager.js
var __failCount = 0;
var AssetsManagerLoaderScene = cc.Scene.extend({
_am:null,
_progress:null,
_percent:0,
_percentByFile:0,
isHave:false,
run:function(){
if (!cc.sys.isNative) {
this.loadGame();
return;
}
var layer = new cc.Layer();
this.addChild(layer);
this._progress = new cc.LabelTTF.create("0%", "Arial", 12);
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() : "./");
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
{
var that = this;
var listener = new jsb.EventListenerAssetsManager(this._am, function(event) {
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);
this.isHave = true;
//cc.sys.cleanScript("src/app.js");
}
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.");
//这边用了新增的清除JSB缓存跟游戏重启 都还是没效果 我用错了?
if(this.isHave){
//cc.game.restart();
cc.sys.cleanScript("src/app.js");
}else{
//that.loadGame();
}
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.loader.loadJs(["src/files.js"], function(err){
cc.loader.loadJs(jsFiles, function(err){
cc.director.runScene(new HelloWorldScene());
});
});
},
updateProgress:function(dt){
this._progress.string = "" + this._percent;
},
onExit:function(){
cc.log("AssetsManager::onExit");
this._am.release();
this._super();
}
});
files.js
var jsFiles = [
"src/app.js",
"src/resource.js"
];
app.js
var HelloWorldLayer = cc.Layer.extend({
sprite:null,
ctor:function () {
//////////////////////////////
// 1. super init first
this._super();
/////////////////////////////
// 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it.
// ask the window size
var size = cc.winSize;
// add a "close" icon to exit the progress. it's an autorelease object
var closeItem = new cc.MenuItemImage(
res.CloseNormal_png,
res.CloseSelected_png,
function () {
cc.log("Menu is clicked!");
}, this);
closeItem.attr({
x: size.width - 20,
y: 20,
anchorX: 0.5,
anchorY: 0.5
});
var menu = new cc.Menu(closeItem);
menu.x = 0;
menu.y = 0;
this.addChild(menu, 1);
/////////////////////////////
// 3. add your codes below...
// add a label shows "Hello World"
// create and initialize a label
var helloLabel = new cc.LabelTTF("Hello World ", "Arial", 38);
// position the label on the center of the screen
helloLabel.x = size.width / 2;
helloLabel.y = 0;
// add the label as a child to this layer
this.addChild(helloLabel, 5);
// add "HelloWorld" splash screen"
this.sprite = new cc.Sprite(res.HelloWorld_png);
this.sprite.attr({
x: size.width / 2,
y: size.height / 2,
scale: 0.5,
rotation: 180
});
this.addChild(this.sprite, 0);
this.sprite.runAction(
cc.sequence(
cc.rotateTo(2, 0),
cc.scaleTo(2, 1, 1)
)
);
helloLabel.runAction(
cc.spawn(
cc.moveBy(2.5, cc.p(0, size.height - 40)),
cc.tintTo(2.5,255,125,0)
)
);
return true;
}
});
var HelloWorldScene = cc.Scene.extend({
onEnter:function () {
this._super();
var layer = new HelloWorldLayer();
this.addChild(layer);
}
});
resource.js
var res = {
HelloWorld_png : "res/HelloWorld.png",
CloseNormal_png : "res/CloseNormal.png",
CloseSelected_png : "res/CloseSelected.png"
};
var g_resources = [];
for (var i in res) {
g_resources.push(res);
}
project.manifest
{
"packageUrl" : "http://mut.25qp.com/res",
"remoteManifestUrl" : "http://mut.25qp.com/res/project.manifest",
"remoteVersionUrl" : "http://mut.25qp.com/res/version.manifest",
"version" : "1.0.0",
"groupVersions" : {
"1" : "1.0.0"
},
"engineVersion" : "3.1",
"searchPaths" : [
]
}
服务端文件
version.manifest
{
"packageUrl" : "http://mut.25qp.com/res",
"remoteManifestUrl" : "http://mut.25qp.com/res/project.manifest",
"remoteVersionUrl" : "http://mut.25qp.com/res/version.manifest",
"version" : "1.0.0",
"groupVersions" : {
"1" : "1.0.2"
},
"engineVersion" : "3.2"
}
project.manifest
{
"packageUrl" : "http://mut.25qp.com/res",
"remoteManifestUrl" : "http://mut.25qp.com/res/project.manifest",
"remoteVersionUrl" : "http://mut.25qp.com/res/version.manifest",
"version" : "1.0.0",
"groupVersions" : {
"1" : "1.0.2"
},
"engineVersion" : "3.2",
"assets" : {
"update1" : {
"path" : "src/app.zip",
"md5" : "f6bf54e5a0d42c963cc5be81bf9db6b5",
"compressed" : true,
"group" : "1"
},
"update2" : {
"path" : "res/ui.zip",
"md5" : "f6bf54e5a0d42c9fgcc5be81bf9db6g5",
"compressed" : true,
"group" : "1"
}
},
"searchPaths" : [
]
}
咨询过panda,说试看看配置文件、searchPath搜索路径是否有问题 ,可能我理解的不够深入, 配置文件我也不懂怎么试了,searchPath的话,下载目录不是默认是优先搜索的吗?
cocos2dx js 3.2 热更新的更多相关文章
- 搭建带热更新功能的本地开发node server
引言 使用webpack有一段时间了,对其中的热更新的大概理解是:对某个模块做了修改,页面只做局部更新而不需要刷新整个页面来进行更新.这样就能节省因为整个页面刷新所产生开销的时间,模块热加载加快了开发 ...
- webpack 环境搭建+实现热更新
让我们一起构建一个小的app 为了便于你更好的了解Webpack带来的好处,我们将会构建一个非常小的app并将资源文件打包.在这个教程中我推荐基于Node4或Node5和NPM3来进行开发,这样就避免 ...
- nodejs 开发时,学用的热更新工具 nodemon
开发用最多的是重启再刷新页面,那热更新少不了, 工具有很多常用唯 nodemon 了, 安装: npm install -g nodemon // 建议全局安装,开发时用的工具 使用: nodemon ...
- webpack开启本地服务器与热更新
第一个webpack本地服务 webpack本地服务相关的一些操作指令与应用 一.第一个webpack本地服务 //工作区间 src//文件夹 index.js//入口文件 index.css//测试 ...
- [Cocos2d-x]Lua 资源热更新
什么是热更新 所谓的热更新,指的是客户端的更新. 大致的流程是,客户端在启动后访问更新的URL接口,根据更新接口的反馈,下载更新资源,然后使用新的资源启动客户端,或者直接使用新资源不重启客户端. 热更 ...
- [COCOS2DX-LUA]0-003.根据COCOS2DX热更新
一.最近有需求就是要基于COCOS2DX-LUA进行游戏的增量更新,找了资料,发现了COCOS2DX有自带一个热更新的类,就是AssetsManager,但是该接口对于我来说有以下的缺陷 1.版本号在 ...
- Cocos2dx热更新遇到的那些坑
1.Cocos2dx热更新因为文件名含有空格,ios下载失败bug修改 问题描述: 项目中偶尔遇到美术图片命名时不规范,导致图片名字含有空格.导致ios热更新时,遇到下载失败. 解决方案: 1.从新改 ...
- cocos2dx热更新之后,闪退问题记录。
如果使用cocos2dx的3.17.2版本的官方热更新. 然后有玩家反馈说热更新之后游戏闪退,游戏内有部分资源没更到. 考虑如下几个方面调整. 1,在文件下载失败的时候,直接调用重新下载. 2,把下载 ...
- Node.Js的热更新服务——supervisor
因为目前项目每次修改文件要看效果,必须重启服务:node app.js再进入浏览器看效果,很是麻烦.所幸的是有很多第三方的管理工具(supervisor,hotnode,forever,pm2等),当 ...
随机推荐
- Python拾忆--多线程的socket服务器
阳光明媚的午后,想想最近要开始从写Java到写Python了,就随手打开电脑来体验一下Python与Java之间的不同吧~ 记得我还在上大二的时候,那个时候才开始学Java,最感兴趣的就是Java书最 ...
- Android -- TextView、button方法详解(1)
1.TextView常规方法 TextView myTextView=null; //声明变量 myTextView=(TextView)findViewById(R.id.myTextView); ...
- ffmpeg常用命令
windows http://www.cnblogs.com/wainiwann/p/4128154.html ubuntu http://blog.csdn.net/hellowxwworld/ar ...
- 关于C#引用Dll后,找不到命名空间的问题
在引用里明确添加了一个Dll,能够看到该Dll详细信息,可就是用using找不到命名空间.并且发现刚引用时是有该命名空间,一编译就消失了. 最后发现原因如下: 原目标框架为.Net Framework ...
- 日志分析_统计每日各时段的的PV,UV
第一步: 需求分析 需要哪些字段(时间:每一天,各个时段,id,url,guid,tracTime) 需要分区为天/时 PV(统计记录数) UV(guid去重) 第二步: 实施步骤 建Hive表,表列 ...
- JAVA正则表达式介绍和使用
本文引用自 http://www.cnblogs.com/android-html5/archive/2012/06/02/2533924.html 技术博客 1.Java中在某个字符串中查询某个字符 ...
- jquery过滤器
<html> <head> <meta charset="UTF-8"> <title>Document</title> ...
- 云计算仿真软件Cloudsim介绍以及类的功能介绍
一·云计算的介绍 云计算仿真软件,称为CloudSim.它是在离散事件模拟包SimJava上开发的函数库,可在Windows和Linux系统上跨平台运行,CloudSim继承了GridSim的编程模型 ...
- Hash Table 的实现步骤是什么
什么是HashTable Hash Table 是计算机科学中很重要的一种数据结构,其时间复杂度为O(1),主要是通过把关键字Key 映射到数组中的一个位置来访问记录,所以速度相当快.映射函数称为 H ...
- css属性编写顺序+mysql基本操作+html细节(个人笔记)
css属性编写顺序: 影响文档流的属性(比如:display, position, float, clear, visibility, table-layout等) 自身盒模型的属性(比如:width ...