cb/assets/Script/MessageContent.ts

67 lines
1.9 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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, () => {
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 = [];
}
}