cocos2dx 2.2.* 内更新资源

    刚刚接触cocos2dx,需要内更新游戏资源,找了一下发现这个项目cocos2d-x-2.2.2\samples\Cpp\AssetsManagerTest  发现这个DEMO写的很不错,不但可以更新资源还可以更新代码,但是只能更新js/lua这种脚本语言的代码,c++代码是不可以的  不过我只需要更新游戏资源就可以了.

    于是,我就新建了一个项目TestUpdata(一激动单词都拼错了). 由于我win电脑暂时没配置cygwin,所以打包android不方便,当然也不可以打包ios,所以我就在MAC上开始写这个DEMO了,与其说是写不如说是copy. 就是单纯的把AssetsManagerTest这个DEMO里更新js的代码给删除了,只要更新资源的就好了.为了测试方便我把DEMO里获取资源的路径改成了自己的,在Github里申请了一个账号,然后把测试资源传上去.

    写完以后,我用了一台5c测试的,更新是正常的,但是更新到本地的资源删除不了,然后在xcode里用模拟器发现是可以删除的,各种郁闷各种纠结啊 后来突然想到了是不是没越狱的原因,然后换了一台越狱的4s果然好了. 额,好悲剧! 打包成apk也是一切正常的.

    简单的流程跑通以后,想加入一些提示以及支持断点下载资源. 想了一下之前做unity3d内更新的时候,我的version列表里面有所有assetbundle文件名和最后修改的时间,这样只需要在游戏本地维护一份相同的version文件就好了. 不过这个DEMO里资源是扔到一个zip文件里的,所以断点更新肯定不好弄,我也不想改太多代码[人太懒了],所以这个就算了. 不过我可以在version文件里写入资源的大小,这样每次更新之前可以提示玩家是否更新资源.

    简单的改了一下AssetsManager.h和AssetsManager.cpp其实就是加了一个函数'getPackageSize',以前version文件里只有一个版本号,现在在版本号之后用#符号隔开了一个资源zip包大小的int字段. version.txt文件改成了类似 1.0.2#20480 ,解析的时候getPackageSize返回后面一个字段就好了.

说一下AssetsManager.h中添加public函数int getPackageSize(); private变量int _packageSize; 在AssetsManager.cpp中checkUpdate函数中需要把以前一个版本字段给解析成一个版本一个资源大小资源,如果是c#或者java直接split赋值就好了,可是c++还要自己写. checkUpdate函数以前的curl_easy_setopt(_curl, CURLOPT_WRITEDATA, &_version);改成

    string temp;
    //....
    curl_easy_setopt(_curl, CURLOPT_WRITEDATA, &temp);    //&_version
    //....
    
    //modify by xudd , to resolve package size
    string str[20];
    int index=temp.find('#');
    int i=0;
    while (index!=-1) {
        str[i++]=temp.substr(0,index);
        temp=temp.substr(index+1);
        index=temp.find('.');
    }
    str[i++]=temp;

    _version=str[0];
    _packageSize=atoi(str[1].c_str());

    //CCLOG("version-%s",_version.c_str());
    //CCLOG("packageSize-%d",_packageSize);

然后完成函数

    int AssetsManager::getPackageSize()
    {
        return _packageSize;
    }

    到此我的TestUpdata已经可以正常跑了,当然了还有些提示以及更新的流程跟正式游戏不一样[正常的游戏肯定不是摁完按钮才检测版本的]

    在MAC上打包apk ipa都完成后,我在win32上直接运行,又报错了,error C1083: 无法打开包括文件:“pthread.h”: No such file or directory    e:\cocos2dx\cocos2d-x-2.2.2\cocos2d-x-2.2.2\extensions\assetsmanager\assetsmanager.h 就是找不到pthread.h  google第一条消息告诉我如果使用pthread.h需要右击工程-->属性-->配置属性-->链接器-->输入-->附加依赖项中添加pthreadVCE2.lib 看了一下是添加过的 接着添加附加包含目录,右击项目-->属性-->配置属性-->C/C++-->常规-->附加包含目录加入pthread头文件所在的目录,这个没有,把$(ProjectDir)..\..\..\cocos2dx\platform\third_party\win32\pthread这个路径添加进去以后就正常了

    写这篇废话的目的就是想记录一下 1-ios未越狱机器删除不了资源 2-pthread.h找不到

    如果你不慎看到了这篇文章,可能觉着满篇废话不知所云,无代码无真相.. 一会我会把整个工程上传了,地址http://download.csdn.net/detail/xd0718/7124233

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值