图片缩放组件:SpriteResizer.ts
const { ccclass, property, requireComponent } = cc._decorator;
enum ResizeMode {
None = 0,//跟随node的sizeMode
FitWidth = 1,
FitHeight = 2,
FitBoth = 3,
};
/**
* @注意此控件只修改size不改变scale
*/
@ccclass
@requireComponent(cc.Sprite)
export default class SpriteResizer extends cc.Component {
@property()
private width: number = 0;
@property
height = 0;
@property()
private _resizeMode: ResizeMode = ResizeMode.None;
@property({
type: cc.Enum(ResizeMode),
displayName: "图片缩放策略"
})
set resizeMode(val: ResizeMode) {
this._resizeMode = val;
if (CC_EDITOR) {
this.adapte();
}
}
get resizeMode() {
return this._resizeMode;
}
public targetSprite: cc.Sprite = null;
onLoad() {
if (this.targetSprite == null) {
this.targetSprite = this.node.getComponent(cc.Sprite);
}
this.adapte();
}
start() {
}
adapte() {
if (this.width == 0) {
this.width = this.node.width;
}
if (this.height == 0) {
this.height = this.node.height;
}
if (this.targetSprite) {
let spriteFrame = this.targetSprite.spriteFrame;
let dd = this.targetSprite.node.getContentSize();
if (!this.targetSprite.spriteFrame) {
cc.error(`Blade:空的SpriteFrame不参与适配`)
return;
}
if (this.resizeMode == ResizeMode.FitHeight && this.height > 0) {
let rect = spriteFrame.getRect();
let scale = this.height / rect.height;
let width = rect.width * scale;
this.targetSprite.node.setContentSize(cc.size(width, this.height));
}
else if (this.resizeMode == ResizeMode.FitWidth && this.width > 0) {
let spriteFrame = this.targetSprite.spriteFrame;
let rect = spriteFrame.getRect();
let scale = this.width / rect.width;
let height = rect.height * scale;
this.targetSprite.node.setContentSize(cc.size(this.width, height));
}
else if (this.resizeMode == ResizeMode.FitBoth && this.width > 0 && this.height > 0) {
this.targetSprite.node.setContentSize(cc.size(this.width, this.height));
}
}
}
}