import List from "./module/RankList/List"; const { ccclass, property } = cc._decorator; //排行榜 @ccclass export default class RankManager extends cc.Component { @property(cc.Node) //用户上方头像 Player: cc.Node = null; @property(cc.Node) //用户最下方个人信息 selfNode: cc.Node = null; @property(cc.Sprite) //用户头像换图 phone: cc.Sprite = null; private rankList: List; //排行榜 tween: cc.Tween; //最上方用户头像动画 listData: any; //总列表信息 selfData: any; //自己信息 rankNumber: number; //用户自己排名 有可能不在排行榜内99+ rankTotal: number; //获取排行榜用户数量 现在为100 onLoad() { this.init(); } //初始化数据 init(){ this.rankList = cc.find("ScrollView", this.node).getComponent(List); this.Player.getChildByName("rank").active = false; this.listData = []; this.selfData = null; this.rankNumber = 100; this.rankTotal= 100; this.selfNode.opacity = 0; this.fit(); } start() { this.Player.active = false; this.getRank(); } fit(){ var jg = cc.fx.GameTool.setFit(); if(!jg){ this.node.getChildByName("ScrollView").getChildByName("view").height = 800; } } //调用获取排行榜接口 getRank(){ let dataFile = { length:100 } cc.fx.GameTool.getRank(dataFile,data =>this.getRankData(data)); } //实际设置排行数据 getRankData(data){ if(data){ cc.fx.GameTool.getRankData(data,this,6); this.setPic(this.selfData.pic); } } //返回按钮 backClick(){ cc.director.loadScene("LoadScene"); } //最上方用户动画 playerAction(){ //-254 377 210 453 this.Player.getChildByName("rank").active = false; let time = 1; this.tween = cc.tween(this.Player) .to(2,{position:cc.v3(232,446,0)}) .call(() =>{ this.Player.getChildByName("rank").active = true; this.Player.getChildByName("rank").getChildByName("number") .getComponent(cc.Label).string = parseInt(time*100 + "") + "%"; }) .start(); if(this.listData.length > 0){ time = (this.listData.length - this.rankNumber)/this.listData.length; if(this.listData.length >= 99){ if(this.rankNumber >= 99){ time = (Math.random()*49+1)/100 var matchId = cc.sys.localStorage.getItem("matchNumber"); if(matchId == null || matchId == undefined){ time = 0; } } else time = (this.listData.length - this.rankNumber)/this.listData.length; } else{ if(this.rankNumber > 99){ time = 0; } else time = (this.listData.length - this.rankNumber)/this.listData.length; } } else time = 0; setTimeout(() => { if(this.tween)this.tween.stop(); this.Player.getChildByName("rank").active = true; this.Player.getChildByName("rank").getChildByName("number") .getComponent(cc.Label).string = parseInt(time*100 + "") + "%"; }, time*2000); } //设置头像 处理的逻辑比较多,不用公共类的了 public setPic(pic){ this.phone.node.parent.getChildByName("icon").active = false; this.phone.node.active = false; this.Player.active = true; this.Player.opacity = 0; this.Player.getChildByName("mask").getChildByName("icon").active = false; this.Player.getChildByName("mask").getChildByName("phone").active = false; fetch(pic) .then(response => { return response.headers.get('Content-Length'); }) .then(errNo => { if(errNo == "5093"){ this.phone.node.parent.getChildByName("icon").active = true; this.Player.getChildByName("mask").getChildByName("icon").active = true; } }) .catch(error => { // console.error('Error fetching X-Info:', error); }); var self = this; cc.assetManager.loadRemote(pic, {ext:'.png'},(err, texture:cc.Texture2D) => { self.Player.opacity = 255; if(texture){ self.phone.node.active = true; self.phone.spriteFrame = new cc.SpriteFrame(texture); self.Player.getChildByName("mask").getChildByName("icon").active = false; self.Player.getChildByName("mask").getChildByName("phone").active = true; self.Player.getChildByName("mask").getChildByName("phone").getComponent(cc.Sprite) .spriteFrame = new cc.SpriteFrame(texture); setTimeout(() => { self.playerAction(); }, 500); } else{ self.Player.getChildByName("mask").getChildByName("icon").active = true; setTimeout(() => { self.playerAction(); }, 500); } }) } }