cocos2dx 3.x 异步加载
来源:互联网 发布:淘宝衣服相同钱不一样 编辑:程序博客网 时间:2024/05/18 22:54
void ResourceManager::Loadresource(){ m_vPng.clear(); m_vPlist.clear(); m_vExportJson.clear(); m_vPvr_ccz.clear(); m_vCsb.clear(); auto preLoadDic = __Dictionary::createWithContentsOfFile("gamedata/preloading.plist"); __Dictionary* pngDic = static_cast<__Dictionary*>(preLoadDic->objectForKey("png")); __Dictionary* plistDic = static_cast<__Dictionary*>(preLoadDic->objectForKey("plist")); __Dictionary* ExportJsonDic = static_cast<__Dictionary*>(preLoadDic->objectForKey("ExportJson")); __Dictionary* Pvr_cczDic = static_cast<__Dictionary*>(preLoadDic->objectForKey("pvr_ccz")); __Dictionary* CsbDir = static_cast<__Dictionary*>(preLoadDic->objectForKey("csb")); __String* s; for (unsigned int i=0; i<pngDic->count(); ++i) { s = dynamic_cast<__String*>(pngDic->objectForKey(__String::createWithFormat("%d",i+1)->getCString())); m_vPng.push_back(s->_string); } for (unsigned int i=0; i<plistDic->count(); ++i) { s = dynamic_cast<__String*>(plistDic->objectForKey(__String::createWithFormat("%d",i+1)->getCString())); m_vPlist.push_back(s->_string); } for (unsigned int i=0; i<ExportJsonDic->count(); ++i) { s = dynamic_cast<__String*>(ExportJsonDic->objectForKey(__String::createWithFormat("%d",i+1)->getCString())); m_vExportJson.push_back(s->_string); } for (unsigned int i=0; i<Pvr_cczDic->count(); ++i) { s = dynamic_cast<__String*>(Pvr_cczDic->objectForKey(__String::createWithFormat("%d",i+1)->getCString())); m_vPvr_ccz.push_back(s->_string); } for (unsigned int i=0; i<CsbDir->count(); ++i) { s = dynamic_cast<__String*>(CsbDir->objectForKey(__String::createWithFormat("%d",i+1)->getCString())); m_vCsb.push_back(s->_string); } //用来处理加载进度条百分比 以及 资源匹配plist m_iPngNum = 0; m_iPlistNum = 0; m_iPvr_cczNum = 0; m_iExportJsonNum= 0; m_iCsbNum = 0; m_iLoadFileNum = 0; m_iTotalFileNum = m_vPng.size()+ m_vPlist.size()+ m_vExportJson.size()+ m_vPvr_ccz.size()+ m_vCsb.size();}//预加载集成 fileName:预加载名字, fileType:预加载类型void ResourceManager::AsyncTypeResources( const std::string fileName, AsyncType fileType){ switch (fileType) { case ResourceManager::kPng: log("AsyncLoading\t\t%s.png", fileName.c_str()); Director::getInstance()->getTextureCache()->addImageAsync(fileName+".png", CC_CALLBACK_1(ResourceManager::imageAsyncCallback, this)); break; case ResourceManager::kPlist: log("AsyncLoading\t\t%s.plist", fileName.c_str()); Director::getInstance()->getTextureCache()->addImageAsync(fileName+".png", CC_CALLBACK_1(ResourceManager::plistImageAsyncCallback, this)); break; case ResourceManager::kPvr_ccz: log("AsyncLoading\t\t%s.pvr.ccz", fileName.c_str()); Director::getInstance()->getTextureCache()->addImageAsync(fileName+".pvr.ccz", CC_CALLBACK_1(ResourceManager::pvrPlistImageAsyncCallback, this)); break; case ResourceManager::kJson: log("AsyncLoading\t\t%s.ExportJson", fileName.c_str()); ArmatureDataManager::getInstance()->addArmatureFileInfoAsync(fileName+".ExportJson", this, schedule_selector(ResourceManager::jsonAsyncCallback)); break; case ResourceManager::kCsb: log("AsyncLoading\t\t%s.csb", fileName.c_str()); ArmatureDataManager::getInstance()->addArmatureFileInfoAsync(fileName+".csb", this, schedule_selector(ResourceManager::csbAsyncCallback)); break; default: log("fileName: %s, fileType: %d", fileName.c_str(), fileType); break; }}void ResourceManager::AsyncLoadGameResouse(){ for (int i=0; i<m_vPng.size(); ++i) { AsyncTypeResources(m_vPng[i].c_str(), AsyncType::kPng); } for (int j=0; j<m_vPlist.size(); ++j) { AsyncTypeResources(m_vPlist[j].c_str(), AsyncType::kPlist); } for (int k=0; k<m_vPvr_ccz.size(); ++k) { AsyncTypeResources(m_vPvr_ccz[k].c_str(), AsyncType::kPvr_ccz); } for (int l=0; l<m_vExportJson.size(); ++l) { AsyncTypeResources(m_vExportJson[l].c_str(), AsyncType::kJson); } for (int m=0; m<m_vCsb.size(); ++m) { AsyncTypeResources(m_vCsb[m].c_str(), AsyncType::kCsb); }}void ResourceManager::imageAsyncCallback( Ref* pSender ){ log("AsyncLoadCallBack\t\t%s.png", m_vPng[m_iPngNum].c_str()); ++m_iPngNum; ++m_iLoadFileNum; //此处可以设置加载进度百分比 if (m_iLoadFileNum >= m_iTotalFileNum) { //此处可以跳转场景 }}void ResourceManager::plistImageAsyncCallback( cocos2d::Texture2D* texture_ ){ log("AsyncLoadCallBack\t\t%s.plist", m_vPlist[m_iPlistNum].c_str()); ++m_iPlistNum; ++m_iLoadFileNum; //当全部的plist图片加载完成后,执行plist图片和png图片绑定 if (m_iPlistNum == m_vPlist.size()) { for (int i=m_vPlist.size()-1; i>=0; --i) { SpriteFrameCache::getInstance()->addSpriteFramesWithFile(m_vPlist[i]+".plist", m_vPlist[i]+".png"); } } //此处可以设置加载进度百分比 if (m_iLoadFileNum >= m_iTotalFileNum) { //此处可以跳转场景 }}void ResourceManager::pvrPlistImageAsyncCallback( cocos2d::Texture2D* texture_ ){ log("AsyncLoadCallBack\t\t%s.pvr.ccz", m_vPvr_ccz[m_iPvr_cczNum].c_str()); ++m_iPvr_cczNum; ++m_iLoadFileNum; //当全部的plist图片加载完成后,执行plist图片和pvr_ccz图片绑定 if (m_iPvr_cczNum == m_vPvr_ccz.size()) { for (int i=m_vPvr_ccz.size()-1; i>=0; --i) { SpriteFrameCache::getInstance()->addSpriteFramesWithFile(m_vPvr_ccz[i]+".plist", m_vPvr_ccz[i]+".pvr.ccz"); } } //此处可以设置加载进度百分比 if (m_iLoadFileNum >= m_iTotalFileNum) { //此处可以跳转场景 }}void ResourceManager::jsonAsyncCallback( float f ){ log("AsyncLoadCallBack\t\t%s.ExportJson", m_vExportJson[m_iExportJsonNum].c_str()); ++m_iExportJsonNum; ++m_iLoadFileNum; //此处可以设置加载进度百分比 if (m_iLoadFileNum >= m_iTotalFileNum) { //此处可以跳转场景 }}void ResourceManager::csbAsyncCallback( float f ){ log("AsyncLoadCallBack\t\t%s.csb", m_vCsb[m_iCsbNum].c_str()); ++m_iCsbNum; ++m_iLoadFileNum; //此处可以设置加载进度百分比 if (m_iLoadFileNum >= m_iTotalFileNum) { //此处可以跳转场景 }}
附: preloading.plist
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"/><plist version="1.0"> <dict> <!-- .png 图片预加载 --> <key>png</key> <dict> <key>1</key> <string>pngName</string> </dict> <!-- .plist 图片预加载 --> <key>plist</key> <dict> <key>1</key> <string>plistName</string> </dict> <!-- .pvr.ccz 图片预加载 --> <key>pvr_ccz</key> <dict> <key>1</key> <string>pvr_cczName</string> </dict> <!-- .ExportJson 骨骼动画预加载 --> <key>ExportJson</key> <dict> <key>1</key> <string>jsonName</string> </dict> </dict></plist>
刚开始预加载plist的回调是这样的
void ResourceManager::plistImageAsyncCallback( cocos2d::Texture2D* texture_ ){ log("AsyncLoadCallBack\t\t%s.plist", m_vPlist[m_iPlistNum].c_str()); SpriteFrameCache::getInstance()->addSpriteFramesWithFile(m_vPlist[m_iPlistNum]+".plist", m_vPlist[m_iPlistNum]+".png"); ++m_iPlistNum; ++m_iLoadFileNum; //此处可以设置加载进度百分比 if (m_iLoadFileNum >= m_iTotalFileNum) { //此处可以跳转场景 }}
但是会出现资源匹配错乱的问题, 具体原因不明, 也不想去查了.
0 0
- cocos2dx 3.x 异步加载
- Cocos2dx-3.x csloader 加载
- cocos2dx 资源 异步加载
- Cocos2dx 异步加载纹理
- Cocos2dx 3.x 资源加载进度条Loading...
- Cocos2dx多线程与异步加载
- Cocos2d-x 3.x 异步加载资源和Loading界面
- Cocos2dx 3.X jsb加载JavaScript源码文件分析
- cocos2dx 解决异步加载plist的方法
- cocos2dx异步加载资源制作Loading界面
- cocos2dx资源加载机制(同步/异步)
- cocos2dx资源加载机制(同步/异步)
- Cocos2dx教程-多线程与异步加载
- cocos2d-x图片异步加载
- cocos2d-x异步加载图片
- 认识 Cocos2dx 3.x
- cocos2dx 3.x api
- 【cocos2dx 3.x】画线
- 第二十章 RTC实时时钟实验
- 黑马程序员——Objective-C——简介
- ListView 滑动时组件数据或图片变化
- ContentProvider的使用
- crash引起播放列表退出的问题分析过程分享
- cocos2dx 3.x 异步加载
- 仿唯品会 点击加背景图片
- php生成guid
- Android问题集锦之三十一:Android Studio: Plugin with id 'android-library' not found
- C++中的虚函数表解析
- Struts2 验证码图片实例
- Windows下安装 android maven插件教程
- eclipse总是连接不上Genymotion模拟器的解决方法
- 设置手机屏幕常亮