挂载在Scene上,预制体需要添加 Widget 组件
/**
* 画布适配策略
* note:
* 1. 只能挂载画布节点
*/
let StrategyEnum = cc.Enum({
NONE: 0,
AUTO: 1,
FIT_WIDTH: 2,
FIT_HEIGHT: 3,
FIT_WIDTH_HEIGHT: 4,
});
cc.Class({
extends: cc.Component,
properties: {
_onAdded: true,
strategy: {
type: StrategyEnum,
default: StrategyEnum.NONE,
tooltip: "适配策略: \n" +
"AUTO: 宽高比>4096/2160时选择等高,否则等宽\n" +
"FIT_WIDTH: 等宽\n" +
"FIT_HEIGHT: 等高\n" +
"FIT_WIDTH_HEIGHT: 等宽等高",
notify () {
let canvas = this.node.getComponent(cc.Canvas);
if (canvas) {
switch (this.strategy) {
case StrategyEnum.AUTO:
canvas.fitWidth = false;
canvas.fitHeight = false;
break;
case StrategyEnum.FIT_HEIGHT:
canvas.fitWidth = false;
canvas.fitHeight = true;
break;
case StrategyEnum.FIT_WIDTH:
canvas.fitWidth = true;
canvas.fitHeight = false;
break;
case StrategyEnum.FIT_WIDTH_HEIGHT:
canvas.fitWidth = true;
canvas.fitHeight = true;
break;
}
}
}
}
},
onLoad () {
this.setFitMode();
},
isCanvasNode () {
return this.node.getComponent(cc.Canvas) != null;
},
/**
* 设置适配模式
*/
setFitMode () {
let winSize = cc.view.getFrameSize();
let w = winSize.width,
h = winSize.height;
let canvas = this.getComponent(cc.Canvas);
if (canvas) {
switch (this.strategy) {
case StrategyEnum.AUTO:
if (w / h > 4096 / 2160) {
canvas.fitWidth = false;
canvas.fitHeight = true;
} else {
canvas.fitWidth = true;
canvas.fitHeight = false;
}
break;
case StrategyEnum.FIT_HEIGHT:
canvas.fitWidth = false;
canvas.fitHeight = true;
break;
case StrategyEnum.FIT_WIDTH:
canvas.fitWidth = true;
canvas.fitHeight = false;
break;
case StrategyEnum.FIT_WIDTH_HEIGHT:
canvas.fitWidth = true;
canvas.fitHeight = true;
break;
}
}
}
});