cocos2d-x自适应android不同分辨率,使用多套资源

虽然 cocos2d-x自带了三种模式来适应屏幕,但还是存在一些问题,会产生黑边,所以还是需要多套资源来适应屏幕。

这里我选择了四种分辨率9:16 3:5 2:3 3:4,在resource资源目录下新建了四个文件夹放置多套背景图片,在AppDelegate中添加如下函数调用即可。

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)
	{
		float 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,以下是关于它的描述:

    /** 
     *  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
     */

// 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");


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值