cocos2dx屏幕适配

来源:互联网 发布:苹果6p升级后移动网络 编辑:程序博客网 时间:2024/05/24 16:17

不知道有没有人和我一样苦逼,遇到只提供一套尺寸的图,例如1024*768的图,最后做完游戏又要求图片不允许变形的情况呢?笔者纠结了很久之后,还是老老实实的研究了一下cocos2dx的适配策略,最终将问题解决,现在与大家分享一下。

首先,不知道大家有没有,反正我有一个习惯,是在项目中定义一个宏,代表屏幕尺寸,例如SCREENWID 1024   SCREENHEI 768   在设计游戏的时候,我并不太喜欢用屏幕尺寸去只做乘除运算,不做加减运算,大多情况下,由于自己比较懒,所以使用的都是相对1024*768的坐标数值,比如(100,100)这样写,不会是(screenwid/10.24,screenhei/7.68),屏幕适配方式使用

glview->setDesignResolutionSize(768, 1024, ResolutionPolicy::EXACT_FIT);

这样的适配方式会强制拉伸图片,导致图片变形。不少人有这种苦恼吧?

glview->setDesignResolutionSize(768, 1024, ResolutionPolicy::SHOW_ALL);

这种适配方式倒是不会变形,可是上下或者左右的黑边,又无法被填充了,不好看,所以不可取。 

glview->setDesignResolutionSize(768, 1024, ResolutionPolicy::NO_BORDER);

这种倒是没黑边了,可是如果尺寸不是768:1024这个比例的话,总有一面会超出屏幕,导致屏幕不再是768*1024,设计坐标就发生变化。。后果很严重。。


废话说了那么多,进入正题。我推荐使用的方式是FIXED_HEIGHT(横屏游戏),FIXED_WIDTH(竖屏游戏)

这两种方式是以一个方向拉伸到你指定的宽或者高,另一个方向也使用此比例。这样就不会造成图片变形。当然,此时你就会问了,图片是没变形,可是此时的屏幕分辨率依旧会发生改变,不再是768*1024了呀。

是的,所以我接下来讲的就是该怎么使用这种方式,达到我们想要的效果。

第一,设计游戏的时候,依旧使用

ResolutionPolicy::EXACT_FIT

我们就使用这种方式以768*1024设计游戏,虽然会造成图片变形,不过先不用在意,设计的时候,不需要去非得用1024*768的百分比,想怎么写,就怎么写,你可以随心所致。

第二,项目写完之后,把适配方式改成FIXED_HEIGHT(横屏游戏),FIXED_WIDTH(竖屏游戏)

注意,我们使用的SCREENWID,SCREENHEI是宏定义的,所以它依旧是1024*768,这点不需要改变。比如竖屏的游戏,现在你会发现,你的项目并没有多大的变化,只是图片不再拉伸,屏幕上方会出现黑边。

第三,适配屏幕

我们可以通过getWinSize获取到当前屏幕的尺寸,当然,对竖屏来说,它肯定是768*yy,我们得到screenScale=yy/1024。

如果是一个ui::imageView或者一个Sprite,作为图片背景的,我们是可以让他拉伸展示全屏的,所以我们可以让它setScaleY(screenScale);

如果是一个本来该居中的小按钮,我们让他setPositionY(getPositionY()*screenScale);这样它就在不变形的基础上,重新回到了屏幕中央!

是不是完工了?!!!



0 0
原创粉丝点击