大佬教程收集整理的这篇文章主要介绍了cocos2dx 3.3 AssetsManager测试更新,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include "cocos-ext.h"
bool initupdate(); void menuupdateCallBACk(Ref* sender); void updateEnd(); void onError(int nerrCodE); void onProgress(int nProgress); void onsuccess(); private: cocos2d::LabelTTF *m_labelupdate; cocos2d::extension::Assetsmanager *m_pAssetsMgr;
bool HelloWorld::initupdate() { auto visibleSize = Director::geTinstance()->getVisibleSize(); auto origin = Director::geTinstance()->getVisibLeorigin(); auto updateItem = MenuItemImage::create( "CloseNormal.png","CloseSELEcted.png",CC_CALLBACK_1(HelloWorld::menuupdateCallBACk,this)); updateItem->setPosition(origin + Vec2(visibleSize / 2)); // create menu,it's an autorelease object auto menu = Menu::create(updateItem,nullptr); menu->setPosition(Vec2::ZERO); this->addChild(menu,2); m_labelupdate = LabelTTF::create("Ready","Arial",30); // position the label on the center of the screen m_labelupdate->setPosition(origin.x + visibleSize.width / 2,origin.y + visibleSize.height / 2 + m_labelupdate->getContentSize().height); // add the label as a child to this layer this->addChild(m_labelupdate,2); return true; } void HelloWorld::menuupdateCallBACk(Ref* sender) { m_labelupdate->setString("updating..."); std::string packageUrl = "http://xz.cr173.com/soft1/VA_X_Setup.zip"; std::string versionFileUrl = "http://xz.cr173.com/soft1/VA_X_Setup.zip"; // 版本在Assetsmanager内部写死,测试用 // 需要自己处理完整路径,所以直接获取一个可写路径 内部不会判断文件夹是否存在,所以需要确认文件夹存在 std::string storegePath = FileUtils::geTinstance()->getWritablePath(); // create create之后是autorelease的,所以需要retain m_pAssetsMgr = extension::Assetsmanager::create( packageUrl.c_str(),versionFileUrl.c_str(),storegePath.c_str(),CC_CALLBACK_1(HelloWorld::onError,this),CC_CALLBACK_1(HelloWorld::onProgress,CC_CALLBACK_0(HelloWorld::onsuccess,this)); m_pAssetsMgr->retain(); // retain // check if (m_pAssetsMgr->checkupdate()) { // update m_pAssetsMgr->update(); } } void HelloWorld::updateEnd() { m_pAssetsMgr->release(); } void HelloWorld::onError(int nerrCodE) { char sTemp[256] = { 0 }; snprintf(sTemp,256,"update Error! ErrCode:%d",nErrCodE); extension::Assetsmanager::ErrorCode errCode = (extension::Assetsmanager::ErrorCodE)nErrCode; switch (errCodE) { case extension::Assetsmanager::ErrorCode::NETWORK: snprintf(sTemp,"update Error! NETWORK"); break; case extension::Assetsmanager::ErrorCode::CREATE_FILE: snprintf(sTemp,"update Error! CREATE_FILE"); break; case extension::Assetsmanager::ErrorCode::NO_NEW_VERSION: snprintf(sTemp,"update Error! NO_NEW_VERSION"); break; case extension::Assetsmanager::ErrorCode::UNCOMPRESS: snprintf(sTemp,"update Error! UNCOMPRESS"); break; default: break; } std::string label = sTemp; m_labelupdate->setString(label); updateEnd(); } void HelloWorld::onProgress(int nProgress) { char sTemp[256] = { 0 }; snprintf(sTemp,"Progress:%d",nProgress); std::string label = sTemp; m_labelupdate->setString(label); } void HelloWorld::onsuccess() { m_labelupdate->setString("update Succeed!"); updateEnd(); }
initupdate();
void Assetsmanager::setSearchPath() { vector<String> searchPaths = FileUtils::geTinstance()->getSearchPaths(); vector<String>::iterator iter = searchPaths.begin(); searchPaths.insert(iter,_storagePath); // 将更新的路径添加到搜索路径的最前面,保证先搜索到更新的文件 FileUtils::geTinstance()->setSearchPaths(searchPaths); }
参考:http://www.cnblogs.com/hll2008/p/4227277.html
我们在用Assetsmanager做资源更新的时候遇到了一个问题,部分玩家热更新失败。查了好久才查出来,原来是我们的@H_616_36@资源文件被宽带提供商(我们发现BUG的是华数网通、部分手机3G)缓存了这个资源文件,并对我们的请求链接做了跳转。解决办法在Assetsmanager源代码中curl的设置加上一句
curl_easy_setopt(_curl,CURLOPT_FOLLOWLOCATION,1); //设置成更随跳转
这个问题在3.3版本已经解决。
参考:http://www.cocoachina.com/bbs/read.php?tid=233044
以上是大佬教程为你收集整理的cocos2dx 3.3 AssetsManager测试更新全部内容,希望文章能够帮你解决cocos2dx 3.3 AssetsManager测试更新所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。