学习微信小游戏排行榜,微信开发者工具渲染报错!子域不能渲染的问题
//ShowRanks.js主域代码
cc.Class({
extends: cc.Component,
properties: {
wxSubContextView: cc.Node //主域视窗容器
},
onLoad() {
},
onClick() {
// 调用云函数获取用户数据
wx.cloud.callFunction({
//查询数据库的云函数
name: 'cloud2',
data: {
method: 'getGuessData' // 指定查询数据库的参数是 'getGuessData'
},
success: res => {
// 获取到用户数据后,将其传递给子域
let rankData = res.result; // 假设云函数返回的用户数据为数组形式
this.initSubDomain(); // 初始化子域
this.sendRankDataToSubDomain(rankData); // 向子域发送排行榜数据
},
fail: err => {
console.error('云函数调用失败', err);
}
});
},
initSubDomain() {
if (typeof wx === 'undefined') {
return;
}
// 获取开放数据域
let openDataContext = wx.getOpenDataContext();
// 在主域中显示开放数据域
openDataContext.postMessage({
action: 'init',
});
},
sendRankDataToSubDomain(rankData) {
if (typeof wx === 'undefined') {
return;
}
// 向开放数据域发送排行榜数据
let openDataContext = wx.getOpenDataContext();
openDataContext.postMessage({
action: 'updateRanks',
data: rankData,
});
},
showRanks() {
if (typeof wx === 'undefined') {
return;
}
// 切换排行榜显示状态
this.wxSubContextView.active = !this.wxSubContextView.active;
// 通知子域显示或隐藏排行榜
let openDataContext = wx.getOpenDataContext();
openDataContext.postMessage({
action: this.wxSubContextView.active ? 'showRanks' : 'hideRanks',
});
},
});
//子域OpenData.js开放数据域
cc.Class({
extends: cc.Component,
properties: {
itemPrefab: cc.Prefab, // item预制
content: cc.Node, // content节点
allInfoList: [], // 存储所有玩家信息的数组
},
onLoad () {
if (typeof wx === 'undefined') {
return;
}
wx.onMessage(data => {
if (data.message) {
if (data.message === 'updateRanks') {
// 获取排行榜数据并绘制
this.getRankDataAndDraw(data.rankData); // 接收主域传来的rankData
} else if (data.message === 'clear') {
// 关闭排行榜时清空节点
this.content.removeAllChildren();
}
}
});
},
getRankDataAndDraw(rankData) {
// 清空content节点
this.content.removeAllChildren();
// 根据排行榜数据绘制排名列表
for (let i = 0; i < rankData.length; i++) {
let data = rankData[i];
this.createItem(data.rank, data.nickName, data.avatarUrl, data.level);
}
},
makeRanks() {
// 首先将allInfoList内部元素进行排序,根据分数来降序排列
this.allInfoList.sort((a, b) => {
return b['level'] - a['level'];
});
// 清空content节点
this.content.removeAllChildren();
// 根据各个玩家的分数制作排名
for (let i = 0; i < this.allInfoList.length; i++) {
let nickName = this.allInfoList[i]['nickName'];
let avatarUrl = this.allInfoList[i]['avatarUrl'];
let level = this.allInfoList[i]['level'];
this.createItem(i + 1, nickName, avatarUrl, level);
}
},
createItem(rank, nickName, avatarUrl, level) {
// 生成item
let item = cc.instantiate(this.itemPrefab);
// 排名
item.children[0].getComponent(cc.Label).string = String(rank);
// 微信名
item.children[4].getComponent(cc.Label).string = nickName;
// 分数
item.children[5].getComponent(cc.Label).string = level;
// 头像
cc.loader.load({ url: avatarUrl, type: 'png' }, (err, texture) => {
if (err) console.error(err);
item.children[1].getComponent(cc.Sprite).spriteFrame = new cc.SpriteFrame(texture);
});
// 添加到content中
this.content.addChild(item);
}
});