[CC] Cocos2d-x热更新后台实现

转载 2016年08月30日 18:34:52
后台环境:
python 2.7 + webpy0.37
webpy安装:
1、解压webpy,cmd至webpy路径下
2、cmd运行python setup.py install
详细了解webpy,请访问其官网:http://webpy.org/


为了保持客户端最安全与最小化热更新,我们需要判断出每个版本的差异,将差异文件下载到客户端。为了差异识别,我们将生产res与src下所有文件的MD5,并将其保存至相关文件夹,保存内容如下:
src/test1.lua:e6e8feb29a41a0d83c29c834c10a42a2
src/test2.lua:b87957f382a4a292db91bd937b66a000
res/ani/enemy/monster.csb:6a42885d985f777418d97ef956758f2e
res/ani/enemy/monster.exportjson:1c26ec5818281794e98a4d05c3d871c4
后面我们只需要对比客户端当前版本与服务器最新版本的资源列表的md5以及判断哪些是新增文件,这样我们就可最小化获取需要更新的列表。
到此,我们可以将此文件连同当前版本文件放至服务器,让客户端下载更新列表,并在客户端判断需要下载那些文件,但是这样真的好么,如果一次更新n个文件,那样的连接将会有n次,可能是我多虑了。但我考虑到我们的版本不可能无限次发布,因此我决定将版本差异的包放在服务器,这样客户端只用告诉我们他当前什么版本,就可以获取到升级至最新版本的更新包。
比如客户端当前版本为1.0,服务器最新版本为2.0,通过url传至服务器,客户端就可以获取一个1.0升级到2.0的资源包,客户端通过assertManager可以文件解压,我们再将解压目录文件移动至我们的查找目录就ok了。
服务器通过各个版本的资源列表,获取改动和新增的文件,并将其打包压缩至zip文件。而且由于我们发布的版本是确定的,因此这些更新文件在服务器只会生成一次,对服务器来说基本没什么压力,而且我们可以将其预先生成,保存至服务器。

在服务端,我采用如下路径配置:
App:(项目名称)
--project:(保存最新项目资源,手工配置)
----res:(资源路径)
----src:(脚本路径)
--publish:(更新包路径,目录下文件自动生成)
----version.txt (当前最新版本号,手工修改)
----1.0(1.0版本包)
------list.txt(当前版本1.0的资源列表及MD5)
------update.zip(只有基本版本才会在当前路径层级下有更新包)
----2.0
------list.txt
------1.0
--------update.zip(1.0升级到2.0需要的更新资源包)
...
我们需要手工配置下project文件,这里面保存我们所发布的最新资源和脚本;publish下保存的是各种版本的更新包。
最终我们运行程序后,可以通过url访问版本与获取更新资源包:
获取最新版本号:http://127.0.0.1:8080/?action=ver

下载更新包:http://127.0.0.1:8080/?action=update.zip&ver=1.1(ver为本地当前版本,url中需要有.zip,cocos2d-x终对url做了判断)

项目工程: 点击下载



Cocos2d-x 3.2 自动更新 -- 使用AssetsManager更新游戏资源包

时间 2014-11-23 21:39:02  CSDN博客 原文  http://blog.csdn.net/u013174689/article/details/41381843 主题 Coco...

Cocos2d-x的学习之旅(七)更新函数Update

今天我们要讲的是更新函数,什么是更新函数?Code-Man的介绍是:“死循环”。可是为什么我们游戏需要存在死循环呢?其实每个游戏引擎都必须有这个一个东西,在我们创建出一个HelloWorld的时候,其...

Cocos2dx-- 资源热更新

前言:游戏上线后,我们常常还会需要更新,如新增玩法,活动等,这种动态的更新资源我们称为游戏的热更新。热更新一般只适用于脚本语言,因为脚本不需要编译,是一种解释性语言,而如C++语言是很难热更新的,其代...

Cocos2d-x 3.6版本学习笔记-热更新

Cocos 3.6版本热更新梳理   cocos热更新实现了项目资源和脚本文件的动态更新。当工程有新的改动时,用户无需重新下载完整的安装包,而是通过对比本地与最新的版本信息,仅下载有改动的文件到本地,...
  • itol925
  • itol925
  • 2015年05月25日 12:09
  • 2295

cocos2d-x lua 中使用protobuf并对http进行处理

cocos2d-x lua 中使用protobuf并对http进行处理 本文介绍 cocos2d-x lua 中使用http 和 基于cocos2d-x 对lua http的封装(部分ok) 本博客链...

cocos2d-x + Lua的cc.Repeat动画执行次数不准,巨坑

Repeat这个Action的本意是可以方便地对某一个动画执行指定的次数,比如这段代码: scene.index = 0 local delayAction =...

cocos2d-x 数学函数、常用宏粗整理(CC_SYNTHESIZE)

程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理 - by Glede http://www.cnblogs.com/buaashine/archive/2012/11/12/27...

Cocos2d-x Lua 回调函数cc.CallFunc类,内部调用其他类函数报空

版本:cocos2d-x 3.11 语言:Lua   今天逛了一遍论坛,看到一些独立游戏制作者制作的游戏,感觉好羡慕。自己也有种想要制作一个的冲动,不过不是那种益智类的小游戏,而是世界观庞大的高自...

cocos2d-x的另一个坑,cc.FileUtils-addSearchPath()的第二个参数在runtime下无法传递

本来C++那边的FileUtils::addSearchPath(const std::string &path, const bool front=false)方法定义的挺人性化,传入第二个参数为t...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[CC] Cocos2d-x热更新后台实现
举报原因:
原因补充:

(最多只允许输入30个字)