在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)。
Cocos2d-x中,glView的setFrameSize定义窗口大小,而setDesignResolutionSize用于设定设计分辨率,调整游戏画面拉伸比例。ResolutionPolicy的选项影响画面显示,NO_BORDER可能导致内容丢失。导演(Director)的getContentScaleFactor、getVisibleSize和getWinSize等方法用于获取不同场景下的屏幕尺寸。通常建议使用SHOW_ALL或EXACT_FIT策略,避免NO_BORDER导致的画面裁剪。
&spm=1001.2101.3001.5002&articleId=50990554&d=1&t=3&u=c7b96c2ecc9845eb89ca060d3ff7affa)
2212

被折叠的 条评论
为什么被折叠?



