cocos-creator-packages / adapters

25 stars 43 forks source link

关于cocos 在小游戏平台获取 窗口尺寸 和 safeArea 有时不准确的问题. #241

Open finscn opened 3 years ago

finscn commented 3 years ago

现象:

同一台手机 同样的微信, 同一个小游戏的同一个版本, 每次打开 有一定概率无法获得准确的 窗口尺寸或 safeArea. 经过和微信同学的交流. 目前大家比较一致的看法是 安卓系统正确获取 safeArea 的时机 无法做到百分百一致. 有时候要延迟一会儿去获取 才准确.

但是 cocos的 adapter 里 总是会在 初始化时 立刻获取 systemInfo, 并且 缓存起来 . 后面 每次过去safeArea 总是用这个缓存起来的值.

如果第一次获取 systemInfo 时, 里面的 safeArea是错误的, 那么后面就一直错误了.

要解决这个问题, 有两个方案, 就是 cc的 getSafeArea 方法里 每次都去通过 wx.getSystemInfoSync 去获得最新的数据. 但是缺点是 可能会破坏一丝丝性能.

还有个思路是, 引擎稳定运行一段时间之后 (比如5秒钟) , 就不再"每次都去通过 wx.getSystemInfoSync 去获得最新的数据"了. 也就是说加个计时.

不管怎么说现在的做法都不太稳定.

PPpro commented 3 years ago

嗯,这个问题在小游戏平台还普遍存在,在 3.x 的做法是牺牲一些性能,每次都去查系统信息, 2.x 这边需要同步下

finscn commented 3 years ago

嗯,这个问题在小游戏平台还普遍存在,在 3.x 的做法是牺牲一些性能,每次都去查系统信息, 2.x 这边需要同步下

我觉得可以尝试小我说的 计时的方法

就是 引起初始化5秒之后 基本上这个值就是准确的了 5秒之后 就可以用缓存的值了

PPpro commented 3 years ago

就是 引起初始化5秒之后 基本上这个值就是准确的了 5秒之后 就可以用缓存的值了

这样也不靠谱,如果屏幕发生了旋转,这个缓存也不可靠了,微信这边对于旋转事件的监听一直支持不是很好 特别是 iPad 这块