从CocosBuilder3.0 开始,引起了自动缩放目录的支持, 我们可以把资源放到这个目录中, 然后CCB会根据目标设备,缩放到一个合理的尺寸中
再在Cocos2D-X中,通过判断设备类型,引进对应的目录中的资源, 这种新的机制, 给我们提供了许多的方便
自动缩放前的资源:
CCB\Resources\Resources-auto\xxxxxx.png
自动缩放后的资源:
CCB\Published-IOS\resources-iphone\xxxxxx.png
CCB\Published-IOS\resources-iphonehd\xxxxxx.png
CCB\Published-IOS\resources-ipad\xxxxxx.png
CCB\Published-IOS\resources-ipadhd\xxxxxx.png
CCB\Published-Android\resources-resources-xsmall\xxxxxx.png
...
cocos2d-x中的程序代码:
需要根据当前设备的类型,加载对应的资源,这里给出部份代码:
在AppDelegate.cpp中的applicationDidFinishLaunching 函数中加入以下代码:
std::vector<std::string>vecFindPath;
TargetPlatform target = getTargetPlatform();
CCSize frameSize = pEGLView->getFrameSize();
switch (target)
{
case cocos2d::kTargetIphone:
{
vecFindPath.push_back("Published-iOS");
if(frameSize.width==480 && frameSize.height==320) //iphone3g
{
vecFindPath.push_back("Published-iOS/resources-iphone");
}
else if(frameSize.width==960 && frameSize.height==640) //iphone4
{
vecFindPath.push_back("Published-iOS/resources-iphonehd");
}
else if(frameSize.width==1136 && frameSize.height==640) //iphone5
{
vecFindPath.push_back("Published-iOS/resources-iphone5"); //这个不是自动生成的,3/4的图不好适应,可以单独在这里做适配
vecFindPath.push_back("Published-iOS/resources-iphonehd");
}
else
{
CCMessageBox("资源加载失败,无法识别iphone手机版本型号!", "错误");
}
}break;
case cocos2d::kTargetIpad:
{
vecFindPath.push_back("Published-iOS");
if(frameSize.width==1024 && frameSize.height==768) //ipad/ipadmini
{
vecFindPath.push_back("Published-iOS/resources-ipad");
}
else if(frameSize.width==2048 && frameSize.height==1536) //ipad3/ipad4
{
vecFindPath.push_back("Published-iOS/resources-ipadhd");
}
else
{
CCMessageBox("资源加载失败,无法识别ipad版本型号!", "错误");
}
}break;
case cocos2d::kTargetAndroid:
{
vecFindPath.push_back("Published-Android");
//...
}break;
这样便可以轻松的使用一套资源图片适配到所有设备了, 但注意在CCB中设计的时候一定要换百分比去调整位置, 否则就很难实施起来了!