尝试升级到3.8.4,设置浏览器windowSize时画面出现缩放

从3.7.4升级到社区版本3.8.4,项目运行后第一个问题就是设置浏览器windowSize时画面出现缩放。
功能用于横竖屏翻转,在web端上直接设置windowSize后,屏幕所有的元素出现了放大的感觉,显示不完整了。编辑器浏览器运行,出现问题后,通过上面的rotate旋转按钮,旋转两次后恢复正常。
转为横版时的关键代码:

...
} else if (sys.isBrowser && !sys.isMobile) {
            //pC 浏览器
            let frameSize = screen.windowSize;
            // view.setOrientation(macro.ORIENTATION_PORTRAIT)
            if (frameSize.height > frameSize.width) {
                screen.windowSize = new Size(frameSize.height, frameSize.width)
                // view.setDesignResolutionSize(ProjectConfig.DesignScreenWidth, ProjectConfig.DesignScreenHeight, ResolutionPolicy.FIXED_WIDTH);
            }
        } else {

注释的部分是我在尝试纠正这个问题,但没有解决。

我在3.8.4社区贴上也反馈了,也附有demo,不知道引擎组看到没?

感觉是引擎内部负责windowSize的缓存判断有问题,在设置目的windowSize之前先设置个不一样的值,比如new Size(100, 100); 具体数值是什么都行,最好大于0,0会报错,设置原值不行,仅仅翻转长宽也不行。然后再设置到目标值。最终的代码如下:

            //pC 浏览器
            let frameSize = screen.windowSize;
            view.setOrientation(macro.ORIENTATION_PORTRAIT) // 不知道有什么用
            if (frameSize.height > frameSize.width) {
                screen.windowSize = new Size(100, 100); // 绕开引擎3.8.4-082213社区版本 引擎bug
                screen.windowSize = new Size(frameSize.height, frameSize.width);
                // let event = document.createEvent("HTMLEvents")
                // event.initEvent("window-resize", true, true)
                // window.dispatchEvent(event);
                // let event2 = document.createEvent("HTMLEvents")
                // event2.initEvent("orientation-change", true, true)
                // window.dispatchEvent(event2)
                // view.setDesignResolutionSize(ProjectConfig.DesignScreenWidth, ProjectConfig.DesignScreenHeight, ResolutionPolicy.FIXED_WIDTH);
            }

出现的源码部分在这里,暂时不深究了:

https://github.com/cocos/cocos-engine/pull/17633. 参考这个PR修复下哈

1赞