cocos2dx 3.10版本的AssetsManager问题

http://blog.sina.com.cn/s/blog_8ec846620102wfel.html

我是原来从3.3版本移植过来的,但是发现cocosStudio打包的时候#include 找不到,编译不过去,后来发现引擎在3.9版本后把curl给封装了。没办法只好用新版本


3.10版本的发现文件下载有问题,后来发现
       // start download;
        const string outFileName = _storagePath + TEMP_PACKAGE_FILE_NAME;
        _downloader->createDownloadFileTask(_packageUrl, _storagePath );
这_storagePath 是不完全目录,应该改成outFileName  感觉很傻逼的错误
  
还有一个
// Multiple key names
static std::string keyWithHash( const char* prefix, const std::string& url )
{
    char buf[256];
    sprintf(buf,"%s%zd",prefix,std::hash()(url));
    return buf;
}
经过问大神,发现这就是个废物写法,其实就是直接return prefix就可以了!


http://blog.sina.com.cn/s/blog_4adf99aa0102wd7h.html

最近开发新项目,我使用了当前最新的cocos2dx3.11版本。。在用AssetsManager更新一个zip文件的时候,总是报 “can not open downloaded zip file"的错误。这个更新代码是从cocos2dx3.0的项目中直接拿过来的。怎么会出问题,在排队了zip文件问题,代码问题后,陷入了郁闷,然后,把这段代码,放入cocos2dx3.0的工程中,就是正常工作。这下虽然确定了是cocos2dx3.11版本的问题,但还不知道确切原因,我在查看了3.11版本的更新代码后,发现使用了DownLoader新的一个下载类。然后,我也使用这个类,单独做了个下载。发现可以正常工作。然后又开始查了AssetsManager的使用方法,终于发现了问题 在AssetsManager.cpp文件的构造函数中。第148行。

_downloader->createDownloadFileTask(_packageUrl_storagePath);发现了问题,这个第二个参数使用的是没加TEMP_PACKAGE_FILE_NAME 这个默认文件名的路径。所以将这个第二个参数改为他的上一行的变量outFileName 就可以了。_downloader->createDownloadFileTask(_packageUrloutFileName);

万事大吉。。。原来,cocos团队也会犯这种错误,这可难为我们大家了。。i



http://blog.csdn.net/yang3wei/article/details/46863417

cocos2dx AssetsManager的一个BUG

链接:http://www.cocoachina.com/bbs/read.php?tid=233044

我们在用 AssetsManager 做资源更新的时候遇到了一个问题,部分玩家热更新失败。查了好久才查出来,原来是我们的资源文件被宽带提供商(我们发现 BUG 的是华数网通、部分手机 3G)缓存了这个资源文件,并对我们的请求链接做了跳转。解决办法在 AssetsManager 源代码中 curl 的设置加上一句


第 443 以及 138 行左右$//设置成更随跳转

curl_easy_setopt(_curl, CURLOPT_FOLLOWLOCATION, 1);


把这个问题反馈出来,希望其他遇到同样问题的人可以少花些时间。

同时也希望 cocos2dx 官方默认就把这句代码加上(毕竟国内的网络环境这么复杂)


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、付费专栏及课程。

余额充值