七、cocos2d热更新
前两天老大让我实现热更新。没做过。怎么办(心里很慌,打开google压压惊),发现一片好文章特此转载,希望能帮助正在怕坑的程序员门,但凡我转载的文章引用链接都放在开头,表明我尊重作者。特此告示 原文http://www.redblack.cn/?p=8cocos2d-x热更新 本文是探索cocos-x热更新,其实就是探索cocos-lua或者js的脚本和资源热更新,热更的作用也不用我在这里为大家普及了。 文中主要使用python作为服务器的脚本,lua作为客户端脚本,是用cocos code ide作为开发环境。 在此之前可以参考我之前发表在cocoachina上关于热更新后台的实现,里面大概讲解了实现与原理(文件结构有小小变动,现在增加了项目名称,可以发布多个项目): http://www.cocoachina.com/bbs/read.php?tid=213054 后台环境: 为了保持客户端最安全与最小化热更新,我们需要判断出每个版本的差异,将差异文件下载到客户端。为了差异识别,我们将生产res与src下所有文件的MD5,并将其保存至相关文件夹,保存内容如下: 在服务端,我采用如下路径配置: 下载地址:http://pan.baidu.com/s/1eQ7WJxK 简单说下思路就是,将客户端当前版本与服务器最新版本做md5比对,将最新版本与客户端版本差异的文件打包,并下载至客户端,完成资源的热更新。 这种后台实现主要解决一下几个问题: 1.如果将资源包完全打包为一个文件,需要下载的文件势必会大很多,每次都会下载很多相同的文体。 2.如果按照版本差异更新,则需要将最新版本的资源包挨个下载一遍,多麻烦呀! 3.如果对服务器文件作md5记录,而单独下载相关文件。这样将会造成复杂的客户端代码,而且每个需要更新的文件都去连接服务器,给服务器造成了压力,而且包的传输肯定要比单个小文件来的快,而且更不容易出错吧!(这完全是个人猜想) 4.第三条也说了,我想让客户端代码变得简单。最简单的方式就是不写或者少些代码,我就想是用cocos-x自带的assertmanager来实现热更新。(其实我是偷懒而已) 说说我认为这样做的好处吧: 1.需要更新的资源减少了。 2.服务器需要保存的版本减少了,只需要保存最新两个版本就ok了。 3.支持版本回退(只需要将上一个版本编号改为最新版本号,并生成更新资源包)。 4.客户端代码减少,并且安全。 ——————————————————————————– 今天我带来的是我将之前在cocoachina发表的版本完善后东西,包括服务端与客户端实现: 服务端包含了assertmanager需要的两个链接(版本与包地址的url,而且包地址必须还有.zip这样的字符串,不然会被判断无效,郁闷!) 也有预生成资源包的接口,可以在新版本发布的时候调用,用来生成最新的版本差异包。 客户端代码我是用了cocos code ide,不过也没怎么用它framework里面的东西,修改起来很简单,其实我提供的客户端代码更多算个代码示例(demo)。 废话不多说了。服务端使用可以参考server.zip中的readme.txt。 对了:欢迎大家对我这个新手批评与指正! ————————————下载地址———————————– server:http://pan.baidu.com/s/1dD8Faxj client:http://pan.baidu.com/s/1qW16ZZA ——————————————————————————– 注:由于code ide中对lua自带的文件系统lfs不支持,因此我使用了cocos2d-x自带luatest中的文件创建的接口,并将其导出至项目中。因此如果要使用客户端项目时需要注意将createDownloadDir与deleteDownloadDir两个函数导出,c++代码位置为:%engine_root%testslua-testsprojectClasseslua_assetsmanager_test_sample.cpp(.h),当然你可以选择不创建文件夹,而将更新文件直接解压到可写路径之下!貌似assertmanager可以自己创建存储路径,不过我还未测试。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |