Cocos creator 微信小游戏排行榜「建议收藏」

Cocos creator 微信小游戏排行榜「建议收藏」Cocoscreator版本:2.0.10主域动态刷新子域首先得知道主域和子域的关系,需要让子域(开放域)里的排行榜信息动态刷新在主域的页面中,需要在主域中的节点上挂载WXSubContextView组件。子域中,可以添加Widget组件、滚动的节点来实现上下或者左右滑动。这里主要记录排行榜的实现。(这里只实现了同玩好友排行榜的功能,同玩群好友可以另实现)实现排行榜步骤一:需要实现…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Cocos creator 版本:2.0.10

主域动态刷新子域

首先得知道主域和子域的关系,需要让子域(开放域)里的排行榜信息动态刷新在主域的页面中,需要在主域中的节点上挂载WXSubContextView组件。
在这里插入图片描述

子域中,可以添加Widget组件、滚动的节点来实现上下或者左右滑动。这里主要记录排行榜的实现。(这里只实现了同玩好友排行榜的功能,同玩群好友可以另实现)

实现排行榜

步骤一:需要实现排行榜,首先的是需要把你玩的小游戏的成绩上传至微信的后台,才可以进行读取的步骤。在主域中调用微信的接口。wx.setUserCloudStorage
wx.setUserCloudStorage({
	KVDataList : [{ key : 'key' , value : value}], 
	//这里接口接收的数据value好像只支持string类型,不成功可以将数据toString试试
	success : res =>{},
	fail : res =>{}
});

Jetbrains全家桶1年46,售后保障稳定

步骤二:上传完数据之后,在子域中可以从微信后台获取数据。wx.getFriendCloudStorage。(只能在子域中使用)
wx.getFriendCloudStorage({
	KeyList : ['key'],//这里的key对应上传数据时的key
	success : res =>{},
});

获取到的数据就在success回调的res中,可以输出res.data看看结果是什么。(此接口可以获取所有同玩好友的数据,包括自己)
单独获取自己的信息数据,用于展示高亮自己的排行榜数据(大部分需要用户的授权,下方的不需要授权)

wx.getUserInfo({
            openIdList: ['selfOpenId'],
            lang: 'zh_CN',
            success: (res) => {
                self.selfNickname = res.data[0].nickName;
                self.selfAvatar = res.data[0].avatarUrl;
                // console.log('success', res.data)
            },
            fail: (res) => {
              reject(res)
            }
          });

这个接口可以获取自己的昵称,头像url等数据。

步骤三:加载排行榜上的微信头像。wx.createImage。
createImage(sprite,url){
        if (cc.sys.platform === cc.sys.WECHAT_GAME) {
            let image = wx.createImage();
            image.onload = function () {
                let texture = new cc.Texture2D();
                texture.initWithElement(image);
                texture.handleLoadedTexture();
                sprite.spriteFrame = new cc.SpriteFrame(texture);
            };
            image.src = url;
        }
    },

然后再特定的节点上替换调用。sprite:节点上的Sprite组件,url:获取到的avatarUrl。

步骤四:我的每一个用户的排名数据都存放在预制体里。克隆并将预制体放在数组里。
for(let i=0;i<this.backData.length;i++){
            var RankItem = cc.instantiate(this.rankPrefab);
            this.createImage(RankItem.getChildByName("avatar").getComponent(cc.Sprite),this.backData[i].avatarUrl);
            RankItem.getChildByName("nick").getComponent(cc.Label).string=this.backData[i].nickname;
            RankItem.getChildByName("score").getComponent(cc.Label).string="关卡:"+this.backData[i].KVDataList[0].value+"关";
            RankItem.getChildByName("onlyScore").getComponent(cc.Label).string=this.backData[i].KVDataList[0].value;
            let a = RankItem.getChildByName("onlyScore").getComponent(cc.Label).string;
            this.scoreArr.push({RankItem , a});
           
        }
步骤五:排序并在下方显示自己的数据

先写从大到小

compare(prop){
        return function(a,b){
            let v1 = a[prop];
            let v2 = b[prop];
            return v2-v1;
        }
    }

然后JS里的sort()方法来排序并在下方显示自己

sortScore(){
        this.spawnNewRankPrefab();
        for(let i=0;i<this.backData.length;i++){
            
            this.scoreArr.sort(this.compare("a"));
            this.scoreArr[i].RankItem.setParent(this.content);
            if(i<3){
                this.scoreArr[i].RankItem.children[2].getComponent(cc.Sprite).spriteFrame = this.rankImageArr[i];
                // console.log(this.rankImageArr[i]);
            }else{
                this.scoreArr[i].RankItem.getChildByName("rank").getComponent(cc.Label).string = (i+1);
            }
            
            // 在下方显示自己的排名
            if(this.scoreArr[i].RankItem.getChildByName("nick").getComponent(cc.Label).string == this.selfNickname){
                this.createImage(this.slefContent.getChildByName("RankItem").getChildByName("avatar").getComponent(cc.Sprite),this.selfAvatar);
                this.slefContent.getChildByName("RankItem").getChildByName("nick").getComponent(cc.Label).string = this.selfNickname;
                if(i<3){
                    this.slefContent.getChildByName("RankItem").children[2].getComponent(cc.Sprite).spriteFrame = this.rankImageArr[i];
                }else{
                    this.slefContent.getChildByName("RankItem").getChildByName("rank").getComponent(cc.Label).string =this.scoreArr[i].RankItem.getChildByName("rank").getComponent(cc.Label).string;
                }
                this.slefContent.getChildByName("RankItem").getChildByName("score").getComponent(cc.Label).string=this.scoreArr[i].RankItem.getChildByName("score").getComponent(cc.Label).string;
                
                this.slefContent.active = true;
            }
        }
    },

步骤六:主域发送消息给子域可以将排行榜刷新在主域上。主域:wx.postMessage。子域:wx.onMessage。

主域:

showRank(){
        this.Rank.active = true;
        wx.postMessage({message : "spawnRank"});     
    },
    hideRank(){
        this.Rank.active = false;
        wx.postMessage({message : "destroyRank"});
    },

子域:

 wx.onMessage((data) =>{
            if(data.message == "spawnRank"){
                this.sortScore();//关系到排序什么的,看下面
            }
            if(data.message == "destroyRank"){
                this.content.removeAllChildren();
                this.scoreArr = [];
            }
            if(data.message == "gain"){
                this.getSelf();//得到自己的数据
                this.getSubmit(); //获取到提交的成绩
            }
        })
看看结果:

在这里插入图片描述
有瑕疵,随意看看

参考:[https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/api.html]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215901.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WiFi技术概述:WiFi那些事

    WiFi技术概述:WiFi那些事1概述WLAN是无线局域网络的简称,全称为WirelessLocalAreaNetworks,是一种利用无线技术进行数据传输的系统,该技术的出现能够弥补有线局域网络之不足,以达到网络延伸之目的。Wi-Fi是无线保真的缩写,英文全称为WirelessFidelity,在无线局域网才对范畴是指“无线兼容性认证”,实质上是一种商业认证,同时也是一种无线联网技术,与蓝牙技术一样,同属于在办公室和家庭中使用的短距离无线技术。同蓝牙技术相比,它具备更高的传输速率,更远的传播距离,已经广泛应用于笔记本、手机

    2022年7月21日
    8
  • noip2012借教室_noip小学组

    noip2012借教室_noip小学组这个题首先很容易想到枚举1-m,再一个一个加起来,判断一下(最直白的暴力)于是又很容易想到用差分数组可以优化一下。就像这样#include<iostream>#include<cstdio>usingnamespacestd;constintmaxn=1000005;intd[maxn],s[maxn],t[maxn],r[maxn];…

    2022年8月22日
    3
  • Windows文件名长度限制

    win7x64位环境:260个长度是作为总的文件名长度限制。例如:所在文件夹的长度为50则文件名的长度被限制在210之下,超出的话会被进行截断。如果在程序中的话,超出长度的话MoveFile/CopyFile会返回错误,处理失败。例子:1.我手动在C:\建立一个文件,使用280个长度进行重命名,实际生成的却是文件名是256个

    2022年4月5日
    1.6K
  • TCP拥塞控制原理

    TCP拥塞控制原理TCP拥塞控制原理:TCP使用的是端到端的拥塞控制而不是网络辅助的拥塞控制,因为IP曾不想端系统提供显示的网络拥塞反馈。TCP采用的方法是让每一个发送方根据所感知到的网络拥塞的程度,来限制其能向连接发送流量的速率。这种方法有三个问题: 一个TCP发送方是如何限制向连接发送流量的速率? 一个TCP发送方是如何感知它到目的地之间的路径上存在拥塞的呢?

    2022年6月24日
    28
  • WAP网页设计入门 [转]「建议收藏」

    WAP网页设计入门 [转]「建议收藏」WAP网页设计入门[转]手机专用网页(WML篇)1.基本规则2.基本格式和文件头3.显示文本4.显示图片5.锚和任务6.显示表单7.事件8.CGI编程   这里介绍WAP协议标准组织所制定的标记语言WML,由于和以前介绍的HDML在手机浏览器专用网页的特征上基本一致,所以概念部分就略去了,直接讲述语言。1。基本规则  * WML使用XML文档字符集…

    2025年7月28日
    0
  • 移动亲情网有漫游费吗_北京移动和家庭套餐介绍

    移动亲情网有漫游费吗_北京移动和家庭套餐介绍为进一步满足客户国内长途及国内漫游通话需求,中国移动北京公司将于近期推出长漫亲情省业务,现就相关事宜通知如下:  一、推出时间  2009年4月18日0时  二、目标客户  动感地带、神州行家园卡  三、具体内容  月功能费1元,客户可指定除北京外国内任一省、自治区或直辖市为亲情省(不含港澳台),客户在北京向亲情省拨打长途每分钟0.19元;客户漫游至亲情省拨打国内电话(不含港澳台)、接听电话每分钟

    2022年10月7日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号