一、使用多套资源实现屏幕适配
早期iPhone的型号不多,屏幕适配就简单粗暴地准备N套资源,
在Cocos2dx2.0.4之前出现的屏幕适配,以资源为主的5个设备:5套资源
现在我模拟一下,在资源Resources文件夹下新建两个文件夹large,small分别存资源
然后在AppDelegate.cpp中,scene创建之前写一下代码
std::vector<std::string> v;
auto winSize = Director::getInstance()->getWinSize();
if (winSize.width < 800) {
v.push_back("small");
}else if (winSize.width >= 800 )
{
v.push_back("large");
}
FileUtils::getInstance()->setSearchPaths(v);
得到当前设备分辨率winSize,判断其大小,然后将文件名字符串放入一个std::vector容器中,使用文件操作工具单例设置资源查找目录为Resources/large或Resources/small(当资源庞大起来这做法实在太笨重了)
这样就完成了准备N套资源的简单实现(不建议使用的屏幕适配方案)
二、使用缩放因子概念实现屏幕适配
在CCGLView中有一个方法叫setDesignResolutionSize,就是利用这方法跨平台的屏幕适配
用此方法设置设计分辨率大小,方法原型:
virtual void setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy)
前两个参数就是你要把游戏设计成多宽多高,就是你的设计解决宽度与高度。
第三个参数是适配方案ResolutionPolicy,这是一个枚举类
enum class ResolutionPolicy
{
// 整个视图可显示但可能破坏了宽高比,可能发生畸变,视图拉伸或者压缩
EXACT_FIT,
// 视图填充,不会失真,为了保持宽高比可能会裁剪一部分
NO_BORDER,
//整个视图可显示,不会失真,为了保持宽高比在视图的上下边或左右边可能出现黑边
SHOW_ALL,
// 视图根据你设计的高度与实际设备高度的height缩放因子去约束视图的宽
FIXED_HEIGHT,
// 视图根据你设计的宽度与实际设备宽度的width缩放因子去约束视图的高
FIXED_WIDTH,
UNKNOWN,
};
这就是引擎所提供的解决方案,具体到底是什么效果需要你一个一个去试,在不同分辨率设备模拟器上跑去看效果。
在AppDelegate.cpp中设置glview->setDesignResolutionSize(480, 320, ResolutionPolicy::EXACT_FIT);