first commit
This commit is contained in:
123
assets/scripts/utils/BgScale.ts
Normal file
123
assets/scripts/utils/BgScale.ts
Normal file
@@ -0,0 +1,123 @@
|
||||
import { _decorator, Component, Enum, sys, director, UITransform, Widget, view, Vec3 } from 'cc';
|
||||
const {ccclass, property} = _decorator;
|
||||
|
||||
export enum BGScaleType {
|
||||
FULL_SCREEN,
|
||||
SCALE_BY_WIDTH,
|
||||
SCALE_BY_HEIGHT,
|
||||
SCALE_ONLY_WIDTH,
|
||||
SCALE_ONLY_HEIGHT,
|
||||
}
|
||||
|
||||
export enum BGAlignmentType {
|
||||
TOP,
|
||||
BOTTOM,
|
||||
CENTER,
|
||||
LEFT,
|
||||
RIGHT,
|
||||
}
|
||||
|
||||
@ccclass
|
||||
export default class BgScale extends Component {
|
||||
@property({type: Enum(BGAlignmentType)})
|
||||
alignmentType:BGAlignmentType = BGAlignmentType.CENTER;
|
||||
@property({type: Enum(BGScaleType)})
|
||||
scaleType:BGScaleType = BGScaleType.FULL_SCREEN;
|
||||
|
||||
private realW:number = 0;
|
||||
private realH:number = 0;
|
||||
private _resizeCallback:any = null;
|
||||
|
||||
protected onLoad ():void {
|
||||
this.realW = this.node.getComponent(UITransform).width;
|
||||
this.realH = this.node.getComponent(UITransform).height;
|
||||
this.setMyFrameSize();
|
||||
if (sys.isBrowser) {
|
||||
this._resizeCallback = this.setMyFrameSizeAgain.bind(this);
|
||||
window.addEventListener('resize', this._resizeCallback);
|
||||
window.addEventListener('orientationchange', this._resizeCallback);
|
||||
document.addEventListener('rotateScreen', this._resizeCallback);
|
||||
document.addEventListener('resetScreen', this._resizeCallback);
|
||||
}
|
||||
}
|
||||
|
||||
protected onDestroy():void {
|
||||
if (sys.isBrowser) {
|
||||
window.removeEventListener('resize', this._resizeCallback);
|
||||
window.removeEventListener('orientationchange', this._resizeCallback);
|
||||
document.removeEventListener('rotateScreen', this._resizeCallback);
|
||||
document.removeEventListener('resetScreen', this._resizeCallback);
|
||||
this._resizeCallback = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected setMyFrameSize():void {
|
||||
|
||||
if (!this.node) {
|
||||
return;
|
||||
}
|
||||
var wsize = null;
|
||||
wsize = view.getVisibleSize();
|
||||
|
||||
var scale1 = wsize.width / this.realW;
|
||||
var scale2 = wsize.height / this.realH;
|
||||
var max_scale = Math.max(scale1, scale2);
|
||||
var scaleX, scaleY;
|
||||
if (this.scaleType == BGScaleType.SCALE_BY_WIDTH) {
|
||||
scaleX = scaleY = scale1;
|
||||
} else if (this.scaleType == BGScaleType.SCALE_BY_HEIGHT) {
|
||||
scaleX = scaleY = scale2;
|
||||
} else if (this.scaleType == BGScaleType.SCALE_ONLY_WIDTH) {
|
||||
scaleX = scale1;
|
||||
scaleY = 1;
|
||||
} else if (this.scaleType == BGScaleType.SCALE_ONLY_HEIGHT) {
|
||||
scaleX = 1;
|
||||
scaleY = scale2;
|
||||
} else if (sys.isBrowser) {
|
||||
//横向浏览器 只缩放宽度
|
||||
scaleX = scaleY = max_scale;
|
||||
// scaleY = 1;
|
||||
} else {
|
||||
scaleX = scaleY = max_scale;
|
||||
}
|
||||
|
||||
this.node.getComponent(UITransform).width = this.realW * scaleX;
|
||||
this.node.getComponent(UITransform).height = this.realH * scaleY;
|
||||
|
||||
var widget = this.node.getComponent(Widget);
|
||||
if (widget == null) {
|
||||
widget = this.node.addComponent(Widget);
|
||||
}
|
||||
|
||||
if (this.alignmentType == BGAlignmentType.BOTTOM) {
|
||||
widget.isAlignHorizontalCenter = true;
|
||||
widget.isAlignBottom = true;
|
||||
widget.bottom = 0;
|
||||
} else if (this.alignmentType == BGAlignmentType.TOP) {
|
||||
widget.isAlignHorizontalCenter = true;
|
||||
widget.isAlignTop = true;
|
||||
widget.top = 0;
|
||||
} else if (this.alignmentType == BGAlignmentType.LEFT) {
|
||||
widget.isAlignVerticalCenter = true;
|
||||
widget.isAlignLeft = true;
|
||||
widget.left = 0;
|
||||
} else if (this.alignmentType == BGAlignmentType.RIGHT) {
|
||||
widget.isAlignVerticalCenter = true;
|
||||
widget.isAlignRight = true;
|
||||
widget.right = 0;
|
||||
} else if (this.alignmentType == BGAlignmentType.CENTER) {
|
||||
widget.isAlignHorizontalCenter = true;
|
||||
widget.isAlignVerticalCenter = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected setMyFrameSizeAgain():void {
|
||||
this.scheduleOnce(function () {
|
||||
this.setMyFrameSize();
|
||||
}.bind(this), 0.05);
|
||||
}
|
||||
|
||||
protected changeOrientation(flag:boolean):void {
|
||||
this.setMyFrameSize();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user