适配方法有以下三种,这里我只分析一下第三种
(1)kResolutionExactFit
(2)kResolutionShowAll
(3)kResolutionNoBorder
if(!glview) {
glview = GLView::create("My Game");
director->setOpenGLView(glview);
}
这是适配后的代码
If(!glview)
{
glview=GLView::createWithRect(“MY GAME”,Rect(0,0,480,640));
director->setOpenGLView(glview);
glview->setDesignResolutionSize(480,320 ,kResolutionNoBorder );
}
(1) glview=GLView::createWithRect(“MY GAME”,Rect(0,0,480,640));
创建一个名为MY GAME且宽和高尺寸分别为480和640的win32窗口,其实就是将来的手机屏幕大小。
(2) glview->setDesignResolutionSize(480,320 ,kResolutionNoBorder );
设置分辨率,kResolutionNoBorder是你设置的分辨率为适配显示器屏幕大小尺寸的一种方法,即指以480,320的分辨率适应480,640的屏幕大小。适应方法是宽和高等比放大或缩小,由给出的分辨率可知分辨率宽480正好1:1适配屏幕宽480,但分辨率高320却是1:2没有适配屏幕高640,也就是说在屏幕高640的尺寸大小上有320个像素点,而在屏幕宽480的尺寸大小上有480个像素点,这显然是不符合kResolutionNoBorder这种适配方法的规定(宽高等比放大或缩小),
有两种伸缩方案如下:
(1)屏幕宽和给出的宽像素点的比例不变
按照屏幕宽480按1:1的比例适配480个像素点,那么剩下的就应该让屏幕高640按1:1的比例适配640个像素点,
但问题是在现在系统只给了320个像素点,没法额外增加像素点,所以这种适配方法pass,这时你会这么想:当时要是多定义几个像素点该多好啊,我想用多少就从中拿出多少像素点,就不会出现像素点不够屏幕尺寸分配的情况了,所以就诞生了下面的适配方法。
(2)屏幕高和给出的高像素点的比例不变
如上所述,屏幕高尺寸620上按比例2:1分配320个像素点,相应的屏幕宽480上按比例2:1应该分配240个像素点,这就满足了kResolutionNoBorder这种适配方法的规定(宽高等比放大或缩小),即比例都是2:1 。而实际系统给了480个像素点,这时我们只需从中拿出我们需要的240个像素点就行了,其他的像素点你不用管,让它们留在屏幕宽外边就行了。
所以接踵而至的问题又来了,
这时,屏幕的原点(左下角)坐标(0,0)与适配后的分辨率原点坐标也已不是一一对应的关系了,并且屏幕的宽高尺寸和分辨率的宽高尺寸也不是一一对应了,所以这时需要调用以下函数来获取上述值
以下是获取相应的值得代码
Size visibleSize = Director::getInstance()->getVisibleSize();
//通过获得在win32窗口的长宽尺寸大小下适配的相应的像素点数目,从而得到适配后的显示在窗口中的宽高尺寸大小
Vec2 origin = Director::getInstance()->getVisibleOrigin()
//得到屏幕原点(左下角)的坐标
以下是经测试得到的数据
visibleSize.width=240 visibleSize.height=320
origin.x=120 origin .y=0
注意这里,我并没有添加任何背景图层,所以win32窗口尺寸大小适配分辨率尺寸大小后的关系是看不到的。下图是自己做的尺寸大小关系图
如图 黑框部分是win32窗口(480,640),红框是适配分辨率后的窗口(480,320)但其实你是看不到黑框以外的那一部分的,这里为了能更好的理解他们之间的关系,所以我就把没有显示的那一部分也画出来了。
上图中关系是:黑框的宽(尺寸)480对应240个像素点,黑框的高(尺寸)640对应320个像素点。
黑框左下角的坐标为(120,0),右上角坐标(360,320)
红框左下角的坐标(0,0), 右上角坐标(480,320)(红框的这两个坐标你是看不到的)
这里就可以看出来,所有的坐标与win32窗口的尺寸大小没有任何关系了,更确切的说与将来手机的屏幕大小没有关系了,即达到了适配效果。
还有,你接下的所有操作都是建立在适配的坐标下,与win32窗口(480,640)尺寸大小没有任何联系。比如随便找个坐标(240,320),你猜这个坐标的位置在哪?
还是你以为的窗口正中间吗?显然不是。他在黑框的上边框的中间。
到这儿,你就可以推算出其他两种适配方法的坐标关系了。
新手才浅,哪儿说的不对,往指导。