2.3.4 iOS LaunchScreen后翻转屏幕,touch点偏移

  • Creator 版本:2.3.4

  • 目标平台:iOS

  • 重现方式:
    项目方向选择的是Landscape Left 和Landscape Right。
    在iOS上运行前,让手机保持Landscape Left 状态,启动项目,看到LaunchSreen之后,立马翻成Landscape Right。
    等待第一个scene出现,出现后。touch位置就发生了偏移,向右下角偏移。

  • 手机型号 :iphone 6

  • 出现概率:100%

  • 额外线索:按照以下链接,修改过旋转放大的问题。
    https://github.com/cocos-creator/engine/pull/6689

TouchDemo.zip (231.3 KB)
做了一个demo。
出现touch偏移后,点击后的pos会有不一样,但再发生一次屏幕旋转后,touch点就会恢复正常了。

@EndEvil @huanxinyin

应该是修复了,参考下这个PR
https://github.com/cocos-creator/engine/pull/6689

是按照这个改的,但解决我不了我说的这种问题。
这个是解决在看到scene后的翻转,但是。我的是在LaunchSreen界面就翻转哦。你可以按照我的方式试一下。特意做了demo。

这个PR合并到2.4了,我测试了下2.4,没有复现你描述的情况

你是在哪个界面翻转屏幕的?难道手机有问题?

这里可以发视频吗?我录了个视频。很极限的操作哦

我这边做的测试
1592559702375566.mp4.zip (947.4 KB)

链接: https://pan.baidu.com/s/1K0CHvPVBkXP3rAV5f1mphg 提取码: e4c6
录的太大,只能放这了。方便的时候,看看呗。

可以复现了,操作有难度,我们排查下~:10:

嗯嗯,等你们的解决方案哦~!

刚发现华为Mate30 pro上也有这个问题,重现方式和楼主说的一样

怎么样了?有啥结果呀?

今天终于有空了。
我就研究了一下,发现问题是


jsb.onResize首次被调用时,cc.view._devicePixelRatio = 1,但再次翻转屏幕后,就会=2。查看赋值的地方,
发现 jsb.onResize首次调用,是在CCView.js的中的ContainerStrategy的_setupContainer方法之前。

既然这样,我在CCView.js中增加了一个方法,

_mkDevicePixelRatio:function() {
    this._devicePixelRatio = 1;
    if(CC_JSB){
        this._devicePixelRatio = window.devicePixelRatio;
    }else if (this.isRetinaEnabled()) {
        this._devicePixelRatio = Math.min(this._maxPixelRatio, window.devicePixelRatio || 1);
    }
},

cc.view = new View();

cc.view._mkDevicePixelRatio();

在构造方法后,增加了一下他的调用。目前看没啥问题。

目前问题是定位到这里,可以这个尝试下这个修复
https://github.com/cocos-creator-packages/jsb-adapter/pull/309

1赞

恩,好的。