由于小游戏开放数据域是独立的,无论是代码,文件还是资源都是和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)