-
虽然 cocos2d-x自带了三种模式来适应屏幕,但还是存在一些问题,会产生黑边,所以还是需要多套资源来适应屏幕。
这里我选择了四种分辨率9:16 3:5 2:3 3:4,在resource资源目录下新建了四个文件夹放置多套背景图片,在AppDelegate中添加如下函数调用即可。[cpp]void AppDelegate::ScreenAdaptive(){CCSize szFrame = CCEGLView::sharedOpenGLView()->getFrameSize();float Proportion = szFrame.width/szFrame.height;const int num = 4;float diff[num]={fabs(Proportion-(9.0/16)),fabs(Proportion-(3.0/5)),fabs(Proportion-(2.0/3)),fabs(Proportion-(3.0/4))};int yy = -1;for (int i=0;i<num;i++)if((diff[i] >-0.000001) && (diff[i] < 0.000001)){yy = i;break;}if (yy == -1){int min = diff[0];yy = 0;for (int i=1;i<num;i++)if (diff[i]<min){min = diff[i];yy = i;}}switch(yy){case 0:{std::vector<string> searchPaths;searchPaths.push_back("9x16");CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths);CCEGLView::sharedOpenGLView()->setDesignResolutionSize(648,1152, kResolutionShowAll);break;}case 1:{std::vector<string> searchPaths;searchPaths.push_back("3x5");CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths);CCEGLView::sharedOpenGLView()->setDesignResolutionSize(624,1040, kResolutionShowAll);break;}case 2:{std::vector<string> searchPaths;searchPaths.push_back("2x3");CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths);CCEGLView::sharedOpenGLView()->setDesignResolutionSize(640,960, kResolutionShowAll);break;}case 3:{std::vector<string> searchPaths;searchPaths.push_back("3x4");CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths);CCEGLView::sharedOpenGLView()->setDesignResolutionSize(624,832, kResolutionShowAll);break;}}}这里简单介绍一下setSearchPaths,在最近更新的版本里,已经没有了setResourceDirectory,取而代之的是setSearchPaths,以下是关于它的描述:[cpp]/*** Sets the array of search paths.** You can use this array to modify the search path of the resources.* If you want to use "themes" or search resources in the "cache", you can do it easily by adding new entries in this array.** @note This method could access relative path and absolute path.* If the relative path was passed to the vector, CCFileUtils will add the default resource directory before the relative path.* For instance:* On Android, the default resource root path is "assets/".* If "/mnt/sdcard/" and "resources-large" were set to the search paths vector,* "resources-large" will be converted to "assets/resources-large" since it was a relative path.** @param searchPaths The array contains search paths.* @see fullPathForFilename(const char*)* @since v2.1*/[cpp]// 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)[cpp]CCSprite *pSprite = CCSprite
转载地址: http://www.2cto.com/kf/201311/256694.html