为什么要做屏幕适配?
手机设备屏幕大小不统一,手游开发中不可能为每种手机开发一套图片,一般都只有一套图片,通过不同的适配方式来匹配不同的屏幕显示。
但有时也会有多个图片来匹配,但属于个别。
涉及到的概念:
分辨率:屏幕的像素大小。
屏幕坐标系:以屏幕左下角为原点,x,y方向延伸,构成一个屏幕坐标系,右上角和左下角构成一个矩形,这是屏幕的逻辑大小.
默认的情况下,没有做任何操作,逻辑大小和分辨率是1:1的关系。
也就是说iphone3的分辨率是480X320,则逻辑坐标原点对应屏幕左下角点,逻辑坐标(1136X640)对应屏幕右上角点.此时我们如果设一个精灵坐标为x,y,则在屏幕上显示的位置也是(x,y)
我们创建一个背景图,坐标是(0,0)点,锚点是左下角,精灵创建出来的逻辑大小默认和图片像素大小一致,也就是说,我们创建了一个大小为480X320的精灵,坐标为(0,0).
那么在480X320的屏幕上是刚好的,从左下角点绘制到右上角点.
但是在960X640的屏幕上,就只能绘制在屏幕的四分之一面积,其他地方都是黑的.
这是由于我们的分辨率变大了,导致屏幕坐标系也变大了,一个逻辑上480X320大小的精灵无法覆盖全屏了.
实现一套代码适配所有分辨率的基本思路就是逻辑大小不能有大的改变,最好就根本不变(不大可能).我们写的主界面是针对逻辑大小480X320的情况下写的.那么对于960X640分辨率的屏幕,我们也认为它对应的逻辑大小还是480X320,这样逻辑上的0,0点对应屏幕左下角而逻辑坐标(480X320)的点对应像素坐标(960,640)的像素点,也就是屏幕右上角,坐标和像素的比例变成1:2了.我们的图像会被刚好放大一倍,就能适配960X640的屏幕了.
旧版本cocos2d-x的屏幕适配设置不完善,所以我简单的在所有节点最外层套了个大节点,进行缩放,实现改变逻辑点和屏幕像素比例的改变,2.2版本的cocos2d-x优化了这一块的内容.在这个基础上,加入我的屏幕适配策略,我们可以实现任何情况下的屏幕适配.
怎么做屏幕适配?
Cocos2d-x2.2里设置屏幕适配的方法如下:
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(逻辑宽,逻辑高,适配方式);
这里有2个概念:
1,DesignResolutionSize的概念
意思就是我们在设计游戏时参考的大小,譬如说我们这个游戏是在480X320分辨率下设计的,图片也都是按照这个分辨率做的,所以我们这里传480,320,这个概念是2.2的,旧版本似乎没有,记不大清楚。
2,适配方案
ResolutionPolicy是适配方案,cocos2d-x 2.2给我们提供了这么几种 适配方案
-kResolutionExactFit(拉伸全屏)
-kResolutionNoBorder(等比缩放至无黑边)
-kResolutionShowAll(等比缩放全部显示)我们的屏幕适配策略就是在这个基础上改的
-以及新出的kResolutionFixedHeight,kResolutionFixedWidth,这两个概念跟我的屏幕适配策略相似,但是旧版本似乎没有,就没有在这2个基础上改了
下面给大家讲解几种适配的效果
1. kResolutionExactFit
kResolutionExactFit的效果是不管屏幕比例,都把屏幕的逻辑大小设为我们传入的值,然后对图片进行拉伸,在当屏幕分辨率和预设分辨率宽高比不同时,图像就会变形了。
2让我们看kResolutionNoBorder的效果:
等比缩放(按宽高的最大比例缩放)至无黑边,整个视图会被等比例缩放,没有变形,但是会有部分图片被切掉。
3,kResolutionShowAll:
等比缩放(按宽高的最小比例缩放),整个视图会被等比例缩放,没有变形,但是会有部分区域没有图片。
原内容来自:
http://luoposhusheng.blog.51cto.com/8148702/1322544