2.1.2开始引擎重构了CCFileUtils,添加了资源的搜索路径队列,目前提供的修改接口有两个addSearchPath和setSearchPaths。


addSearchPath在当前队列的最后添加新路径。


setSearchPaths可以一次添加多个路径,有两种写法:insert(来源于AssetsManagerTest)和push_back(来源于HelloCpp)。


两个接口都支持相对路径和绝对路径,使用相对路径时,会自动补全。


使用getSearchPaths可以获得当前路径队列。




一、向空队列添加


1.无测试代码

  1. std::vector<std::string> searchPaths1 = CCFileUtils::sharedFileUtils()->getSearchPaths();
  2. for (std::vector<std::string>::const_iterator iter = searchPaths1.begin(); iter != searchPaths1.end(); ++iter)
  3. {
  4. CCLOG(“searchPaths1 : %s”, iter->data());
  5. }

  6. //添加测试代码

  7. std::vector<std::string> searchPaths2 = CCFileUtils::sharedFileUtils()->getSearchPaths();
  8. for (std::vector<std::string>::const_iterator iter = searchPaths2.begin(); iter != searchPaths2.end(); ++iter)
  9. {
  10. CCLOG(“searchPaths2 : %s”, iter->data());
  11. }

复制代码



两次取到的都只有资源根目录




2.使用addSearchPath

  1. CCFileUtils::sharedFileUtils()->addSearchPath(“480_800”);
  2. CCFileUtils::sharedFileUtils()->addSearchPath(“720_1280”);

复制代码

Win32




Andriod




可以看到新路径按顺序添加在最后




3.setSearchPaths的insert方式

  1. std::vector<std::string> searchPaths;
  2. searchPaths.insert(searchPaths.begin(), “480_800”);
  3. searchPaths.insert(searchPaths.begin(), “720_1280”);
  4. CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths);

复制代码

Win32




Andriod




可以看到后插入的排在最前面




4.setSearchPaths的push_back方式

  1. std::vector<std::string> searchPath;
  2. searchPath.push_back(“720_1280”);
  3. searchPath.push_back(“480_800”);
  4. CCFileUtils::sharedFileUtils()->setSearchPaths(searchPath);

复制代码

Win32




Andriod同3,略


可以看出路径按添加顺序排在前面




二、如果队列里已经有路径,可以先调用getSearchPaths获得队列,然后修改队列

  1. CCFileUtils::sharedFileUtils()->addSearchPath(“480_856”);

  2. std::vector<std::string> searchPaths1 = CCFileUtils::sharedFileUtils()->getSearchPaths();
  3. for (std::vector<std::string>::const_iterator iter = searchPaths1.begin(); iter != searchPaths1.end(); ++iter)
  4. {
  5. CCLOG(“searchPaths1 : %s”, iter->data());
  6. }

  7. //添加测试

  8. std::vector<std::string> searchPaths2 = CCFileUtils::sharedFileUtils()->getSearchPaths();
  9. for (std::vector<std::string>::const_iterator iter = searchPaths2.begin(); iter != searchPaths2.end(); ++iter)
  10. {
  11. CCLOG(“searchPaths2 : %s”, iter->data());
  12. }

复制代码

1.insert方式

  1. searchPaths1.insert(searchPaths1.begin(), “480_800”);
  2. searchPaths1.insert(searchPaths1.begin(), “720_1280”);
  3. CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths1);

复制代码



可以看到后添加的排在前面,多了一个根路径的原因是,接口会判断路径的最后一个字符是不是”/”,如果不是则添加一个,而接口在最后会判断是否已经添加过根路径,如果没有则加上,因为多了一个”/”,导致接口认为没有加过,所以Win32下有这个问题,安卓下没有问题




2.push_back方式

  1. searchPaths1.push_back(“720_1280”);
  2. searchPaths1.push_back(“480_800”);
  3. CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths1);

复制代码



可以看到新路径按顺序加在最后