squidGame/tgx-games-client/assets/scripts/FullScreenBgAutoFit.ts

72 lines
2.1 KiB
TypeScript
Raw Normal View History

2025-02-07 10:49:34 +08:00
import { _decorator, Component, Size, size, UITransform, Sprite, Canvas } from 'cc';
const { ccclass, property } = _decorator;
const CHECK_INTERVAL = 0.1;
@ccclass('FullScreenBgAutoFit')
export class FullScreenBgAutoFit extends Component {
@property(Canvas) canvasUITrans:UITransform;
private _oldSize:Size = size();
private _originalSize:Size;
private _uiTransform:UITransform;
private _sprite:Sprite;
start() {
this._uiTransform = this.getComponent(UITransform);
this._sprite = this.getComponent(Sprite);
if(!this._uiTransform || !this._sprite){
return;
}
this._originalSize = this._sprite.spriteFrame.originalSize;
this._sprite.sizeMode = Sprite.SizeMode.CUSTOM;
if(!this.canvasUITrans){
let parent = this.node.parent;
while(parent){
let canvas = parent.getComponent(Canvas);
if(canvas){
this.canvasUITrans = canvas.getComponent(UITransform);
break;
}
parent = parent.parent;
}
}
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 = this.canvasUITrans.contentSize;
if(!this._oldSize.equals(winSize)){
let ratio = winSize.width / winSize.height;
let imgW2H = this._originalSize.width / this._originalSize.height;
if(ratio > imgW2H){
//wider than desgin.
this._uiTransform.width = winSize.width;
this._uiTransform.height = winSize.width / imgW2H;
}
else{
//higher than desgin.
this._uiTransform.width = winSize.height * imgW2H;
this._uiTransform.height = winSize.height;
}
this._oldSize.set(winSize);
}
}
}