Cocos creator 微信小游戏排行榜

Cocos creator 版本:2.0.10

主域动态刷新子域

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

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

实现排行榜

步骤一:需要实现排行榜,首先的是需要把你玩的小游戏的成绩上传至微信的后台,才可以进行读取的步骤。在主域中调用微信的接口。wx.setUserCloudStorage
wx.setUserCloudStorage({
	KVDataList : [{ key : 'key' , value : value}], 
	//这里接口接收的数据value好像只支持string类型,不成功可以将数据toString试试
	success : res =>{},
	fail : res =>{}
});
步骤二:上传完数据之后,在子域中可以从微信后台获取数据。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]
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Cocos Creator是一种基于JavaScript的游戏开发引擎,可用于开发简单的手机游戏应用程序,包括微信小游戏。目前,Cocos Creator平台上有120多套微信小游戏源代码可供游戏开发者使用,这些源代码包含了各种类型的游戏,如益智游戏、动作游戏、运动游戏、角色扮演游戏等等。这些源代码可大大加速游戏开发进程,并使游戏开发者能够专注于游戏的设计和创意。此外,通过Cocos Creator平台,游戏开发者可以使用丰富的可视化编辑工具和开发工具,轻松创建游戏精灵、动画和场景等元素,进而快速实现游戏的构建。总的来说,Cocos Creator平台上的120多套微信小游戏源代码为游戏开发者提供了可靠的资源和支持,使他们可以更快、更便捷地创建出高质量的微信小游戏,从而实现更大的商业成功。 ### 回答2: cocos creator是一款非常受欢迎的游戏开发引擎,其集成了丰富的功能和工具,可以很方便地构建2D和3D游戏。微信小游戏则是目前非常流行的一种轻量级移动游戏,因为与微信平台无缝集成,所以被越来越多的开发者采用。 在这样的背景下,120多套cocos creator微信小游戏源码的出现,可以让开发者更加便捷地开展游戏开发工作。这些源码涵盖了各种类型的游戏,如飞行射击、跑酷、休闲益智、卡牌战斗等等,开发者可以根据自己的需要选择适合自己的源码进行二次开发与修改。 使用这些源码,不仅可以节省大量的开发时间和精力,而且还可以获得很好的学习机会,了解其他优秀游戏的设计思路和开发技巧,从而提高自己的开发水平。当然,开发者也可以将这些源码用于商业项目,加速产品的上线和推广。 总之,cocos creator微信小游戏120多套源码的出现,为广大的游戏开发者带来了极大的便利和启示,也让我们更加期待未来cocos creator微信小游戏的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值