2025-02-17 21:36:37 +08:00
|
|
|
import { _decorator, Component, view, screen, Size, size, ResolutionPolicy } from 'cc';
|
|
|
|
const { ccclass, property } = _decorator;
|
|
|
|
|
|
|
|
const CHECK_INTERVAL = 0.1;
|
|
|
|
|
|
|
|
@ccclass('tgxResolutionAutoFit')
|
|
|
|
export class ResolutionAutoFit extends Component {
|
|
|
|
private _oldSize:Size = size();
|
|
|
|
start() {
|
|
|
|
this.adjustResolutionPolicy();
|
|
|
|
}
|
|
|
|
|
|
|
|
private lastCheckTime = 0;
|
|
|
|
update(deltaTime: number) {
|
|
|
|
this.lastCheckTime+=deltaTime;
|
|
|
|
if(this.lastCheckTime < CHECK_INTERVAL){
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
this.lastCheckTime = 0;
|
|
|
|
|
|
|
|
this.adjustResolutionPolicy();
|
|
|
|
}
|
|
|
|
|
|
|
|
adjustResolutionPolicy(){
|
|
|
|
let winSize = screen.windowSize;
|
|
|
|
if(!this._oldSize.equals(winSize)){
|
|
|
|
let ratio = winSize.width / winSize.height;
|
|
|
|
let drs = view.getDesignResolutionSize();
|
|
|
|
let drsRatio = drs.width / drs.height;
|
|
|
|
|
|
|
|
if(ratio > drsRatio){
|
|
|
|
//wider than desgin. fixed height
|
|
|
|
view.setResolutionPolicy(ResolutionPolicy.FIXED_HEIGHT);
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
//
|
|
|
|
view.setResolutionPolicy(ResolutionPolicy.FIXED_WIDTH);
|
|
|
|
}
|
|
|
|
this._oldSize.set(winSize);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|