【说明】
热更新实际就是从服务器下载资源包,保存到本地后解压使用的过程,而Cocos2d已经帮我们封装好了,那就是AssetsManager类,我们只需要关心怎么使用就行了。
【使用】
1. 准备好资源包
我这里直接用的GitHub作为服务器做测试,GitHub的基本使用请参考上一篇文章。
> 创建代码库后,上传一个资源文件(cocos2d-update-temp-package.zip)和一个版本文件(version)。
> 分别得到对应的 raw 地址。(我是直接开文件,然后点击Raw按钮,然后在地址栏复制的)
2. 项目中使用
> AssetsManager类在extensions中,所以需要引用头文件:
#include "extensions/cocos-ext.h" USING_NS_CC_EXT;> 创建AssetsManager并且检查更新,代码如下:
std::string packageUrl = "http://raw.githubusercontent.com/ldpjay/Cocos2dx/master/20150803/cocos2dx-update-temp-package.zip"; std::string versionFileUrl = "http://raw.githubusercontent.com/ldpjay/Cocos2dx/master/20150803/version"; std::string storagePath = FileUtils::getInstance()->getWritablePath(); auto pAssets = AssetsManager::create(packageUrl.c_str(), versionFileUrl.c_str(), storagePath.c_str(), CC_CALLBACK_1(Scene02::onError, this), CC_CALLBACK_1(Scene02::onProgress, this), CC_CALLBACK_0(Scene02::onSuccess, this)); pAssets->retain(); // 如果不加这句会报错(cocos2d-x-v3.7) // pAssets->deleteVersion(); // 清除当前版本的版本号 if (pAssets->checkUpdate()) { pAssets->update(); }> AssetsManager后三个参数分别是错误、进度和完成的回调函数。
void Scene02::onError(int code) { log("update faild. error code %d", code); } void Scene02::onProgress(int percent) { log("update progress : %d", percent); } void Scene02::onSuccess() { log("update success."); }> 可以再onProgress中实现进度条,在OnSuccess调用后就可以使用更新的资源了。AssetsManager内部已经将存储路径加入“SearchPath”了,所有可以直接用文件的相对路径进行访问。
> 更多使用请查看AssetsManager接口。
3. 效果预览