标签: 微信小游戏,开放域


微信小游戏-开放数据域的配置

概念

开放数据域 是一个封闭、独立的 JavaScript 作用域。开放数据域主要作用就是获取用户的关系链数据,并且展示关系链数据
具体使用方法在官方文档已经非常详细了-》开放数据域本文只是做一个简单整理
具体的展示关系链数据

配置方法

1、新建开放数据域的代码目录,以openDataContext为例,在目录下新建index.js作为开放数据的入口文件
2、在game.json中添加配置项 openDataContext

{"deviceOrientation": "portrait","openDataContext": "src/openDataContext"
}

开放数据域限制

1、主域和开放数据域中的代码不能相互 require
2、wx.getUserCloudStorage、wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 只能在 开放数据域 中调用。
3、wx.setUserCloudStorage() 和 wx.removeUserCloudStorage() 可以同时在 主域 和开放数据域中调用。
4、开放数据中不能修改sharedCanvas的宽高,如有需要,请在上屏canvas修改sharedCanvas的宽高
5、sharedCanvas只能被上屏canvas渲染
6、开放数据域不能向主域发送消息
7、sharedCanvas 不能调用 toDataURL 和 getContext。
8、开放数据域的所有 canvas 只支持 2d 渲染模式
9、开放数据域的 Image 只能使用本地或微信 CDN 的图片,不能使用开发者自己服务器上的图片

主域限制

1、主域不能调用wx.getUserCloudStorage、wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() ,也就是说主域不能直接获取用户关系链数据,必须通过开放数据域获取,再渲染到sharedCanvas上

主域和开放数据域的通信

开放数据域不能向主域发送消息,主域可以调用开放数据域实例的postmassage()方法向开放数据域发送消息

// main.js
let openDataContext = wx.getOpenDataContext()
openDataContext.postMessage({text: 'hello',year: (new Date()).getFullYear()
})

在开放数据域中通过 wx.onMessage() 方法可以监听从主域发来的消息。

// src/openDataContext/index.js
wx.onMessage(data => {console.log(data)/* {text: 'hello',year: 2018} */
})

微信小游戏 —— 关系链数据使用(排行榜的显示)

前言

微信小游戏属于微信小程序的一个类目,小游戏对比于普通的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/OpenDataContext/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:

//前提是要使用Wxkit
let openDataContext = this.linkOpenData({},"这里传宽度","这里传高度");
this.openDataContext = openDataContext;
this.addChild(openDataContext)

实际操作

首先把你的项目发布为微信小游戏项目


之后会报错误,这里不用管就行了
然后在mian.js里面加代码

public createGameScene(){//本来的代码//发信息给开放域,加载数据let openDataContext = wx.getOpenDataContext()openDataContext.postMessage({text: 'hello',year: (new Date()).getFullYear(),command:'loadRes',})let that = this;//这里是让开放域的数据先加载好setTimeout(function() {//调用linkOpenData方法let openData = that.linkOpenData({},that.stage.width,that.stage.height);that.addChild(openData)}, 2000);
}//添加方法public  linkOpenData(message: {}, width?: number, height?: number, data?: Object) {console.log('调用开放数据域')let basic = {isRanking: false,text: "egret",data: data,year: (new Date()).getFullYear(),command: "open"}for (let key in message) {basic[key] = message[key];}let open_data_container = new egret.Sprite();let openDataContext = wx.getOpenDataContext();const bitmapdata = new egret.BitmapData(window["sharedCanvas"]);bitmapdata.$deleteSource = false;const texture = new egret.Texture();texture._setBitmapData(bitmapdata);let bitmap: egret.Bitmap;bitmap = new egret.Bitmap(texture);bitmap.width = width || 0bitmap.height = height || 0bitmap.name = "openData";open_data_container.addChild(bitmap);console.log(bitmap.width + '   ' + bitmap.height)egret.startTick((timeStarmp: number) => {egret.WebGLUtils.deleteWebGLTexture(bitmapdata.webGLTexture);bitmapdata.webGLTexture = null;return false;}, this);openDataContext.postMessage(basic);console.log('link_done');return open_data_container;}

运行项目,就有egret本来帮你写好的开放域demo

作者简介:何永峰,芦苇科技web前端开发工程师,喜欢到处寻找好吃的,平时爱好是跳舞,打篮球,听音乐,有时会出席一些大型的舞蹈商演活动,目前是Acum.Revolution現狀革命成员之一。并且代表作品:萌鸡驾到、美旅出行小程序、电竞桌子小程序。擅长网站建设、公众号开发、微信小程序开发、小游戏、公众号开发,专注于前端领域框架、交互设计、图像绘制、数据分析等研究,访问 www.talkmoney.cn 了解更多。

微信小游戏开放域之helloworld相关推荐

  1. CocosCreator微信小游戏开放域使用(排行榜)

    CocosCreator官方文档 微信小程序开放域官方文档 实现步骤: 单独创建一个开放域项目,并设置接收消息方法 const { ccclass, property } = cc._decorato ...

  2. LayaAir 绘制微信小游戏开放数据域画面

    LayaAir 绘制微信小游戏开放数据域画面 请大家关注我的微博:@NormanLin_BadPixel坏像素 之前写过用cocosCreator绘制微信小游戏子域的教程,保持整体思路不变,现在再写一 ...

  3. 微信小游戏|开放数据域的写与读

    本文来自Cocos官方论坛,感谢「达闻西」的分享! 1. 引言 本来是自己写的笔记,想想还是发出来把,能让不少新手少走弯路,毕竟自己也是摸索了好久!以图片的形式,让大家更直观点! 微信小游戏API官方 ...

  4. 微信小游戏开放测试~

    " 小程序游戏类目开放测试,开发者可开发.调试小游戏.同时,对小游戏开放微信社交关系链.虚拟支付能力." 01 - 小游戏开放测试 开发者注册小程序帐号后可选择"游戏&q ...

  5. pixijs微信小游戏排行榜开放域开发

    关于微信小游戏开放域的基本概念本文不作介绍请去微信官文文档阅读: 主域: 在这你有几件事要作,第一准备好给离屏canvas用的容器:第二作好离屏canvas事件交互,比如切换菜单/关闭窗口:第三循环里 ...

  6. CocosCreator微信小游戏排行榜及开放数据域的理解与使用

    微信小游戏开放数据域及排行榜的使用 好久没有写博客了,距离上一次博客,已经有了近半年之久,这段时间发生了太多的事,当然,这些不是今天的主题,接下来我们主要讲一讲微信小游戏开放数据域的使用,以及如果制作 ...

  7. 微信小游戏凭什么拿走开发者 70% 的日流水?

    作者 | 屠   敏 责编 | 唐小引 一年多前,张小龙在微信公开课 PRO 上正式宣布小程序的到来,彼时大批的创业者开始在 O2O 服务.电商.制作平台.周边服务等运营模式中探索小程序的红利场景.经 ...

  8. 微信小游戏越来越「重」,但它能赚钱么?

    氪金.直播.上 3D,小游戏已经不「小」了. 说起微信小游戏,外界总会有几个刻板标签. 比如,小游戏只能玩轻度游戏,「跳一跳」.「欢乐斗地主」是典型:小游戏不温不火,「跳一跳」之后似乎再无全民话题的爆 ...

  9. CocosCreator | 微信小游戏排行榜 微信开放域

    更多笔记和源码请关注:[微信公众号] CocosCreator笔记 演示 技术摘要 主域工程 微信授权 创建子域节点 向子域发送消息 子域工程 读写用户云托管数据 接收主域发送的消息 构建运行 实现 ...

最新文章

  1. 使用Vue动态生成form表单的实例代码
  2. python读文件路径-python获取程序执行文件路径的方法(推荐)
  3. Web服务器、Servlet和Servlet容器
  4. json从立地到成佛
  5. [NOIP2006] 数列
  6. Fastai-数据准备
  7. c++ 获取数组的长度
  8. AE一键快速生成MG爆炸图形动画插件:Burst Box for Mac
  9. Week06-接口、内部类
  10. 【数据结构----笔记5】插入排序算法之【希尔排序算法】
  11. android防止左向右滑出程序,Android向右滑动关闭Activity(高仿知乎微信)
  12. jQuery - 获取内容和属性
  13. php数组的奇数_PHP - 查找数组元素是奇数还是偶数
  14. 工具使用教程(四) 【VSCode使用教程】
  15. 敏感词检测理论算法过程
  16. 神经网络预测地震加速度反应谱曲线,pytorch实现
  17. 2022年5月17日 点扩展函数的matlab仿真学习
  18. 更改访问局域网win7计算机的用户,win7局域网共享设置 win7局域网共享设置方法...
  19. IPSC和IPSC衍生细胞
  20. PyTorch深度学习(18)网络结构LeNet、AlexNet

热门文章

  1. [esp32] Guru Meditation 错误解析及解决方案
  2. 【Arduino+ESP32专题】PlatformIO编程ESP32 Guru Meditation Error错误溯源
  3. 项目团队中的持续改进、PDCA实践
  4. huggingface transformers实战系列-05_文本生成
  5. 武田将在美国血液学会第60届年会上呈报各类血液肿瘤治疗需求数据
  6. 抓包工具Charles(青花瓷)使用教程!
  7. Python之CMDB资产管理系统
  8. 图像处理开源软件代码网站汇总(提供下载链接)
  9. Ufida U8v10.1 安装到sqlserver2008R2 故障转移集群
  10. c语言程序判断32位还是64位,c++ 判断是64位还是32位系统的实例