Cocos2d-x v2.1 中 setResourceDirectory() 方法不再可用

来源:互联网 发布:新思路二级vb序列号 编辑:程序博客网 时间:2024/06/05 15:22

原文链接:http://blog.csdn.net/some_do/article/details/8914748

cocos2d-x v2.1 中不支持 CCFileUtils::sharedFileUtils()->setResourceDirectory(dir) 方法,

替代的做法是使用 CCFileUtils::sharedFileUtils()->setSearchResolutionsOrder(resDirOrders)方法,

resDirOrders 声明为 std::vector<std::string> 。

cocos2d-x 文档中描述如下(英文的,简单明了,偷懒不翻译了):


1.1. Developer guilde

CCFileUtils::setSearchResolutionsOrder() is added to support distributed strategy. 

You can set searching resolutions order like this

using namespace std;vector<string> resDirOrders;if (resolution is ipad retina) {    resDirOrders.push_back("resources-ipadhd");    resDirOrders.push_back("resources-ipad");    resDirOrders.push_back("resources-iphonehd");}CCFileUtils::sharedFileUtils()->setSearchResolutionsOrder(resDirOrders);

After setting searching resolutions order, suppose we create a sprite like this

CCSprite* sprite = CCSprite::create("images/tex.png"); 

Engine will find tex.png in the following sequence

find it in images/resources-ipadhd/

if not found, find it in images/resources-ipad/

if not found, find it in images/resources-iphonehd/

if not found, find it in images/


1.2. Notes

This strategy is not suitable for multi-resolution adaption, because there are too many resolutions on Android. 

You can not provide all resources for all resolutions, then set searching order based on resolutions, such as

using namespace std;vector<string> resDirOrders;if (resolution is reslution1) {    resDirOrders->push_back("path1");    resDirOrders->push_back("path2");    ...} else if (resolution is resolution2) {    resDirOrders->push_back("path-a");    resDirOrders->push_back("path-b");    ...}...CCFileUtils::sharedFileUtils()->setSearchResolutionsOrder(resDirOrders);

2. Centralized strategy

2.1. Why use a different mechanism than cocos2d-iphone

Cocos2d-iphone uses -hd, -ipad, -ipadhd to determine which picture to load. 

This mechanism is good enough for iOS platform, 

but is not so suitable for Android, because it has many different resolutions.

Cocos2d-x is a cross platform engine, so it should use another mechanism.


2.2. What is the new mechanism

Cocos2d-x uses the new mechanism to load a picture since version cocos2d-2.0-x-2.0.2. 

It does not use -hd, -ipad, -ipadhd suffixes to indicate images for different resolutions.

The mechanism is:

Try to find a picture in the paths set by CCFileUtils::setSearchPaths() firstly,

if it's not found, then find the picture in Resources/

// set searching paths to "/mnt/sd/example" and "/data/data/org.cocos2dx.example" vector<string> searchPaths;searchPaths.push_back("/mnt/sd/example");searchPaths.push_back("/data/data/org.cocos2dx.example");CCFileUtils::setSearchPaths(searchPaths);// engine will find "1.png" in /mnt/sd/example, if there it is not found, // then engine will find "1.png" in /data/data/org.cocos2dx.example// if not found, engine will find "1.png" in Resources/ (this path is platform dependent)CCSprite* pSprite = CCSprite::create("1.png");

It is easy to add searching path to engine. 

Using this method, you can load resources into a path you know, then set this path to engine. 

Engine will find a resource in this path if needed.


2.3. Developer guide

Do not use -hd, -ipad, -ipadhd suffixes any more. 

Instead, put all hd files in a directory, then all ipad files in another directory, and so on, 

then set resource directory to tell the engine where to find a picture.

If you want to share some resources between different resolutions, 

then you can put all shared resources in Resources/, 

and put resolution specified resources in different directories.

You can refer to samples/HelloCpp for more information.