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

原文链接: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.


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值