前言

微信小游戏属于微信小程序的一个类目,小游戏对比于普通的h5游戏,其很大的一个特点是微信提供的关系链数据的使用,你可以获得同玩这个游戏的微信好友的数据,或者你在某个群的用户数据

概念

具体概念请前往-》关系链数据使用指南

需要了解关系链api和开放域,主域等概念。以下着重介绍具体的api使用

wx.setUserCloudStorage() 托管用户数据

ps: wx.setUserCloudStorage()接口在主域和开放数据域都可以使用

wx.setUserCloudStorage({KVDataList: [{ key: 'score', value: score }],success: res => {console.log(res);// 让子域更新当前用户的最高分,因为主域无法得到getUserCloadStorage;let openDataContext = wx.getOpenDataContext();openDataContext.postMessage({type: 'updateMaxScore',});},fail: res => {console.log(res);}
});

注意: KVDataList的value必须是字符串String类型,否则会报错

托管数据的限制
每个openid所标识的微信用户在每个游戏上托管的数据不能超过128个key-value对。
上报的key-value列表当中每一项的key+value长度都不能超过1K(1024)字节。
上报的key-value列表当中每一个key长度都不能超过128字节。

wx.getFriendCloudStorage()拉取当前用户所有同玩好友的托管数据(开放数据域使用)

ps: 这个接口只能在开放数据域使用,即主域无法调用接口获取好友数据

wx.getFriendCloudStorage({keyList: ['score', 'maxScore'], // 你要获取的、托管在微信后台都keysuccess: res => {console.log(res.data);}
});

获取到的数据如下:

绘制好友排行榜

没错,用你的canvas技术将获取到的好友数据绘制到sharedCanvas上。sharedCanvas是微信默认提供的,不需要再次创建

// src/myOpenDataContext/index.js
let sharedCanvas = wx.getSharedCanvas()function drawRankList (data) {data.forEach((item, index) => {// ...})
}wx.getFriendCloudStorage({success: res => {let data = res.datadrawRankList(data)}
})

绘制后如何显示以及会遇到的问题?

需要在上屏canvas上通过drawImage()方法把这个sharedCanvas绘制到上屏canvas
主域的js:

let openDataContext = wx.getOpenDataContext()
let sharedCanvas = openDataContext.canvas           canvas.getContext('2d').drawImage(sharedCanvas, 0, 0);

问题1:绘制了不显示?

因为wx.getFriendCloudStorage() 接口是异步的,以及sharedCanvas的绘制也是异步的(涉及头像等资源),如果在上屏canvas 只进行一次绘制,那么肯定是不显示或者显示不全的。但是开放数据域不能主动向主域进行通信,主域无法获知何时绘制完毕进行重新绘制,所以我建议在主域循环进行绘制。具体的其他逻辑可根据自身情况修改

loop(){// 主域绘制let openDataContext = wx.getOpenDataContext();let sharedCanvas = openDataContext.canvas;                           canvas.getContext('2d').drawImage(sharedCanvas, 0, 0);requestAnimationFrame(this.loop.bind(this));
}

问题2: 排行榜模糊的问题?

这个问题基本在每个人初次绘制排行榜的时候都会遇到。canvas绘制模糊的问题,通常的解决办法就是将内容放大设备像素比倍数,然后进行缩放。

const ratio = wx.getSystemInfoSync().pixelRatio;//获取设备像素比
let openDataContext = wx.getOpenDataContext();
let sharedCanvas = openDataContext.canvas;
sharedCanvas.width = screenWidth * ratio; // 在主域将sharedCanvas宽高都按像素比放大
sharedCanvas.height = screenHeight * ratio;

绘制到上屏canvas到时候要把宽高设为当前屏幕的宽高

const screenWidth = window.innerWidth;
const screenHeight = window.innerHeight;
canvas.getContext('2d').drawImage(sharedCanvas, 0, 0, screenWidth, screenHeight);

实际上到这里你还是模糊的。因为在sharedCanvas里你还是需要进行放大-缩放的操作。
开放域index.js

let sharedCanvas = wx.getSharedCanvas();
let context = sharedCanvas.getContext('2d');const screenWidth = wx.getSystemInfoSync().screenWidth;
const screenHeight = wx.getSystemInfoSync().screenHeight;
const ratio = wx.getSystemInfoSync().pixelRatio;……
//绘制元素的时候
context.scale(ratio, ratio);// 因为sharedCanvas在主域放大了ratio倍
//为了便于计算尺寸,在将context 缩放到750宽的设计稿尺寸,
let scales = screenWidth / 750;
context.scale(scales, scales);
// 接下来你每绘制的一个元素的尺寸,都应该按钮750宽的设计稿/
// 比如
// 画标题
context.fillStyle = '#fff';
context.font = '50px Arial';
context.textAlign = 'center';
context.fillText('好友排行榜', 750 / 2, 220); // 750的尺寸

如果不明白,献上github一份微信小游戏demo

wx.getGroupCloudStorage()获取群同玩成员游戏数据

在小游戏是通过群分享卡片打开的情况下,可以通过调用该接口获取群同玩成员的游戏数据。
获取群成员数据和获取好友数据有些不同,多了一个shareTicket

这个shareTicket必须是你分享到一个群,那么通过这个分享出来的卡片打开的小游戏就会有一个shareTicket,可以在页面打开的时候获取
主域js

wx.onShow(res => {let shareTicket = res.shareTicket;
});

开放数据域index.js

wx.getGroupCloudStorage({shareTicket: ticket,  // 需要带上shareTicketkeyList: ['score', 'maxScore'],success: res => {console.log(res.data);},fail: res => {console.log(res.data);}});

问题1: 开放数据域如何拿到主域的shareTicket?

主域可以通过postMessage通知开放域
主域js

let openDataContext = wx.getOpenDataContext();
openDataContext.postMessage({type: 'group',text: shareTicket,
});

在开放数据域通过onMessage获取主域消息

wx.onMessage(data => {if (data.type === 'group') {let shareTicket = data.text; // 开放数据域顺利拿到shareTicket}
});

接下来的绘制与好友排行榜同。

问题2:分享接口报错?

因为很多人刚开始开发微信小游戏都是属于无appid体验开发的,这个模式下是无法调用分享接口的,必须要有appid,可以申请一个新的小程序账号,设置类目的时候必须为游戏类型,一旦设置无法更改,也不能将旧的小程序其他类型改成游戏类型。

分享黑屏的问题

你可能会遇到小游戏点击右上角分享之后就黑屏了,而且是必现的,实际上是因为你的canvas 没有实时绘制,不清楚原因,但是分享回来黑屏,解决办法:1、监听分享回调,重新绘制当前canvas;2、实时绘制当前canvas

排行榜排名的问题?

托管在微信后台的数据,微信是没有给你排序的,排名需要自己处理。

微信小游戏关系链的使用(排行榜的显示)相关推荐

  1. 微信小游戏关系链能不能获取到服务器,关系链互动数据

    # 关系链互动数据 在开放 关系链数据能力 的基础上,小游戏新增 互动型托管数据 ,提供关系链互动能力,用于实现小游戏内微信好友互动(点赞,送礼物等)的功能. 关系链互动数据能力支持: 好友间互赠 5 ...

  2. 微信小游戏开放域之helloworld

    标签: 微信小游戏,开放域 微信小游戏-开放数据域的配置 概念 开放数据域 是一个封闭.独立的 JavaScript 作用域.开放数据域主要作用就是获取用户的关系链数据,并且展示关系链数据 具体使用方 ...

  3. 教你快速开发一个微信小游戏好友排行榜

    概述 ​ 要做这个好友排行榜.必然要有好友的战绩比分,然后再做排序,最后将数据呈现在UI上 , 可以分为下面几个步骤: 保存每个用户的分数 获取好友列表,并获取好友的分数 渲染排行榜 保存每个用户的分 ...

  4. 微信小游戏排行榜:Cocos Creator

    上一篇文章介绍了主域和子域的概念,微信小游戏:主域子域,这一篇介绍一下怎样在微信小游戏中制作好友排行榜 创建工程 由于开放数据域是一个封闭.独立的 JavaScript 作用域,所以开发者需要创建两个 ...

  5. 微信小游戏的设计和开发

    微信平台不但承载了聊天相关的基础属性,同时也有公众号的媒体属性.小程序的工具属性和支付的金融属性,是一个大而全的平台.因此越来越多的开发者基于小程序进行游戏开发,简单易用,支付方便,也是游戏开发者一个 ...

  6. Egret制作打砖块微信小游戏

    使用Egret制作微信小游戏打砖块-包括好友排行榜 项目创建与配置 项目逻辑代码 项目发布 微信小游戏的开发 项目所有代码 项目创建与配置 创建一个Egret EUI项目,默认库即可: 导入素材,在r ...

  7. 教你“偷偷”的获取微信小游戏好友关系链数据

    好友是是很多游戏都有的功能,原因在于好友玩法可以提升用户间的互动性,增加产品和用户的黏性.对提升留存率有重要帮助.很多游戏策划和产品经理都喜欢在游戏中加入这个设定,在腾讯开发平台.空间玩吧平台也都提供 ...

  8. 【微信小游戏】排行榜概念篇

    一.前提 微信小游戏主打社交玩法,为了丰富社交玩法我们肯定会用到关系链数据来做好友排行帮,群排行榜等功能.本篇主要介绍概念同时划重点,下一篇Cocos Creator中实战. 二.概念 1.1)关系链 ...

  9. 菜鸟| 微信小游戏好友排行榜教程

    写在前面:随着越来越多的新人开始接触白鹭引擎,创作属于自己的游戏.考虑到初学者会遇到一些实际操作问题,我们近期整理推出"菜鸟"系列技术文档,以便更好的让这些开发者们快速上手,Egr ...

  10. 基于Laya游戏引擎实现微信小游戏排行榜

    我们都知道,微信小游戏和小程序目前风头十足,很多公司都逐渐增加了相关业务线来迅速推广自己的产品和抢占用户群.说到微信小游戏,就不得不提到排行榜这个功能,就目前游戏行业,似乎都离不开排行榜这个重要功能, ...

最新文章

  1. 用c++来开发php的底层模块|用c++来开发apache模块,Apache模块开发实例(2)
  2. 中判断字符串是否为空_leetcode1704_go_判断字符串的两半是否相似
  3. 2018第九届蓝桥杯C/C++ B国赛 —— 第四题:调手表
  4. Cannot maintain customer-spec. event handler registration in SAP system
  5. javascript 嵌入python_通过Python将区块链数据嵌入Javascript,这是正确的方法吗?
  6. 转载:手写SpringMVC框架
  7. SpringMVC大坑一枚:ContentNegotiatingViewResolver可能不利于SEO
  8. 配置思科交换机冗余链路汇聚
  9. supergo定位软件_super go定位修改下载
  10. 葡萄柚能放冰箱保存吗 葡萄柚怎么保存时间长
  11. 纯鼓点节奏_[鼓点] 简单的鼓点节奏
  12. 测试工程师的福利!各远程移动测试平台对比分析
  13. 按键精灵 官方废了 , 不更新了
  14. 学习笔记—增量式PID详细实现(C语言)
  15. 【大数据入门核心技术-Tez】(二)Tez安装
  16. Direct3D 11在windows7上提示创建d3d设备失败
  17. 浅析企业网络准入控制系统的部署方式
  18. 欧拉公式ejwt_欧拉公式
  19. java 连接 teradata_java连接teradata
  20. Qt编写地图综合应用25-echart动态交互

热门文章

  1. android 传感器坐标系_android 传感器坐标
  2. Verilog HDL题库练习--题目来源HDLBits
  3. 禁用笔记本自带键盘技巧
  4. 谷歌浏览器fash弹框的设置
  5. Mac 双系统分区合并
  6. html生成邮件签名之路(一)
  7. 【Mongodb】常用的一些功能
  8. 文本对抗:《Semantically Equivalent Adversarial Rules for Debugging NLP Models》
  9. 一米村长讲故事机器人_村长讲故事 | 牛牛特工队番外
  10. 商汤的AI伴游小精灵(找最多子树)