cocos2dx屏幕适配

本文探讨了cocos2dx引擎中的屏幕适配模式,包括FIXED_WIDTH、FIXED_HEIGHT、SHOW_ALL等,并通过举例展示了如何解决不同分辨率设备的黑边问题。在1280*720设计分辨率下,使用1280*960的背景图片可以适应4:3比例的设备。同时,文章对比了cocosbuilder和cocostudio在处理屏幕适配时的差异,指出ccb的智能调整更有利于控件布局。

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

市场屏幕的分辨率的种类

在移动游戏里,屏幕适配是一个比较重要的环节。市场上面的手机分辨率参差不齐。总体来讲,可以概括为四种:4:3(高宽比1.33)、16:10(高宽比1.6)、16:9(高宽比1.778)、5:4(高宽比1.25)。

cocos里的适配模式

cocos引擎中有5种屏幕适配模式:FIXED_WIDTH,FIXED_HEIGHT,EXACT_FIT,NO_BORDER,SHOW_ALL。对这5种适配模式做一些简单的解释:
SHOW_ALL:按设计比例缩放,全部展示不裁剪,长宽中大的铺满屏幕,小的会留有黑边。
NO_BORDER:按设计比例缩放,全部展示不留黑边,长宽中小的铺满全屏,大的会超出屏幕。
EXACT_FIT:拉伸变形,使铺满屏幕。
FIXED_WIDTH:按比例缩放,宽度铺满屏幕。
FIXED_HEIGHT:按比例缩放,高度铺满屏幕。
2、在游戏设计的初期就已经想好多分辨率处理的问题,再进行游戏编辑。
第一种,没什么大多的必要进行说明。也是我不建议使用的方式。第二种是我认为目前来说比较合适的一种方式。这里用到的cocos里面的适配模式是FIXED_WIDTH和FIXED_HEIGHT。
当然,说到写游戏,必然离不开UI编辑器。平常用到的编辑器一般是cocostudio或者cocosbuilder。cocostudio官方提供的屏幕视频方式,比较复杂。没有进行太多的了解。而我所常用的编辑器还是cocosbuilder,下个项目应该会使用cocostudio吧。废话少说,我们进入正题。

屏幕适配

在屏幕适配里面,有一个很重要的对象:Layer。
bool Layer::init()
{
    Director * director = Director::getInstance();
    setContentSize(director->getWinSize());
    return true;
}

在这里,我们可以清楚的看到,Layer在其初始化的时候,会把其大小设置成WinSize大小。假设我们现在设计的游戏分辨率是720*1280。在ipadair(屏幕比例为4:3)分辨率下进行测试
SHOW_ALL:720*1280
NO_BORDER:720*1280
FIXED_WIDTH:720*960
FIXED_HEIGHT:960*1280
在这里我们可以看出,不管是SHOW_ALL,NO_BORDER,EXACT_FIT。这三种得到的WinSize都是我们游戏设计的size。而FIXED_WIDTH和FIXED_HEIGHT得到的分辨率比例是跟ipad
air的比率是一致的
WinSize的大小是表示我们能放置东西的区域范围。当我们在使用UI编辑器的时候,如果能够摆满WinSize的大小,那么就不会存在黑边这个问题了。
一个最简单的办法,就是使用大的背景图片。如我们的游戏尺寸为1280*720。为了适用到ipad上,我们可以使用尺寸为1280*960的图片作为背景。在这种情况下,在手机上,我们能看到的只是背景图片的中间部分。而在ipad上则可以全部看见。如果要在图片上增加一些点击的建筑,我们能放置的区域只能在手机上能显示的区域防止,否则ipad上是看不到的。
1280*720的长宽比是1.778,而1280*960的长宽比是1.3333。
这就表面,在长宽比为1.778和1.3333之间的所有分辨率将不存在黑边问题了。而这种解决黑边方式是在cocostudio和cocosbuilder中都可以使用的。
好了,现在我们解决了黑边问题,另外一个问题则是控件摆放问题。对于摆放控件,cocosbuilder和cocostudio差异很大的,cocosbuilder则更智能一些。
以下我们将一ccb代替cocosbuilder, ccs代替cocostudio。
在两者中都可以通过百分比来设置控件的属性。不同的是,ccs的顶层控件的尺寸是固定死的,也就是游戏的设计尺寸,非WinSize尺寸。而ccb的顶层的控件的尺寸是根据WinSize的大小来处理的。假设在ccb和ccs上面有同一个控件Layer(ccs上没有Layer,我们现在使用Layer进行泛指)设计尺寸都为1280*720。都把他们w,h都设置成100%,此时ccs中的Layer在任何时候,都是1280*720。而ccb会根据所运行的硬件不同,得到的size不同。在ipad上得到的size则为1280*960,在i6上得到的尺寸为1280*720。而这个尺寸则会影响到设置子控件位置的时候的位置问题。ccb可以通过设置控件的锚点和位置的百分比,使得控制放置在屏幕的任何位置。而ccs则达不到这种效果,ccs在大尺寸中,会出现一些空余的地方,是无法放置的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值