Cocos2d-x的分辨率可以分为两种:屏幕分辨率和设计分辨率。
屏幕分辨率就是屏幕窗口的大小,单位是像素。
设计分辨率单位是点,一个点可能包括多个像素。
如果把一台显示器自身的分辨率比作屏幕分辨率的话,我们在操作系统里设置的分辨率就是设计分辨率。
理想状态下,设计分辨率的点就是屏幕分辨率的像素,两种分辨率相等,此时成像效果最清晰。
对一个Cocos2d-x项目,我们在创建GLView时,可以设置屏幕分辨率,也可称为屏幕大小:
glview = GLViewImpl::createWithRect("Title",Rect(0,0,1000,400));
接下来设置设计分辨率:
glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::FIXED_HEIGHT);
3个参数:设计分辨率的宽,设计分辨率的高,分辨率的适配策略。
适配策略有5种:
SHOW_ALL:按比例系数缩放,屏幕显示所有内容,不拉伸,屏幕可能有黑边。
NO_BORDER:按比例系数缩放,部分内容可能在屏幕外,不拉伸,没黑边。
EXACT_FIT:设计分辨率直接放大到屏幕分辨率,屏幕显示所有内容,拉伸,没黑边。
FIXED_HEIGHT:自动适配,高固定。
FIXED_WIDTH:自动适配,宽固定。
比例系数scaleX和scaleY是屏幕分辨率与设计分辨率的商。
在适配策略NO_BORDER和SHOW_ALL中,最终的缩放比例分别为scaleX和scaleY两者中最大和最小。而策略EXACT_FIT直接将scaleX和scaleY作为宽和高的缩放系数,即直接拉伸。
比例系数与设计分辨率的乘积是适配策略处理后的Size。
图片是根据设计分辨率进行展示。
开发过程中,我们只能设置设计分辨率,而实际的屏幕分辨率因为设备屏幕大小的不同而不同。在不同的设备中,引擎会把设计分辨率适配到屏幕上。
但是屏幕宽高比和设计分辨率的宽高比很可能差别大,直接放缩或拉伸的效果不理想。我们需要一种能根据屏幕宽高比自动调整设计分辨率宽高比的适配策略,这种策略就是FIXED_HEIGHT和FIXED_WIDTH。
一般采用FIXED_HEIGHT和FIXED_WIDTH策略。因为这两策略会根据固定方向(高或宽)重新计算变化方向(宽或高)的设计分辨率,计算后的设计分辨率的宽高比尽可能接近屏幕分辨率宽高比,而不是直接使用我们给的设计分辨率,防止拉伸变形或展示不全,使得图片最终能自适应屏幕的高或宽,并且都能够充满屏幕,没有黑边。