适配
如果各位关注安卓或者IOS这块招聘,可能都会关注到有个基本要求是”UI适配“,可能对于做了多年的Cocos程序员而言,适配?可能觉得适配很简单!那今天的主题就是适配
。
目前主流的适配方案主要有两种:拉伸适配、屏幕密度与尺寸适配。
Cocos的适配其实就是拉伸适配,也称之为百分比适配,这种适配方式
优点:
- 适配简单
- 不需要多套资源
劣势:
- 无法完美适配各种机型
- 实际效果与设计效果有差距
当然,另外一种方式的优劣基本就与此相反,此处不作为主要讨论。
PS:做为一个曾经的安卓开发人员而言,适配真的是噩梦,各种机型和奇葩分辨率,还有各种横竖屏等等。
Cocos适配模式讨论
既然是拉伸适配,无非就是宽拉伸多少,高拉伸多少,拉伸自然有两种结果:
-
等比拉伸:当宽拉伸的比例和高拉伸的比例相同时。
-
变形拉伸:当宽拉伸的比例和高拉伸的比例不相同时。
同时,我们要适配,其实是相对于屏幕而言的,那么拉伸造成的表现应该有:
-
铺满屏幕
-
有一边铺满屏幕
而不存在两边都留空隙,或者两边都超出边界。
既然我们知道了Cocos适配的基本方式,那我们来讨论下Cocos的各种模式:
- EXACT_FIT
变形拉伸方式,使整个内容铺满整个屏幕而内容也不超出。这种好处就是屏幕被铺盖得满满的,不好的地方就是如果屏幕比例和设计比例不一致(以下劣势皆指屏幕比例和设计比例不一致时),就会变形
,因此官方也将这种方式废弃了。
- NO_BORDER
此方式,对应CocosCreator的fit width/fit height都不勾选。
这种拉伸方式就是,要将屏幕铺满且不产生变形。于是,就只能按最大比例拉伸或者最小比例缩小,产生的问题就是内容超出屏幕
。
- SHOW_ALL
此方式,对应CocosCreator的fit width/fit height都勾选上。
这种拉伸方式就是,将内容要全部显示在屏幕里,但是不能变形,于是,就只能按最小比例拉伸或最大比例缩小,产生的问题就是有黑边
。
- FIXED_HEIGHT
此方式,对应CocosCreator的勾选fit width,不勾选fit height。
这种拉伸方式就是,不管怎么样,要将高度铺满屏幕。于是,就只能按高度的比例进行缩放,所以产生的问题就是宽度有黑边或超出屏幕
。
- FIXED_WIDTH
此方式与FIXED_HEIGHT原理一致,所以产生的问题就是高度有黑边或超出屏幕
.
我们的改良
- 我们要的是什么?
- 如果能铺满宽,但是高的内容能全部展示,或者铺满高,宽的内容能全部展示。
- 留的黑边,可以通过大背景填充。
- 可以使用widget使某些控件能够对齐。
- 分析
首先,SHOW_ALL方式,虽然看着挺符合我们需求的,但是,官方对SHOW_ALL方式进行了Canvas裁剪,造成黑边无法弥补的遗憾,所以我们没法直接拿来用,但是,我们可以借鉴一下这种思路。
即,如果宽屏我们适配高,长屏我们就适配宽。(所谓长屏和宽屏都针对设计分辨率而言的),所以我们的适配代码可以如下
if(长屏){
适配模式 = FIXED_WIDTH;
} else {
适配模式 = FIXED_HEIGHT;
}
至此,我们的适配就写完了。
问题
-
在CocosCreator3.0上,因为Canvas没法单独适配,所以会对所有Canvas生效。
-
这是对屏幕的适配方案,我们打出的web包,在PC端可能不能很好适配,这个时候,我们需要模拟手机的分辨率,可以看我的另外一篇文章
同时,也制作了对应的插件,如有需要可以去看看
系列文章
该框架开发的小游戏:翻棋子游戏
- 如需2.x版本,请看CCCLibs仓库该仓库并没有整理,请自行参考
有任何建议或者疑问,可以关注作者公众号