Cocos设计分辨率(glView)

来源:互联网 发布:单片机led 编辑:程序博客网 时间:2024/05/22 04:48


AppDelegate::applicationDidFinishLaunching() 中有glview->setFrameSize(480,320); 以及glview->setDesignResolutionSize(1200/2,1200*320/480/2,ResolutionPolicy::NO_BORDER);

还有函数:director->setContentScaleFactor() 可以设置所有图片的缩放程度

这两个函数,setFrameSize是窗口大小,像素为单位。

setDesignResolutionSize是设计大小,通常我们用这个来适配整个游戏的拉伸和画面表达,此函数负责协调我们的游戏图片与手机窗口之间的拉伸比例。其前两个参数是大小像素,我们期望表现的比例就是这俩参数决定的(分别表示设计宽度和高度)。第三个参数是适配策略有EXACT_FIT NO_BORDER SHOW_ALLFIXED_HEIGHT FIXED_WIDTH几种类型,NOBORDER往往不能展示所有图片效果,大于窗口大小的图将不被显示。EXACTFIT是最常用的,即将图片按窗口比例铺满全屏。FIXED无论是左还是右都有可能有黑边。

 

关于Director::getInstance()->getVisibleSize();

这个函数获取整个可见图片在GL坐标下的大小。

Director::getInstance()->getWinSize();

这个函数获取整个图片在GL坐标下的大小。

Director::getInstance()->getVisibleOrigin();

返回整个可见图片在GL坐标下的原点坐标

通常而言,getVisibleSize和getWinSize都是一样的(在选择EXACT_FIT SHOW_ALL这两种设计方式时)但是当选择NO_BORDER 方式时:

假设图片大小600x600,设置屏幕大小为400x300则在NO_BORDER下:

getWinSize为(600,600),getVisibleSize为(600,450)——显然遵循400x300的比例,但是,上下各有一部分原图未被显示出来,看getVisibleOrigin为(0,75)就可以明白。图的上下各有75宽度的内容被弄到了屏幕外(正是Noborder,没有边界),于是可见的原点就在(0,75)了。

综上,一般不要用NO_BORDER,用SHOW_ALL和EXACT_FIT,其都是走的设计大小(我们一般不管setFrameSize)。

 

0 0