// Learn TypeScript: // - https://docs.cocos.com/creator/2.4/manual/en/scripting/typescript.html // Learn Attribute: // - https://docs.cocos.com/creator/2.4/manual/en/scripting/reference/attributes.html // Learn life-cycle callbacks: // - https://docs.cocos.com/creator/2.4/manual/en/scripting/life-cycle-callbacks.html import Utils from "./module/Pay/Utils"; import NumberToImage from "./NumberToImage"; import { MiniGameSdk } from "./Sdk/MiniGameSdk"; const { ccclass, property } = cc._decorator; @ccclass export default class ranking extends cc.Component { @property(cc.SpriteAtlas) ui: cc.SpriteAtlas = null; @property(cc.Node) subContextView: cc.Node = null; @property(cc.Node) closeButton: cc.Node = null; @property(cc.Node) btnRanks: cc.Node = null; @property(cc.Node) selfNode: cc.Node = null; @property(cc.SpriteFrame) defaultsprite: cc.SpriteFrame = null; private isShow: boolean = true; wordRank: any[]; selfInfo: any; rankNumber: number = 0; _touchCancle: boolean = false; // LIFE-CYCLE CALLBACKS: onLoad() { this.wordRank = []; this.selfInfo = null; this.rankNumber = 0; this._touchCancle = false; } start() { } init(event?: cc.Event, customEventData?: string) { let eventName = ""; let btnName = "" if (customEventData !== undefined) { btnName = customEventData; eventName = "click" } else { btnName = "btnRank"; eventName = "auto"; } let dataInfo = { interface_id: "ranking", // 界面名称 reason: eventName, // 事件名称 is_first_exposure: false, // 是否首次曝光 entry_point: btnName, // 按钮名称 } cc.fx.GameTool.shushu_Track("interface_exposure", dataInfo); this.openLoad(); this.btnRanks.active = true; let user_Info = cc.fx.StorageMessage.getStorage("user_Info"); if (user_Info != null && user_Info != undefined && user_Info != "") { cc.fx.GameConfig.GM_INFO.username = user_Info.username; cc.fx.GameConfig.GM_INFO.useravatar = user_Info.useravatar; setTimeout(() => { if (!this.node.getChildByName("friend").active) { this.onRanksBtnClicked(); this.node.getChildByName("friend").active = false; this.node.getChildByName("word").active = true; this.node.getChildByName("word_rank").active = true; this.closeFriend(); } else { this._touchCancle = true; this.openFriend(); this.closeWord(); } }, 0); } else { this.onRanksBtnClicked(); } // this.openWord(); } showRanks() { if (typeof wx === 'undefined') { return; } this.closeLoad(); // 设置容器可见 this.node.getChildByName("rank").active = true; this.subContextView.active = true; console.log("展示排行榜"); // 设置随机数(把这个当做玩家每局结算时的分数) this.subContextView.getComponent(cc.SubContextView).updateSubContextViewport(); setTimeout(() => { console.log('显示排行榜'); //@ts-ignore wx.getOpenDataContext().postMessage({ message: cc.fx.GameConfig.GM_INFO.openid }); //@ts-ignore wx.getOpenDataContext().postMessage({ message: parseInt(cc.fx.GameConfig.GM_INFO.level) }); this.subContextView.getComponent(cc.SubContextView).updateSubContextViewport(); }, 200); }; requestFriendInfo() { } onRanksBtnClicked() { if (typeof wx === 'undefined') { this.showRanks(); // 非微信环境直接显示 return; } cc.fx.GameTool.getUserAvatar(() => { this.showWord(true); // ✅ 授权成功,显示排行榜 this.isShow = false; }) } protected update(dt: number): void { // if (this.isShow) { // this.onRanksBtnClicked(); // } } closeRanks() { // console.log('关闭排行榜'); this.subContextView.getComponent(cc.SubContextView).updateSubContextViewport(); this.closeButton.active = false; // 设置容器不可见,即关闭排行榜,并让开放域清空排名信息 this.node.getChildByName("rank").active = false; this.subContextView.active = false; //@ts-ignore wx.getOpenDataContext().postMessage({ message: 'close' }); } closeFriend() { // console.log('关闭好有排行榜'); this.subContextView.getComponent(cc.SubContextView).updateSubContextViewport(); //@ts-ignore wx.getOpenDataContext().postMessage({ message: 'close' }); // 设置容器不可见,即关闭排行榜,并让开放域清空排名信息 this.node.getChildByName("rank").active = false; this.subContextView.active = false; } closeWord() { // console.log('关闭世界排行榜'); this.node.getChildByName("word_rank").active = false; } openFriend() { if (!this._touchCancle) { return; } console.log("进入好友排行榜"); if (cc.fx.GameConfig.GM_INFO.wxFriend == true) { console.log("已经授权过好友信息"); this.showRanks(); } else { console.log("未授权过好友信息"); MiniGameSdk.API.getWechatFriend((data) => { console.log("获取好友信息成功?", data); if (data == true) this.showRanks(); }) } this.node.getChildByName("friend").active = true; this.node.getChildByName("word").active = false; this.closeWord(); } openWord() { if (!this._touchCancle) { return; } this.node.getChildByName("friend").active = false; this.node.getChildByName("word").active = true; this.node.getChildByName("word_rank").active = true; this.closeFriend(); this.showWord(false); } showWord(type) { // console.log("__________进入世界排行榜了"); if (type) { this.wordRank = []; Utils.getRank((data) => { this.closeLoad(); if (data.code == 1) { // console.log("获取排行榜数据", data.data.rank); this.wordRank = data.data.rank; this.rankNumber = data.data.index; for (let i = 0; i < this.wordRank.length; i++) { this.wordRank[i].rank = i + 1; } this.node.getChildByName("word_rank").active = true; this.setSelfInfo(); this.node.getChildByName("word_rank").getComponent("RankManager").init(this.wordRank); } else { MiniGameSdk.API.showToast('网络异常,获取排行榜数据失败'); this.btnRanks.active = false; } }) } else { // console.log("_______________", this.wordRank.length); } } openLoad() { this.node.parent.getChildByName("Loading").active = true; this.node.parent.getChildByName("Loading").getChildByName("load").stopAllActions(); this.node.parent.getChildByName("Loading").getChildByName("load").runAction(cc.rotateTo(2, 1080).repeatForever()); } closeLoad() { this.node.parent.getChildByName("Loading").active = false; this._touchCancle = true; } setSelfInfo() { console.log("查询自己信息"); this.selfNode.opacity = 0; this.selfInfo = null; for (let i = 0; i < this.wordRank.length; i++) { if (this.wordRank[i]._id == cc.fx.GameConfig.GM_INFO.uid) { console.log("我自己的UID", cc.fx.GameConfig.GM_INFO.uid); console.log("排行榜中的ID:", this.wordRank[i]._id); // this.selfInfo = this.wordRank[i]; this.selfInfo = JSON.parse(JSON.stringify(this.wordRank[i])); if (this.selfInfo.useravatar == "0" || this.selfInfo.useravatar == "1" || this.selfInfo.useravatar == "2" || this.selfInfo.useravatar == "3" || this.selfInfo.useravatar == "4" || this.selfInfo.useravatar == "5" || this.selfInfo.useravatar == "6" || this.selfInfo.useravatar == "7" || this.selfInfo.useravatar == "8" || this.selfInfo.useravatar == "9" || this.selfInfo.useravatar == "10") { this.selfInfo.useravatar = "icon_" + this.selfInfo.useravatar; } this.selfInfo.useravatarIcon = "kuang_" + (parseInt(this.selfInfo.useravatarIcon) + 1); console.log("我自己的信息", this.selfInfo); } } if (this.selfInfo == null) { if (this.rankNumber == -1 || this.rankNumber == 0) { this.rankNumber = 9999; } this.selfInfo = { useravatarIcon: cc.fx.GameConfig.GM_INFO.useravaterkuang, useravatar: cc.fx.GameConfig.GM_INFO.useravatarIcon, username: cc.fx.GameConfig.GM_INFO.username, levelAmount: cc.fx.GameConfig.GM_INFO.level, rank: this.rankNumber } this.selfInfo.useravatar = cc.fx.GameConfig.GM_INFO.useravatarIcon; this.selfInfo.useravatarIcon = cc.fx.GameConfig.GM_INFO.useravaterkuang; } let useravatarIcon = this.selfInfo.useravatarIcon; console.log("自己的头像框", useravatarIcon); this.selfNode.getChildByName("icon").getComponent(cc.Sprite).spriteFrame = this.ui.getSpriteFrame(useravatarIcon); this.selfInfo.username = cc.fx.GameTool.subName(this.selfInfo.username, 7); let name = this.selfInfo.username; if (name == "user") name = "匿名玩家"; this.selfNode.getChildByName("nameLab").getComponent(cc.Label).string = name + ""; NumberToImage.numberToImageNodes3((this.selfInfo.rank), 43, 15, "rank_", this.selfNode.getChildByName("rankLab"), true); NumberToImage.numberToImageNodes3(this.selfInfo.levelAmount, 43, 15, "level_", this.selfNode.getChildByName("totalLab"), true); if (this.selfInfo.rank == 9999) { this.selfNode.getChildByName("rankLab").scaleX = 0.75; this.selfNode.getChildByName("rankLab").scaleY = 0.75; this.selfNode.getChildByName("add").active = true; } else this.selfNode.getChildByName("add").active = false; // this.node.getChildByName("timeLab").getComponent(cc.Label).string = timeTemp + ""; this.selfNode.getChildByName("rank").getChildByName("one").active = false; this.selfNode.getChildByName("rank").getChildByName("two").active = false; this.selfNode.getChildByName("rank").getChildByName("three").active = false; if (this.selfInfo.rank == 1) { this.selfNode.getChildByName("rank").getChildByName("one").active = true; this.selfNode.getChildByName("rankLab").active = false; } else if (this.selfInfo.rank == 2) { this.selfNode.getChildByName("rank").getChildByName("two").active = true; this.selfNode.getChildByName("rankLab").active = false; } else if (this.selfInfo.rank == 3) { this.selfNode.getChildByName("rank").getChildByName("three").active = true; this.selfNode.getChildByName("rankLab").active = false; } else { this.selfNode.getChildByName("rankLab").active = true; } console.log("自己的他头像:", this.selfInfo.useravatar); if (this.selfInfo.useravatar == "" || this.selfInfo.useravatar == null || this.selfInfo.useravatar == undefined ) { this.selfNode.getChildByName("pic").getChildByName("pic").getComponent(cc.Sprite).spriteFrame = this.defaultsprite; } else if (this.selfInfo.useravatar.substring(0, 4) == "icon") { let useravatar = this.selfInfo.useravatar; this.selfNode.getChildByName("pic").getChildByName("pic").getComponent(cc.Sprite).spriteFrame = this.ui.getSpriteFrame(useravatar); } else this.setPic(); this.selfNode.opacity = 255; } public setPic() { // console.log("设置头像:", this.selfInfo.useravatar); // this.node.getChildByName("pic").getChildByName("icon").active = false; this.selfNode.getChildByName("pic").active = false; var self = this; let url = this.selfInfo.useravatar; cc.assetManager.loadRemote(url, { ext: '.png' }, (err, texture: cc.Texture2D) => { if (texture) { this.selfNode.getChildByName("pic").active = true; var sprite = this.selfNode.getChildByName("pic").getChildByName("pic").getComponent(cc.Sprite); sprite.spriteFrame = new cc.SpriteFrame(texture); // console.log(this.data.rank,"设置头像成功",err); } else { // console.log("设置头像失败",url); // console.log(err, texture) } }) } // update (dt) {} }