关于微信小游戏关系链的问题

微信小游戏推出了获取关系链的接口,但是架构会有调整,包括新的代码目录,入口文件,额外的canvas画布。请问下咱们laya这边有时间表去支持这些新特性么?
已邀请:

186*****260

赞同来自: Rickshao qq771472501 YIF

没理解.2个项目怎么合并到一个微信小游戏?官方能给个demo吗?

Rickshao

赞同来自: qq771472501 itachi1d YIF

如果开放数据域也用一个Laya工程来做的话,因为包含了laya.core.js,所以导出的代码一开始就附图所示
TIM图片20180329105405.png

有一个window,在开放数据域里是拿不到的,所以单独用一个工程去做开放数据域的话,如何导出呢?

186*****260

赞同来自: Rickshao qq771472501

 Laya.timer.once(4000,this,function(){
console.log(Browser.window.sharedCanvas)
      var rankTexture=new Texture(Browser.window.sharedCanvas);
      rankTexture.bitmap.alwaysChange=true;
console.log(rankTexture)
      LayaUISample.scoreview.graphics.drawTexture(rankTexture,5,78,rankTexture.width,rankTexture.height);
    });

var rankTexture=new Texture(Browser.window.sharedCanvas);
这里报错
VM13215:1 gameThirdScriptError
bitmap._addReference is not a function
TypeError: bitmap._addReference is not a function

xiaosong

赞同来自: 188*****860 十字寒鸦

这里是微信小游戏关于好友关系链的说明:
https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/open-data.html
 
在LayaAir引擎里也支持微信小游戏关系链的使用,具体使用方式在官方提供的适配库里也给出了接口初始化说明,
MiniApdter.init的第二个参数设置成true,就是是否把当前环境初始化为开发数据域(适配库里写的是子域,概念是同一个)。
 
根据微信文档的说明,主域跟开发数据域代码是分离的,也就是说他们代码之间不能互相调用,具体更多限制请认真阅读文章,现在改成在具体的使用说明:
 
主域:
MiniApdter.init(true)
Laya.init(1280,720,WebGL);
//通过消息透传通知开发数据域sharedCanvas的尺寸大小,以及缩放比例信息
wx.getOpenDataContext({url:"",data:{type:"resizeShared",width:Laya.stage.width,height:Laya.stage.height,matrix:Laya.stage._canvasTransform},isLoad:false});
 
//显示开发数据的内容,需要延迟处理,因为主域跟开发数据域同时初始化,可能碰巧赶上主域先调用,开发数据域或调用,导致内容不显示
Laya.timer.once(400,this,function():void{
var rankTexture:Texture = new Texture(Browser.window.sharedCanvas);
rankTexture.bitmap.alwaysChange = true;//小游戏使用,非常费,每帧刷新
rankSprite2.graphics.drawTexture(rankTexture,5,78,rankTexture.width,rankTexture.height);
});
 
 
 
开发数据域:
MiniAdpter.init(true,true);
Laya.init(1280,720);//标注:开发数据域不支持webgl模式,只能运行canvas模式,微信小游戏限制
__JS__('wx').onMessage(function(message:Object):void{
//通过接收主域的消息来设置开发数据域的画布大小跟矩阵信息
__JS__('sharedCanvas').width = message.data.width;
__JS__('sharedCanvas').height = message.data.height;
trace("-----------------sharedresize----------------------------");
trace(message.data.matrix);
Laya.stage._canvasTransform = message.data.matrix;//重新设置矩阵
});
//开发数据域添加一张图片
var image:Image = new Image();
image.skin = "a.png";
Laya.stage.addChild(image);
 
 
以上是基本用法,具体开发数据域的限制请参考官方的文档,这里只列出了具体的使用说明

lvming1983

赞同来自:

那这个怎么发布呢?是需要建立两个项目,分别作为主域和开放数据域,各自去MiniAdpter.init和Laya.init.然后通过post传递消息?

185*****367

赞同来自:

这样确实还不太明白,如果分2个项目,那就太复杂了。光代码就占将近3M了。

xiaosong

赞同来自:

没办法,就是要这样做的

andydufresne

赞同来自:

game.json里面添加"openDataContext": "openData",开放数据域的代码都放在openDat目录下index.js里
开放数据域的话,其实就不要用框架了,直接对canvas进行操作吧,不然可能代码体积太大了

xiaosong

赞同来自:

在开发数据域里的环境参数跟在主域里的参数是一样的,变量应该都可以获取的,只是微笑对主域跟开发数据域做了执行上的隔离!你看看是不是哪里搞错了

haseef520s

赞同来自:

gameThirdScriptError
bitmap._addReference is not a function;at setTimeout callback function
TypeError: bitmap._addReference is not a function
 
直接复制你代码报这个错  难道你的不报?

xiaosong

赞同来自:

外网版本1.7.17版本报错,需要手动处理下,在var Texture类里,加个判断,判断代码:
if(bitmap&& bitmap._addReference)
   bitmap._addReference();
 
下个版本修复这个bug
 
 
https://ask.layabox.com/question/13181这里是最详细的地址

沧海一粟

赞同来自:

MarkMark

水木清澄

赞同来自:

MarkMarkMark

要回复问题请先

商务合作
商务合作