cocos2dx屏幕适配

前端之家收集整理的这篇文章主要介绍了cocos2dx屏幕适配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

市场屏幕的分辨率的种类

在移动游戏里,屏幕适配是一个比较重要的环节。市场上面的手机分辨率参差不齐。总体来讲,可以概括为四种: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在大尺寸中,会出现一些空余的地方,是无法放置的。

猜你在找的Cocos2d-x相关文章