Cocos设计分辨率(glView)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值