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; } } }