134 lines
4.7 KiB
TypeScript
134 lines
4.7 KiB
TypeScript
|
|
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<cc.Node>; //最上方用户头像动画
|
|
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;
|
|
}
|
|
|
|
start() {
|
|
this.Player.active = false;
|
|
this.getRank();
|
|
}
|
|
//调用获取排行榜接口
|
|
getRank(){
|
|
let dataFile = {
|
|
length:100
|
|
}
|
|
cc.fx.GameTool.getRank(dataFile,data =>this.getRankData(data));
|
|
}
|
|
//实际设置排行数据
|
|
getRankData(data){
|
|
if(data){
|
|
// console.log(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(210,453,0)})
|
|
.call(() =>{
|
|
this.Player.getChildByName("rank").active = true;
|
|
this.Player.getChildByName("rank").getChildByName("number")
|
|
.getComponent(cc.Label).string = parseInt(time*100 + "") + "%";
|
|
})
|
|
.start();
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
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);
|
|
}
|
|
|
|
})
|
|
}
|
|
|
|
}
|