cocos2d-x版本(3.0)
ResolutionPolicy::NO_BORDER 顾名思义,指的就是适配后没有黑边。原理上是根据设计尺寸的宽高和屏幕宽度的宽高,计算出最佳缩放比例,保证在横向或纵向上有一个方向能完全适配屏幕,然后在大于屏幕宽度或高度的那个方向对openglView坐标居中处理
下面根据一些数据理解以下适配的效果。我们先看Director给我们提供的几个接口:
director->getWinSize() 获得窗口尺寸
director->getVisibleSize() 获得可见尺寸
director->getVisibleOrigin() 获得可见区域的锚点
假如我们按照640X960的尺寸设计游戏, glview->setDesignResolutionSize(640,960,ResolutionPolicy::NO_BORDER),那么根据不同窗口大小,会有以下的输出
①窗口大小 320X480
winSize {640,960}
visibleSize {640,960}
visibleOrigin {0,0}
②窗口大小 640X800
winSize {640,960}
visibleSize {640,800}
visibleOrigin {0,80}
③窗口大小 800X800
winSize {640,960}
visibleSize {640,640}
visibleOrigin {0,160}
ResolutionPolicy::NO_BORDER 顾名思义,指的就是适配后没有黑边。原理上是根据设计尺寸的宽高和屏幕宽度的宽高,计算出最佳缩放比例,保证在横向或纵向上有一个方向能完全适配屏幕,然后在大于屏幕宽度或高度的那个方向对openglView坐标居中处理
这个适配策略的缺点就是如果设计尺寸的宽高比和屏幕宽高比不一样,会有一部分内容显示在屏幕外,解决办法就是在定坐标的时候使用根据visibleOrigin和visibleSize计算出的相对坐标
下面根据一些数据理解以下适配的效果。我们先看Director给我们提供的几个接口:
director->getWinSize() 获得窗口尺寸
director->getVisibleSize() 获得可见尺寸
director->getVisibleOrigin() 获得可见区域的锚点
假如我们按照640X960的尺寸设计游戏, glview->setDesignResolutionSize(640,960,ResolutionPolicy::NO_BORDER),那么根据不同窗口大小,会有以下的输出
①窗口大小 320X480
winSize {640,960}
visibleSize {640,960}
visibleOrigin {0,0}
②窗口大小 640X800
winSize {640,960}
visibleSize {640,800}
visibleOrigin {0,80}
③窗口大小 800X800
winSize {640,960}
visibleSize {640,640}
visibleOrigin {0,160}