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

【说明】

热更新实际就是从服务器下载资源包,保存到本地后解压使用的过程,而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. 效果预览

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cocos2d-x是一个使用C++的开源2D游戏引擎,可以在多个平台(如iOS、Android、Windows、macOS)上运行。Cocos2d-x提供了一个AssetsManager类,用于将游戏资源动态加载到游戏中,以减少游戏的启动时间和占用的内存空间。 AssetsManager的基本工作流程如下: 1. 配置Manifest文件,它包含了游戏资源的列表和版本号。 2. 创建一个AssetsManager对象,并设置Manifest文件的路径,并设置下载资源的路径(可选)。 3. 调用AssetsManager::update()方法来检查游戏资源是否需要更新,如果需要,将进行下载更新。 4. 调用AssetsManager::getLocalManifest()方法获取本地Manifest文件内容和版本号。 5. 调用AssetsManager::loadLocalManifest()方法加载本地Manifest文件。 6. 调用AssetsManager::create()方法创建AssetsManager对象并返回。 7. 调用AssetsManager对象的loadRemoteManifest()方法从远程服务器加载Manifest文件,并设置版本号和下载路径。 8. 调用AssetsManager::update()方法检查游戏资源是否需要更新,并进行下载更新AssetsManager提供了以下方法: 1. setPackageUrl()和setVersionFileUrl():设置游戏资源的下载路径和版本文件的下载路径。 2. deleteVersion():删除指定版本的游戏资源。 3. getLocalManifest():获取本地Manifest文件内容和版本号。 4. loadLocalManifest():从本地加载Manifest文件。 5. create():创建一个AssetsManager对象。 6. loadRemoteManifest():从远程服务器加载Manifest文件,并设置版本号和下载路径。 7. update():检查游戏资源是否需要更新,并进行下载更新。 8. getStoragePath():获取游戏资源的存储路径。 AssetsManager可以显著减少游戏启动时间和内存占用,提高游戏性能和用户体验。同时,它也提供了灵活的配置和管理方式,方便开发人员对游戏资源进行动态加载和更新

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值