分辨率适配的这项工作完成的任务是让图片资源随着设备分辨率的变化自动放大和缩小,假如没有做这项工作(比如不使用引擎的默认支持方案),则会当屏幕分辨率和设备分辨率不一致的时候,屏幕上出现黑边或者显示不完全.

【基础概念】分辨率:是指屏幕图像的精密度,即显示器所能显示的像素有多少。如:分辨率480×320的意思是水平方向含有像素数为480个,垂直方向像素数320个。屏幕尺寸一样的情况下,分辨率越高,显示效果就越精细和细腻。同时分辨率也反映了屏幕长宽比例.通常设计分辨率会采用市场目标群体中使用率最高的设备的屏幕分辨率,比如目前安卓设备中 800 x 480和 1280 x 720 两种屏幕分辨率,或 iOS 设备中 1136 x 640 和 960 x 640 两种屏幕分辨率。这样当美术或策划使用设计分辨率设置好场景后,就可以自动适配最主要的目标人群设备。

资源分辨率:图片本身的分辨率

屏幕分辨率:用户实际设备的分辨率,可以通过director->getOpenGLView()->getFrameSize()获取,director->getOpenGLView()->setFrameSize()设置.也就是说,我们想观察游戏在何种分辨率设备上的运行效果时,只需要设置setFrameSize()就可以了.

设计分辨率:游戏运行时资源不需要缩放的正好合适的分辨率,可以通过director->getOpenGLView()->setDesignResolutionSize()设置.

假如不使用设计分辨率(注释掉applicationDidFinishLaunching中的director->getOpenGLView()->setDesignResolutionSize(960, 640, ResolutionPolicy::SHOW_ALL);),一个为苹果4S(960*640)设计的图在苹果6(1334*750)的显示效果是这样的:

cocos2dx分辨率适配

这种留有黑边,并且背景图不居中的效果显然不能满足需要,接下来看setDesignResolutionSize(960, 640, ResolutionPolicy::SHOW_ALL)效果:

cocos2dx分辨率适配

可以看到图片自动居中,并且整体放大了,并且保持了长款比例,缺点是左右留有黑边.传给setDesignResolutionSize的第三个参数ResolutionPolicy::SHOW_ALL被称之为适配策略,除了SHOW_ALL之外再来看其他几个策略的效果:

ResolutionPolicy::EXACT_FIT:

cocos2dx分辨率适配

可以看到EXACT_FIT策略的优势是能填满整个屏幕,但是对图片有拉伸

NO_BORDER:

cocos2dx分辨率适配

可以看到NO_BORDER策略的优势是可以填满整个屏幕,但是图片会超出屏幕范围.


相关文章: