Cocos2d-x v2.1 中 setResourceDirectory() 方法不再可用
2013-09-07 12:01
260 查看
原文链接: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
After setting searching resolutions order, suppose we create a sprite like this
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
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/
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.
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.
相关文章推荐
- CCFileUtils::sharedFileUtils()->setResourceDirectory(dir) 方法的更新
- Android 4.3 安全提升,Set-UID-Root 权限提升不再起作用,原先的ROOT方法将失效
- imageView的ScaleType缩放和setImageResource方法
- @Autowired 与@Resource的区别 及@Autowired 在成员变量和set方法的区别
- -Dmaven.multiModuleProjectDirectory system property is not set. 报错IDEA修改方法
- 点滴:ImageView setImageResource方法对资源的复用
- 解决resource directory '/xxx//res' does not exist的方法
- Cocos2d-x3.2总结(五)Eclipse下生成Android APK提示"Description Resource Path Location Type"的解决方法集锦
- gradle -v时报ERROR:JAVA_HOME is set to an invalid directory xxx解决方法
- @ Replica set 多服务器 高可用 配置 (添加删除节点方法)
- [置顶] 用android-ndk-r8e交叉编译cocos2d-x-2.1.4Android工程方法(而不再使用Cgywin,注意ndk和cocos2d-x版本)
- 对于bitmap和一些设置图片setImageResource()和setImagebitmap()方法减少内存使用的方法
- cocos2d-x 中的 CC_SYNTHESIZE 自动生成 get 和 set 方法
- bootbox自定义dialog、confirm、alert样式,以及基本设置方法setDefaults中可用参数
- @Autowired 与@Resource的区别 及@Autowired 在成员变量和set方法的区别
- apache 指定的网络名不再可用 原因及解决方法
- 【转】bootbox自定义dialog、confirm、alert样式,以及基本设置方法setDefaults中可用参数
- 利用反射原理用get/set方法设置属性(也可用clone,但如果有特殊处理的东西,这个好用)
- cocos2d-x忠CCMenu的setHandlerPriority崩溃的解决方法(转)
- bootbox自定义dialog、confirm、alert样式,以及基本设置方法setDefaults中可用参数