1. 程式人生 > >關係鏈資料

關係鏈資料

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()