【步兵 cocos2dx】热更新(下)
来源:互联网 发布:马龙丁宁知乎 编辑:程序博客网 时间:2024/06/07 02:35
【步兵 cocos2dx】热更新(下) By EOS.
上一篇把基本的理论都讲了一遍,接下来讲一下代码部分。
(ps:上下两篇讲完刚好,如果再来个上中下。。。岂不成三集篇了 =、=?)
热更否?
我这边启动文件是用的Launcher.lua
,里边做了一些简单的判断,和平台信息的初始化,
如果是不是真机的话,我们可以跳过热更新或者设置跳过解密处理,这样能提高调试的速度。
如果需要平台是需要热更的话,就require热更文件updater.lua
。
接下来看一下里边的处理,进入热更检测阶段。
--不修改 cocos中的文件,在外部拓展覆盖。以后cocos跟新方便替换require "cocos.init"gm = {}--GameManagergm.TargetPlatform = CCApplication:getInstance():getTargetPlatform()if kTargetWindows == gm.TargetPlatform then --噼里啪啦一堆处理 --不热更 直接进游戏 require "main" else --热更 require "net.updater"end
热更检测
简单一点的方法,可以把一个文本文件丢到下载服务器上,然后根据里边的版本号进行处理。
用http::get就可以了,至于版本号,看个人需求,一般是xx.xx.xx.xx可以对外显示前三位,
保留第四位,做小补丁纠错,另外也可以只用前三位,然后在版本号中时间标志。
比如,1706110924_xx.xx.xx这样可以比较简单的做同版本号的更新,缺点就是必须把之前
已有的内容重新下载一边,还是推荐前一种方法,毕竟带资源更新消耗流量还是蛮吓人的。
当然更灵活的方式就是连接服务器,根据服务器的反馈的地址做资源下载处理,省心省力。
热更模块自更新
其实自更新也没难的,因为前边说了updater.lua
,一看就知道是个lua文件,单独更新一下
它就好了,方法嘛,跟版本号同级,设置一个更新模块的版本号就可以了,
下载完成后把整个场景移除一下重新读取下载进度。又或者因为是一个单独的文件,
趁着跑logo的事件就可以下载好了,体验更好一点。
版本管理
我用的方法是版本列表的方式,也可以用txt存储一个,以倒序的形式存储。
xx.xx.02.02xx.xx.02.01xx.xx.02.00
这样就具备了一个下载列表,可以对比客户端版本号高的资源包依次进行下载。具体代码
local function onSuccess() progressLable:setString("["..dl_idx.."/"..#dl_list.."]".."downloading ok!") assetsManager:deleteVersion() dl_idx = dl_idx + 1 if dl_idx <= #dl_list then --依次下载 assetsManager:setPackageUrl(dl_list[dl_idx].zip) assetsManager:setVersionFileUrl(dl_list[dl_idx].vs) assetsManager:checkUpdate() else assetsManager:release() assetsManager = nil --所有都下载结束 package.loaded["version"] = nil cc.FileUtils:getInstance():purgeCachedEntries() CurVersion = require "version" updater.update()--检测是否是最新版本 end end --log.d("create assetsManager") assetsManager = cc.AssetsManager:new( dl_list[dl_idx].zip, dl_list[dl_idx].vs, cc.FileUtils:getInstance():getWritablePath()) assetsManager:retain() assetsManager:setDelegate(onSuccess, cc.ASSETSMANAGER_PROTOCOL_SUCCESS ) assetsManager:setConnectionTimeout(3) end --log.d("start download") assetsManager:checkUpdate()
当所有的版本都下载结束后,就可以进去启动游戏的流程了。
总结
核心函数就那么几个
updater.getRemoteVersion --先获取最新的版本好,判断是否更新updater.checkSelf --发现热更模块不匹配,单独更新。下载完成后重新加载,在进行以上步骤if CurVersion == RemoteVersion then require "main" --进入游戏else updater.getVersionList()--获取版本列表,一次进行下载end updater.startDownLoad --在getVersionList的http请求完成回调里进行--下载完成,再核对下版本,就可以进入游戏了。updater.showUpdateScene --还有一个必不可少的,更新进度的界面
顺带一提,进度显示的方式,可以在资源列表后边加入资源的大小,
xx.xx.02.02[0.4m]xx.xx.02.01[0.1m]xx.xx.02.00[5.4m]
直接用检测到4个更新【1/4】 这种显示方式,然后刷新四遍100%,没毛病~
但是计算出总资源的大小就可以走一个100%的进度条,不是更友好么~
不过如果4个更新都没有上过线,基本就算是流失了=、= 除非你一天一更新?
还有应该提供一个基础包,从apk直接升级到xx.N.xx.00的基础包,这样对新用户更友好一些。
一进入游戏,发现40多个更新,看上去都想点取消了不是么。就这么多。晚安~
See Again~
之前
真爱无价,欢迎打赏~
- 【步兵 cocos2dx】热更新(下)
- 【步兵 cocos2dx】热更新(上)
- 5------Cocos2dx-- 资源热更新(lua)
- cocos2dx lua 热更新
- Cocos2dx-- 资源热更新
- cocos2dx lua 热更新
- cocos2dx lua 热更新
- cocos2dx lua 热更新
- cocos2dx之热更新
- Cocos2dx-- 资源热更新
- cocos2dx版本热更新梳理
- 【步兵 cocos2dx】texturePacker命令行
- 【步兵 cocos2dx】lua绑定
- 【步兵 cocos2dx】自动化测试
- 7------cocos2dx 3.1.1 在线热更新 自动更新(AssetsManager)
- 【步兵 cocos2dx】四叉树碰撞算法
- 【步兵 cocos2dx】加密和混淆
- Quick-Cocos2dx-- 资源热更新2
- Ajax传递的数据包含特殊字符时的解决方法
- 启动Tomcat时,报错;Address already in use: JVM_Bind<null>:8080
- Hadoop学习-hive的安装配置与常见问题解决
- 搭建分布式Hadoop环境
- 使用filter导致服务器返回的页面始终是空白---在doFilter中漏写了chain.doFilter()
- 【步兵 cocos2dx】热更新(下)
- MyFlag Step12:menupath界面跳转测试以及其他优化
- python3运行py的文件时会出现missing parentheses is call to 'print'
- Renting Bikes(二分+贪心)
- ByteBuffer.mark()方法
- 项目实训-千寻-LBS派单逻辑
- 面试问题什么是异步非阻塞
- Eclipse搭建Scala入门经典程序Helloworld
- 报错方案:You need to use a Theme.AppCompat theme (or descendant) with this activity.