Files
MatchMaster/assets/Script/LabelBlackOutline.ts
T
2026-07-31 17:59:07 +08:00

81 lines
2.0 KiB
TypeScript

const {
ccclass,
property,
executeInEditMode,
requireComponent,
disallowMultiple,
} = cc._decorator;
/**
* 给当前节点上的 cc.Label 添加可调节的黑色描边。
*
* 使用方法:
* 1. 将本脚本挂到带有 cc.Label 的节点上。
* 2. 在属性检查器中修改 Outline Width。
* 3. 运行时可调用 setOutlineWidth(width) 修改描边厚度。
*
* 注意:cc.LabelOutline 只支持系统字体和 TTF 字体,不支持 BMFont。
*/
@ccclass
@executeInEditMode
@requireComponent(cc.Label)
@disallowMultiple
export default class LabelBlackOutline extends cc.Component {
@property({
type: cc.Integer,
min: 0,
max: 20,
step: 1,
slide: true,
tooltip: "黑色描边厚度,0 表示不显示描边",
})
outlineWidth: number = 2;
private _lastWidth: number = -1;
protected onLoad(): void {
this.applyOutline();
}
protected onEnable(): void {
this.applyOutline();
}
protected update(): void {
// executeInEditMode 下可在编辑器中实时预览厚度变化。
if (this._lastWidth !== this.outlineWidth) {
this.applyOutline();
}
}
/**
* 运行时修改描边厚度。
*/
public setOutlineWidth(width: number): void {
this.outlineWidth = Math.max(0, Math.round(width));
this.applyOutline();
}
/**
* 立即将当前配置应用到 cc.LabelOutline。
*/
public applyOutline(): void {
if (!this.node) {
return;
}
let outline = this.node.getComponent(cc.LabelOutline);
if (!outline) {
outline = this.node.addComponent(cc.LabelOutline);
}
const width = Math.max(0, Math.round(this.outlineWidth));
this.outlineWidth = width;
outline.color = cc.Color.BLACK;
outline.width = width;
outline.enabled = width > 0;
this._lastWidth = width;
}
}