import { sys } from 'cc'; import { view, ResolutionPolicy, log } from 'cc'; import { _decorator, Component, Node } from 'cc'; import * as cc from 'cc'; import { UmLog } from './UmLog'; import { UmClientEvent } from './UmOneToMultiListener'; import { UmConfig } from './UmConfig'; const { ccclass, property } = _decorator; @ccclass('UmCanvasResize') export class UmCanvasResize extends Component { public static startFit: number = ResolutionPolicy.SHOW_ALL; public static currentFit: number = ResolutionPolicy.FIXED_WIDTH; onLoad() { if (UmCanvasResize.isListenerCanvasResize()) {// && !document.getElementById('GameDiv') window.addEventListener('resize', this._onEventCanvasResized); UmCanvasResize.currentFit = Number(view.getResolutionPolicy); } } onDestroy() { UmCanvasResize.resetFitCanvasSize(); } _onEventCanvasResized() { UmLog.log("[Canvas] => _onEventCanvasResized"); UmCanvasResize.updateFitCanvasSize(); } public static isListenerCanvasResize(): boolean { if (sys.isBrowser) { if (sys.isMobile) return true; if (UmConfig.isModeLogDebug) { let url = window.location.href; if (url?.length > 0 && url.includes("http://localhost:")) { return true; } } } return false; } public static updateFitCanvasSize() { const viewSize = cc.screen.windowSize; const designSize = view.getDesignResolutionSize(); let windowWidth = viewSize.width; let windowHeight = viewSize.height; let windowRatio = windowWidth * 1.0 / windowHeight; const designRatio = designSize.width * 1.0 / designSize.height; let height = designSize.height; if (windowRatio <= designRatio) { height = designSize.width / viewSize.width * viewSize.height; UmCanvasResize.currentFit = ResolutionPolicy.FIXED_WIDTH; log("[Canvas] => updateFitCanvasSize ==> ", designSize.width, height, " ==> FIT_WIDTH"); } else { UmCanvasResize.currentFit = ResolutionPolicy.SHOW_ALL log("[Canvas] => updateFitCanvasSize ==> ", designSize.width, height, " ==> FIT_SHOW_ALL"); } view.setResolutionPolicy(UmCanvasResize.currentFit); UmClientEvent.dispatchEvent("canvas-resize"); } public static updateCurrentFitCanvasSize() { log("[Canvas] => updateCurrentFitCanvasSize"); view.setResolutionPolicy(UmCanvasResize.currentFit); } public static resetFitCanvasSize() { if (UmCanvasResize.isListenerCanvasResize()) { view.setResolutionPolicy(UmCanvasResize.startFit); } } }