关系链数据

版权声明:转载请告知 https://blog.csdn.net/qq_27142347/article/details/83150771

https://developers.weixin.qq.com/minigame/dev/tutorial/open-ability/open-data.html
微信官网。
其中注意的点:
1.通过调用 wx.setUserCloudStorage() 可以将当前用户的游戏数据托管在微信后台。只有被托管过数据的用户,才会被视为 玩过 该小游戏的用户,才会出现在 wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 返回的对象数组中。
2.开放数据域不能向主域发送消息。
3.在开放数据域中通过 wx.onMessage() 方法可以监听从主域发来的消息。
4.如果想要展示通过关系链 API 获取到的用户数据,如绘制排行榜等业务场景,需要将排行榜绘制到 sharedCanvas 上,再在主域将 sharedCanvas 渲染上屏。
5.sharedCanvas 的宽高只能在主域设置,不能在开放数据域中设置。

在白鹭中:
自己继承platform实现一个wxPlatform,

	wxPlatform extends platform{
			//...
			opendateContext:any;
			construct()
			{
				opendateContext = new WxOpenDataContext();
			}
	}
//扩展开放域
class WxOpenDataContext{
     createDisplayObject(type, width, height) {
        let sharedCanvas = window["sharedCanvas"] as any;
        const bitmapdata = new egret.BitmapData(sharedCanvas);//sharedCavas作为BitmapData传给Texture
        bitmapdata.$deleteSource = false;
        const texture = new egret.Texture();
        texture._setBitmapData(bitmapdata);
        const bitmap = new egret.Bitmap(texture);//得到bitmap对象
        bitmap.width = width;
        bitmap.height = height;//此时设置宽高就是开放域sharedCavas的宽高

        if (egret.Capabilities.renderMode == "webgl") {
            const renderContext = (egret as any).wxgame.WebGLRenderContext.getInstance();
            const context = renderContext.context;
            ////需要用到最新的微信版本
            ////调用其接口WebGLRenderingContext.wxBindCanvasTexture(number texture, Canvas canvas)
            ////如果没有该接口,会进行如下处理,保证画面渲染正确,但会占用内存。
            if (!context.wxBindCanvasTexture) {
                egret.startTick((timeStarmp) => {
                    egret.WebGLUtils.deleteWebGLTexture(bitmapdata.webGLTexture);
                    bitmapdata.webGLTexture = null;
                    return false;
                }, this);
            }
        }
        
        return bitmap;
    }
   
    postMessage(data) {
        const openDataContext = wx.getOpenDataContext();
        openDataContext.postMessage(data);
    }
}

主域类中:

this.bitmap = platform.openDataContext.createDisplayObject(null, this.stage.stageWidth, this.stage.stageHeight);//创建bitmap的大小
this.addChild(this.bitmap);

开放数据域只能调用有限的 API,如下所示:

帧率

requestAnimationFrame()
cancelAnimationFrame()
Timer

setTimeout()
clearTimeout()
setInterval()
clearInterval()
触摸事件

wx.onTouchStart()
wx.onTouchMove()
wx.onTouchEnd()
wx.onTouchCancel()
wx.offTouchStart()
wx.offTouchMove()
wx.offTouchEnd()
wx.offTouchCancel()
画布

wx.createCanvas()
开放数据域的所有 canvas 只支持 2d 渲染模式

图片

wx.createImage()
开放数据域的 Image 只能使用本地或微信 CDN 的图片,不能使用开发者自己服务器上的图片。对于非本地或非微信 CDN 的图片,可以先从主域 wx.downloadFile() 下载图片文件,再通过 OpenDataContext.postMessage() 把文件路径传给开放数据域去使用。

开放数据

wx.getFriendCloudStorage()
wx.getGroupCloudStorage()
wx.getUserCloudStorage()
wx.setUserCloudStorage()
wx.removeUserCloudStorage()
监听主域消息

wx.onMessage()

猜你喜欢

转载自blog.csdn.net/qq_27142347/article/details/83150771