cocos屏幕适配策略

cocos的屏幕适配包括两个方面,一个涉及到屏幕的宽高比,一个涉及到缩放因子。

宽高比

我打算尽量用通俗的语言来说这件事情,cocos处理不同宽高比的适配,使用了设计分辨率这么个东西,就是

1
void GLView::setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy)

resolutionPolicy有好几种选择,但我们通常只使用FIXED_HEIGHT和FIXED_WIDTH。

设计分辨率的意义就是:你不用管实际上屏幕是什么样,你通过代码或者工具给一个node设定尺寸和坐标时,都只想象它是放在设计分辨率的屏幕里,然后给他设计尺寸和坐标,最后显示在实际屏幕上时,引擎会进行适当的比例缩放。

我们一般在项目中使用的ResolutionPolicy是FIXED_HEIGHT和FIXED_WIDTH,前者一般用于手机横屏,后者用于手机竖屏。我们拿FIXED_WIDTH举例,使用这个模式,意味着采用宽度的缩放比例,那么UI节点的x坐标和width就不用担心了,系统会帮你完美适配好来,y坐标和height则必须使用屏幕高度的百分比来进行设置,只要在需要适配的宽高比最大(通俗说就是最“扁”)的屏幕上不会发生冲突即可。FIXED_HEIGHT也是类似的道理,因为使用了高度的缩放比例,那么x坐标和width必须使用屏幕宽度的百分比来进行设置,保证在需要适配的宽高比最小的屏幕上不发生冲突即可。当然实际中我们对不管xy坐标还是width,height都习惯性采用百分比坐标。这两种方案的适用情况不能靠死记硬背,只要明白了原理,其实很容易理解。

缩放因子

缩放因子可以理解为图片资源尺寸与设计分辨率的比值。一般我们的资源都是配合设计分辨率而出的,但如果不是,就需要设置缩放因子了,比如一种情况就是,同样是1024*768的设计分辨率,我们有一套1024*768的资源,这套资源在2048*1536的屏幕上会被拉伸两倍显示,可能效果就不好了,那我们再准备一套2048*1536的资源,因为设计分辨率还是1024*768,所以就需要将缩放因子设为2了。

设置缩放因子的接口是:

1
void Director::setContentScaleFactor(float scaleFactor)