-
Creator 版本: 3.8.4
-
目标平台: web
-
重现方式:项目设置1280*720,高适配
进入游戏,由于包含既有横屏和竖屏的游戏,重新动态调整游戏适配策略:
在场景启动后,执行了以下代码apadtSuitScreen
下面的变量designSize内容大概是这个游戏的分辨率:
designSize: {
width: 640,
height: 1138
}
//屏幕适配
apadtSuitScreen(gameId?: number) {
LogWrap.Instance.warn("适配策略:",view.getResolutionPolicy().getContentStrategy(),view.getDesignResolutionSize());
if (gameId) {
let gameDesignSize = SubGameCfg[gameId].designSize as Size;
this.initDir(gameId);
// if (sys.os == sys.OS.ANDROID)
// jsb.reflection.callStaticMethod('com/cocos/game/AppActivity', 'setOrientation', '(Ljava/lang/String;)V', this._dir)
// else if (sys.os == sys.OS.IOS)
// jsb.reflection.callStaticMethod('AppDelegate', 'setOrientation:', this._dir)
let curWindowSize = screen.windowSize;
let visibleSize = view.getVisibleSize();
LogWrap.Instance.log('curWindowSize: ' + curWindowSize.width + ' ' + curWindowSize.height)
LogWrap.Instance.log('visibleSize: ' + visibleSize.width + ' ' + visibleSize.height)
// return
if (this._dir == 'V') {
view.setOrientation(macro.ORIENTATION_PORTRAIT)
if (curWindowSize.width > curWindowSize.height)
screen.windowSize = new Size(curWindowSize.height, curWindowSize.width)
}
else {
view.setOrientation(macro.ORIENTATION_LANDSCAPE)
if (curWindowSize.height > curWindowSize.width)
screen.windowSize = new Size(curWindowSize.height, curWindowSize.width)
}
const designWidth = gameDesignSize.width;
const designHeight = gameDesignSize.height;
const windowWidth = screen.windowSize.width;
const windowHeight = screen.windowSize.height;
LogWrap.Instance.log("designSize:", designWidth, designHeight);
LogWrap.Instance.log("new windowSize:", windowWidth, windowHeight);
LogWrap.Instance.log("designWidth / designHeight: ", designWidth / designHeight);
LogWrap.Instance.log("windowWidth / windowHeight: ", windowWidth / windowHeight);
if (designWidth / designHeight < windowWidth / windowHeight) {
LogWrap.Instance.log("FIXED_HEIGHT");
this._resolutionPolicy = ResolutionPolicy.FIXED_HEIGHT;
} else {
LogWrap.Instance.log("FIXED_WIDTH");
this._resolutionPolicy = ResolutionPolicy.FIXED_WIDTH;
}
view.setDesignResolutionSize(designWidth,designHeight,this._resolutionPolicy);
// view.getResolutionPolicy().setContentStrategy(ResolutionPolicy.ContentStrategy.FIXED_WIDTH);
// view.getResolutionPolicy().setContainerStrategy(ResolutionPolicy.ContainerStrategy.PROPORTION_TO_FRAME);
LogWrap.Instance.warn("适配策略:",view.getResolutionPolicy().getContentStrategy(),view.getDesignResolutionSize());
// 手机浏览器切换
if (sys.platform == sys.Platform.MOBILE_BROWSER) {
window.dispatchEvent(new Event('resize'));
}
}
}
initDir(gameId){
let gameDesignSize = SubGameCfg[gameId].designSize as Size;
if (gameDesignSize.width > gameDesignSize.height) {
this._dir = 'H'
} else {
this._dir = 'V'
}
LogWrap.Instance.log("gameDesignSize:", gameDesignSize);
LogWrap.Instance.log("this.Dir:", this._dir);
}
-
之前哪个版本是正常的:3.8.3
-
重现概率:100%
看了3.8.4新增:
查阅了3.8的文档官方的git https://github.com/cocos/cocos-test-projects.git 没有合适的解决方案。
如果项目设置为640,1138可以解决,但是对于另外要给横屏游戏却无法解决~



