Files
MatchMaster/assets/Script/MessageContent.ts
T
2026-10-10 11:54:48 +08:00

68 lines
2.0 KiB
TypeScript

const { ccclass, property } = cc._decorator;
@ccclass
export default class MessageContent extends cc.Component {
@property(cc.Prefab)
itemPrefab: cc.Prefab = null;
private contentData: any[] = [];
private itemNodes: cc.Node[] = [];
private callback: any = null;
start() {
}
setContentData(data: any[], callback) {
this.contentData = data;
this.updateContent();
this.callback = callback;
}
updateContent() {
// 清除现有的项目
this.clearItems();
// 为每个数据项创建一个节点
for (let i = 0; i < this.contentData.length; i++) {
const itemNode = cc.instantiate(this.itemPrefab);
this.node.addChild(itemNode);
// 设置位置
const yPos = -30 - i * 60; // 每个项目的高度为60
itemNode.setPosition(0, yPos);
// 获取并设置标签内容
const label = itemNode.getComponent(cc.Label);
if (label) {
label.string = this.contentData[i].context.toString(); // 根据实际数据结构调整
}
// 添加点击事件
itemNode.on(cc.Node.EventType.TOUCH_END, () => {
cc.fx.AudioManager._instance.playEffect("anniu_little", null);
this.onItemClick(i, this.contentData[i]);
});
this.itemNodes.push(itemNode);
}
}
onItemClick(index: number, data: any) {
console.log(`点击了第 ${index} 个项目,数据为:`, data);
if (this.callback) {
this.callback(index, data);
}
// 发送自定义事件到父节点(Message组件)
// this.node.emit('item-clicked', index, data);
}
clearItems() {
for (let i = 0; i < this.itemNodes.length; i++) {
this.itemNodes[i].off(cc.Node.EventType.TOUCH_END);
this.itemNodes[i].destroy();
}
this.itemNodes = [];
}
}