Cocos2d-x分辨率适配方法

时间:2023-02-08 23:11:01


分辨率适配异常是手机游戏测试者在工作过程中最常发现的问题之一,我们先来了解几个屏幕适配的概念。


 

FrameSize是设备的原始分辨率,开发环境中可以通过CCEGLView::sharedOpenGLView()->setFrameSize()来设置设备的分辨率大小,当然也可以可以通过CCEGLView::sharedOpenGLView()->getFrameSize()获取得到设备的分辨率

 


WinSize指的是开发所设计的分辨率,即setDesignResolutionSize方法中传入的前两个参数,通过CCDirector::sharedDirector()->getWinSize()获取

 


VisibleSize在WinSize范围之内,保持FrameSize宽高比的最大显示区域。


 

VisibleOrigin是在WinSize下被FrameSize截取的区域的大小,即设计分辨率中与屏幕左下角对应的点。


 

有了上面的概念,我们来看看cocos自带的屏幕适配方案


 

首先我们假设设备分辨率为768*1024,游戏设计的分辨率为640*960,背景图为大小为640*960,在屏幕居中显示,cocos2d-x默认的适配方案下图像会根据我们设置的位置显示大小,如果图像本身比设备分辨率大,则只显示设备分辨率大小的图像,反之则会留有空余处,形成黑边。如果我们采用下面三种基本适配方案得到的效果如下。

 


1、强行拉伸图像使之填满整个屏幕,在图片与屏幕比例不同的情况下图片会扭曲变形,使用这种适配方式会导致原本是正方形的物体一不小心变成长方形。界面稍复杂,就会看见明显的不协调,通常我们不会采用这种处理方式。


 

2、宽高等比缩放,缩放的比例按照宽比和高比中大的来进行。这样出现的好处是整个屏幕不会出现任何的黑边,但是缺点是一些画面会显示到屏幕之外而失去一些显示内容。

 


3、宽高等比缩放,但缩放比例取小的进行。按这种方式适配可能会在屏幕上出现黑边,这是多数游戏适配时常用的方式。缺点是用户看到黑边以后觉得自己的设备屏幕面积没有完全利用影响用户体验。为了解决这个问题厂商会采用其他方式在黑边处填充一些内容,但这个做法的实际效果一般并不会很好,因为黑边区域仍然不会显示有效内容。