cocos2dx的屏幕适配方案

                                   cocos2dx的屏幕适配方案

常规做法:

pEGLView::sharedOpenGLView()->setDesignResolutionSize()

通过导演类调用OpenGl函数 设置屏幕的配置方案

里面接五个参数

KResolutionExactFit:拉伸变长宽比,全屏显示

kResolutionFixedHeight:不变长宽比(保持传入的设计分辨率高度不变,根据屏幕分辨率修正设计分辨率的宽度),全屏但是有一部分宽度不显示

kResolutionFixedWidth:不变长宽比(保持传入的设计分辨率宽度不变,根据屏幕分辨率修正设计分辨率的高度),全屏但是有一部分高度不显示

KResolutionNoBorder:不变长宽比(取Max(设计高度 / 实际高度, 设计宽度 / 实际宽度)的值作为缩放比例),全屏但是有一部分不显示

KResolutionShowAll:不变长宽比,有黑边

我们看看前辈们测试的demo:

 

以为这就已经问没解决问题了?

NONONO,对于以前那些老机子来说,确实可以解决问题了

但是现在手机换代越来越快,市面上推出了许许多多水滴屏,挖孔屏,刘海屏等奇奇怪怪的屏幕

这个时候我们就得更灵活的去处理问题了,不然你好好的一个充值按钮被刘海给挡住了,那直接举双手GG。

我们可以采取以下的方法解决问题:

1.从设计开始避免,把重要的信息,按钮不要摆放到太靠边的位置。

我们之后做的适配都是为了解决因为刘海屏,水滴屏而造成的游戏体验不好或者影响游戏操作的问题。那么既然如此为什么不从设计开始避免这些问题的出现呢?

2.一般采用下图这种适配方案:

 

  • 1.IOS苹果手机因为机型类型比较少,所以游戏正文所占屏幕区域的宽高比(safeArea)我们可以直接配置,比如["iPhone Xs"] = 2、["iPhone Xs Max"] = 2。
  • 2.安卓机器机型比较多而杂,无法通过配置写死safeArea,所以通过代码取得,指的一提的是安卓9.0以下的时候没有统一的获取方式,华为 oppo Vivo 小米需要各自厂商不同的接口分别获取,安卓9.0以上可以统一获取。(具体可自行百度或者参考AppActivity.java)
    取得safeArea以后:
    local safeWidth = realHeight * safeArea (游戏正文宽度)
    local offset = (realWidth - safeWidth)/2 (左右刘海宽度)
    g_UIMainSceneLayer:setPositionX(offset) (将所有界面的父节点 右移offset)
    local safeSize = cc.size(safeWidth,realHeight)
    g_UIMainSceneLayer:setContentSize(safeSize) (设置contentSize为正文大小)
    如果界面不需要适配,需要全屏显示。比如有的背景界面需要在刘海区域显示,就需要将界面左移回来,并设置contentSize大小为realSize
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值