【更新】Cocos2d-x使用AssetsManager更新资源和脚本

【说明】

热更新实际就是从服务器下载资源包,保存到本地后解压使用的过程,而Cocos2d已经帮我们封装好了,那就是AssetsManager类,我们只需要关心怎么使用就行了。

【使用】

1. 准备好资源包

我这里直接用的GitHub作为服务器做测试,GitHub的基本使用请参考上一篇文章

> 创建代码库后,上传一个资源文件(cocos2d-update-temp-package.zip)和一个版本文件(version)。


> 分别得到对应的 raw 地址。(我是直接开文件,然后点击Raw按钮,然后在地址栏复制的)


2. 项目中使用

> AssetsManager类在extensions中,所以需要引用头文件:

扫描二维码关注公众号,回复: 3860400 查看本文章

#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. 效果预览


猜你喜欢

转载自blog.csdn.net/ldpjay/article/details/47271939