cocos2dx 3.1.1 在线热更新 自动更新(使用AssetsManager更新游
为什么要在线更新资源和脚本文件? 简单概括,如果你的游戏项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新提交一个新版本给平台。但是平台审核和具体的上架时间是个不确定的。具体什么时候能上架,主要由具体的平台决定。 如果游戏项目是使用脚本语言进行编写的(如lua、js),那么一旦需要更新,则可以通过从服务器下载最新的脚本和资源,从而跳过平台直接实现在线更新。(有些平台是禁止在线更新资源方式的,但是你懂得) 闲话少说,本文主要是解决如何在项目中实现在线更新: 我们这里用的是cocos2dx的类AssertsMananger,它在引擎的extensionsassets-manager可以看到。 AssetsManager传三个参数,资源的zip包路径,version路径,写文件的路径。 然后调用AssetsManager的update函数进行下载更新。设置资源包名称 这里继续沿用cocos2dx的AssetsManager类中默认的名称:cocos2dx-update-temp-package.zip。 如果想要修改文件名,可以直接修改引擎下 extensionsassets-managerAsetsManager.ccp中的TEMP_PACKAGE_FILE_NAME 选定服务器地址和设置版本号 <喎?"/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPgogztLV4sDv08O1xMrHss6/vNfKwc/Su6OsTmVsc7XEuPbIy7/VvOSjqLKpv8212Na3aHR0cDovL3d3dy41OHBsYXllci5jb20vYmxvZy0yNTM3LTk1OTEzLmh0bWyjqcv7tcTXytS0sPzCt762us2xvrDmusWhoyAKIGh0dHA6Ly9zaGV6emVyLnNpbmFhcHAuY29tL2Rvd25sb2FkVGVzdC9jb2NvczJkeC11cGRhdGUtdGVtcC1wYWNrYWdlLnppcCA8YnI+CiBodHRwOi8vc2hlenplci5zaW5hYXBwLmNvbS9kb3dubG9hZFRlc3QvdmVyc2lvbi5waHAgIAo8YnI+Cgo8YnI+CjxzdHJvbmc+QyYjNDM7JiM0Mzu0+sLryrXP1jwvc3Ryb25nPjxicj4K0MK9qFVwZ3JhZGXA4KOsvMyz0NfUQ0NMYXllcgqx4LytVXBncmFkZS5ozsS8/sTayN3I58/Co7oKPGJyPgo8cHJlIGNsYXNzPQ=="brush:java;">// Upgrade.h // Created by Sharezer on 14-11-23. // #ifndef _UPGRADE_H_ #define _UPGRADE_H_ #include "cocos2d.h" #include "extensions/cocos-ext.h" class Upgrade : public cocos2d::CCLayer,public cocos2d::extension::AssetsManagerDelegateProtocol { public: Upgrade(); virtual ~Upgrade(); virtual bool init(); void upgrade(cocos2d::Ref* pSender); //检查版本更新 void reset(cocos2d::Ref* pSender); //重置版本 virtual void onError(cocos2d::extension::AssetsManager::ErrorCode errorCode); //错误信息 virtual void onProgress(int percent); //更新下载进度 virtual void onSuccess(); //下载成功 CREATE_FUNC(Upgrade); private: cocos2d::extension::AssetsManager* getAssetManager(); void initDownloadDir(); //创建下载目录 private: std::string _pathToSave; cocos2d::Label *_showDownloadInfo; }; #endif 修改Upgrade.cpp文件如下:
其中 Upgrade::onSuccess()函数中,我这里调用的是main.lua文件
Director::getInstance()->replaceScene(scene); 修改AppDelegate.cpp文件调用Upgrade类AppDelegate.h无需修改,cpp稍微修改一下就可以了 头文件中加入#include "Upgrade.h"主要是修改了AppDelegate::applicationDidFinishLaunching()函数中调用Upgrade类
修改cocos2dx的main.lua 我只是把其中一个资源文件名字和路径参考下载资源包中的路径修改了,以便看到资源更新的效果。 例如我把农场背景图片改为了下载资源包中的3D/CompleteMap.PNG 编译运行项目:
Reset:用于重置版本号,办删除下载资源。
_pathToSave保存着文件的下载路径,压缩包下载下来后,将被自动解压到_pathToSave中。html Nels的个人空间 cocos2dx 3.2引擎版本 lua热更新 自动更新 http://zengrong.net/post/2131.htm 这个关于lua热更新的文章也是写得甚好!十分容易明白,步骤清晰 http://blog.csdn.net/xiaominghimi/article/details/8825524 Himi关于热更新的解析贴 cocos2dx 2.x引擎版本 http://blog.csdn.net/cloud95/article/details/38065085 cocos2dx lua热更新 实例版本,语言貌似比较通俗 http://www.cocoachina.com/bbs/simple/?t183552.html cocos关于热更新的讨论帖(关于路径的讨论很经典) http://www.cocoachina.com/bbs/read.php?tid=213066 cocos2dx lua 游戏热更新 http://lcinx.blog.163.com/blog/static/43494267201210270345232/ http://my.oschina.net/u/1785418/blog/283043 基于Quick-cocos2dx 2.2.3 的动态更新实现完整篇。(打包,服务器接口,模块自更新) http://blog.csdn.net/q277055799/article/details/8463835 lua热更新原理 http://lcinx.blog.163.com/blog/static/43494267201210270345232/ lua 热更新原理 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |