import { _decorator, assetManager, Component, ImageAsset, Label, Node, Sprite, SpriteFrame, Texture2D } from 'cc'; import HTTPS, { NetPost } from '../MyFrame/HTTPS'; const { ccclass, property } = _decorator; @ccclass('Rank') export class Rank extends Component { @property(Label) PageLabel: Label = null; @property(Node) Layout: Node = null; last_page = 1 @property(SpriteFrame) defaultImage: SpriteFrame = null; close() { this.node.active = false } protected onEnable(): void { this.RequestRank(1) } UP() { let page = this.extractFirstNumberFromString(this.PageLabel.string) page -= 1 if (page <= 1) { page = 1 } this.PageLabel.string = `第 ${page} 页` this.RequestRank(page) } DOWN() { let page = this.extractFirstNumberFromString(this.PageLabel.string) page += 1 if (page >= this.last_page) { page = this.last_page } this.PageLabel.string = `第 ${page} 页` this.RequestRank(page) } RequestRank(page: number) { //请求排行榜数据 HTTPS.Instance.post(NetPost.ranking_list, { list_rows: 7, page: page, }).then((resp) => { console.error('请求排行榜数据成功'); console.error(resp); this.last_page = resp.data.last_page this.Layout.children.forEach((item, index) => { let NickName = item.getChildByName("NickName") let Order = item.getChildByName("Order") let Score = item.getChildByName("Score") let image = item.getChildByName("image") if (resp.data.data[index]) { item.active = true Order.getComponent(Label).string = ((page - 1) * 7 + index + 1).toString() NickName.getComponent(Label).string = resp.data.data[index].nickname Score.getComponent(Label).string = resp.data.data[index].score.toString() if (resp.data.data[index].avatar != '') { assetManager.loadRemote(resp.data.data[index].avatar, { ext: '.png' }, function (err, ImageAsset) { if (!err && ImageAsset) { console.log(ImageAsset); let tex = new Texture2D() tex.image = ImageAsset let sp = new SpriteFrame() sp.texture = tex image.getComponent(Sprite).spriteFrame = sp; } else { console.log(err); } // ... }); } else { image.getComponent(Sprite).spriteFrame = this.defaultImage; } } else { item.active = false } }) }) } extractFirstNumberFromString(input: string): number | null { const match = input.match(/\d+/); return match ? Number(match[0]) : null; } }