48 lines
1.7 KiB
TypeScript
48 lines
1.7 KiB
TypeScript
import { _decorator, Component, Node, Sprite, Label, SpriteFrame } from 'cc';
|
||
const { ccclass, property } = _decorator;
|
||
|
||
/**
|
||
* 预览页单个关卡 item 的视图组件
|
||
* 挂在 PagePreviewLevels 的 listTemplate 根节点上,由编辑器拖拽绑定子节点。
|
||
* instantiate 克隆 item 时,Cocos 会把这些 Node 引用自动重映射到克隆后的子节点,
|
||
* 所以每个 item 拿到的都是自己的封面/标签引用,与节点层级/命名解耦。
|
||
*/
|
||
@ccclass('PreviewLevelItem')
|
||
export class PreviewLevelItem extends Component {
|
||
@property({ type: Sprite, tooltip: '封面图 Sprite' })
|
||
levelCover: Sprite | null = null;
|
||
|
||
@property({ type: Label, tooltip: '答案 Label' })
|
||
answerLabel: Label | null = null;
|
||
|
||
@property({ type: Label, tooltip: '线索1 Label' })
|
||
tips1Label: Label | null = null;
|
||
|
||
@property({ type: Label, tooltip: '线索2 Label' })
|
||
tips2Label: Label | null = null;
|
||
|
||
@property({ type: Label, tooltip: '线索3 Label' })
|
||
tips3Label: Label | null = null;
|
||
|
||
/**
|
||
* 一次性设置所有文本字段
|
||
*/
|
||
setTexts(opts: {
|
||
answer: string;
|
||
hint1: string;
|
||
hint2: string;
|
||
hint3: string;
|
||
}): void {
|
||
if (this.answerLabel) this.answerLabel.string = `答案:${opts.answer}`;
|
||
if (this.tips1Label) this.tips1Label.string = `线索一:${opts.hint1}`;
|
||
if (this.tips2Label) this.tips2Label.string = `线索二:${opts.hint2}`;
|
||
if (this.tips3Label) this.tips3Label.string = `线索三:${opts.hint3}`;
|
||
}
|
||
|
||
setCover(spriteFrame: SpriteFrame | null): void {
|
||
if (this.levelCover && spriteFrame) {
|
||
this.levelCover.spriteFrame = spriteFrame;
|
||
}
|
||
}
|
||
}
|