Cocos2d-x深度分析适配方法之kResolutionNoBorder的坐标关系

 本菜鸟接触Cocos2d-x时间不久,我只是当做爱好来学习,所以拙劣之章,不喜勿喷。 

适配方法有以下三种,这里我只分析一下第三种

(1)kResolutionExactFit

(2)kResolutionShowAll 

(3)kResolutionNoBorder

自行提前百度了解什么是分辨率

在AppDelegate.cpp下有以下代码,这是hallow word的原代码

 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且宽和高尺寸分别为480640win32窗口,其实就是将来的手机屏幕大小。

(2) glview->setDesignResolutionSize(480,320 ,kResolutionNoBorder );

设置分辨率,kResolutionNoBorder是你设置的分辨率为适配显示器屏幕大小尺寸的一种方法,即指以480,320的分辨率适应480640的屏幕大小。适应方法是宽和高等比放大或缩小,由给出的分辨率可知分辨率宽480正好1:1适配屏幕宽480,但分辨率高320却是1:2没有适配屏幕高640,也就是说在屏幕高640的尺寸大小上有320个像素点,而在屏幕宽480的尺寸大小上有480个像素点,这显然是不符合kResolutionNoBorder这种适配方法的规定(宽高等比放大或缩小), 

有两种伸缩方案如下:

(1)屏幕宽和给出的宽像素点的比例不变

按照屏幕宽4801:1的比例适配480个像素点,那么剩下的就应该让屏幕高6401: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),你猜这个坐标的位置在哪?

还是你以为的窗口正中间吗?显然不是。他在黑框的上边框的中间。

到这儿,你就可以推算出其他两种适配方法的坐标关系了。

新手才浅,哪儿说的不对,往指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值