微信好友排行榜 - 白鹭对接

由于小游戏开放数据域是独立的,无论是代码,文件还是资源都是和app分开的

参考:关系链
https://developers.weixin.qq.com/minigame/dev/tutorial/open-ability/open-data.html
https://segmentfault.com/a/1190000015034592
参考:白鹭对接:
http://developer.egret.com/cn/github/egret-docs/Engine2D/minigame/openDataContext/index.html

1.把开发的项目和开放域

想象成是两个完全独立的部分,或者把开放域想象成一个沙箱

2.如何沟通

A.项目下向开放域发送数据

发送的参数是不固定的,command是egret demo写好的沟通key,其他参数随便增减

platform.openDataContext.postMessage({
    x: this.scroller.x,
    y: this.scroller.y,
    date: new Date(),
    command: "offset"
});
B.开放域中的接收
function addOpenDataContextListener() {
  wx.onMessage((data) => {
    if (data.command == 'offset') {
      offset.x = data.x;
      offset.y = data.y;
    }
  });
}
C.开放域不能向项目发送任何信息

也就是说主从关系是单向的

2.更新自己的信息

发送的数据格式已经写明,数据格式必须正确,可以包含多个,每个obj中只包含一个key,一个value

此为和服务器沟通,不和开放域沟通

let kvData = [{key: "score", value: String(score)}];
wx.setUserCloudStorage({KVDataList:kvData, success:(re)=>{
  // if(debug&DM.log) console.log("[wx]success",re);
},fail:(re)=>{
  // if(debug&DM.log) console.log("[wx]fail",re);
},complete:(re)=>{
  // if(debug&DM.log) console.log("[wx]complete",re);
}});

3.开放域下获取好友数据

  • 记住获得好友的kv数据的keyList必须是你提交的key中的值,可多个,如果不存在则列出来的好友列表kv数据是空的

此为和服务器沟通

wx.getFriendCloudStorage({
    keyList:["score"],
    success:res => {
    }
});

4.如何排序

在success中对res数据进行排序

function preloadFriendData(){
  wx.getFriendCloudStorage({
    keyList:["metreMax"],//,"metreNow","update_time"
    success: res => {
      let data = res.data
      data.sort((a,b)=>{
        let am = getKV(a,"metreMax");
        let bm = getKV(b,"metreMax");
        if(isLog) console.log('[wx]compare',am,bm);
        if(am>bm){
          return -1;
        }else if(am

5.如何更改开放域的大小和位置

  • 因为在白鹭下的位置是绘制的bitmap位置,所以很好处理。
  • 更改开放域画布大小
let openDataContext:any = wx.getOpenDataContext();
let sharedCanvas:any = openDataContext.canvas;
sharedCanvas.width = 300;
sharedCanvas.height = 250;

注意调整画布位置和大小后,原有点击算法无效了,需要自己按照信息去修改

6.扩展按钮

原白鹭demo按钮处理是记住位置点,这里你小处理一下,做成一个集成

function context_drawButton(imgage,x,y,width,height,func{
  context_drawImage(image, x, y, width, height);
  let obj = {l:x,r:x+width,t:y,b:y+height,func:func};
  poolBtnInfo.push(obj);
}

然后在 function onTouchEnd(event) {中进行适配

总结

  • 因为开发小程序小游戏本身就限制了大小,所以开放域的开发尽量不要使用额外的库扩展,按照原生api一点一点调试,还好每次改动微信开发者工具内跑的项目都会刷新
  • res加载是需要时间的,如果res加载完毕之前调用渲染,资源是空的(白鹭的demo)
  • 滚动翻页就别想了,效率性能都不会好,所以在做好友排行榜要不就只一页,要不就做分页(白鹭demo)

你可能感兴趣的:(微信好友排行榜 - 白鹭对接)