【求助】关于安全区域返回值的理解

Cocos Creator 2.3.3

cc.sys.getSafeAreaRect() 返回值要怎么理解呢

理解了好久都没能对上 safeAreaRect.x, safeAreaRect.y, safeAreaRect.width, safeAreaRect.height 究竟是指哪些点,对不上。

这是 红米 Redmi 8 手机,从系统中查到分辨率是 720 x1520 对得上 cc.view.getCanvasSize()

Cocos2dxHelper.java 中也找到和上面代码一样的获取安全区域方式的代码,但是到最后 cc.sys.getSafeAreaRect 的值就有点懵了

safeAreaRect.x, safeAreaRect.y 这个表示左下角的 x,y (这个坐标点 0,0 点在屏幕中心,所以需要在计算一次进行居中处理)
safeAreaRect.width, safeAreaRect.height 这个表示区域的大小

具体可以看一下计算 getSafeAreaRect 的代码

对应输出结果

JS: {"x":0,"y":-124.66666666666674,"width":750,"height":1526.0416666666667}
JS: {"width":720,"height":1520}

可能大佬的代码有居中的考虑,但是单纯看安全区域和屏幕区域的 width 和 height

安全区域比屏幕区域还要大,这个计算是不是有问题呢?

你跑一下 example-cases 中的 SafeArea 看看是否效果正常,这个之前有测试过

2.3.3 的Cocos Case 中没有找到这个 SafeAre

safeArea.zip (3.2 KB)

你用这个场景试看看,如果有问题都话,也麻烦你看看是否其它安卓机型都会有问题,感谢

大佬能先解释一下为什么安全区域比屏幕区域还要大吗?

有可能是其它 bug 导致的,你先看看我发给你的 demo 是否正常

我自己写算了。。。

输出日志都说不过去,理论都还没通,测试说不过去,

抱歉,语气变得不好了,因为我也排查了很久很久很久

现在我十分在意 安全区域比屏幕区域 还要大这个输出日志,这个明显是有问题的呀,得要先解释同才测试呀,测试一次需要很多时间呀

用不来 从来不用这个API :smiley:

大大好,这里单位不同。

这个单位是屏幕分辨率。

这个单位是设计分辨率。
两者没有可比性。


这个问题不难查出来,之前我们不够用心,向你道歉。

我也用大佬的demo测试好了,demo是正常的

感谢两位引擎大大的帮忙~

这种平台和设备相关的接口,引擎跟的都比较慢,最好还是自己查资料实现。

我们项目在iPhone X出来后就要求适配刘海区域,现在都几年过去了引擎这接口还没稳定。。。

另外给个建议,getSafeAreaRect最好返回屏幕占比,因为原生接口取到的分辨率到引擎这边还要各种转换,返回屏幕占比,游戏代码乘以全屏大小就行了

2.4 提供了 SafeArea 组件,直接挂到节点上就能用啦,无需转换