微信关系链:LayaAir引擎针对微信小游戏好友关系链实现方案

这里是微信小游戏关于好友关系链的说明:https://developers.weixin.qq.com/minigame/dev/tutorial/open-ability/open-data.html
在LayaAir引擎里也支持微信小游戏关系链的使用,具体使用方式在官方提供的适配库里也给出了接口初始化说明,
MiniApdter.init的第二个参数设置成true,就是是否把当前环境初始化为开发数据域(适配库里写的是子域,概念是同一个)。
 
根据微信文档的说明,主域跟开发数据域代码是分离的,也就是说他们代码之间不能互相调用,具体更多限制请认真阅读文章,现在改成在具体的使用说明:
主域:
public class LayaUISample {

public function LayaUISample() {
//微信小游戏适配库初始化
MiniAdpter.init(true,false);
//初始化引擎
Laya.init(640, 480,WebGL);
Laya.stage.scaleMode = Stage.SCALE_FIXED_HEIGHT;
Laya.stage.bgColor = "#ffffff";
if (Browser.onMiniGame)
{
Laya.timer.once(1000, this, function():void{
//设置共享画布大小
__JS__('sharedCanvas').width = Laya.stage.width;
__JS__('sharedCanvas').height = Laya.stage.height;
//主域往子域透传消息
__JS__('wx').postMessage({type:"resizeShared",url:"",data:{width:Laya.stage.width,height:Laya.stage.height,matrix:Laya.stage._canvasTransform},isLoad:false});
});
}
//激活资源版本控制
beginLoad();
}

private function beginLoad():void {
//加载引擎需要的资源
Laya.loader.load("res/atlas/comp.atlas", Handler.create(this, onLoaded));
}

private function onLoad2():void
{
Laya.timer.once(2000, this, onLoaded);
}

private function onLoaded():void {

//实例UI界面
//var testView:TestView = new TestView();
//Laya.stage.addChild(testView);
//
//return;
Laya.timer.once(3000, this, function():void{
var sprite:Sprite = new Sprite();
sprite.pos(0, 0);
var texture:Texture = new Texture(Browser.window.sharedCanvas);
texture.bitmap.alwaysChange = true;//小程序使用,非常费,这个参数可以根据自己的需求适当调整,如果内容不变可以不用设置成true
sprite.graphics.drawTexture(texture, 0, 0, texture.width, texture.height);
Laya.stage.addChild(sprite);
});
}
}
开发数据域:
public class LayaUISample {

public function LayaUISample() {
//微信小游戏适配库初始化
MiniAdpter.init(true,true);
//初始化引擎
Laya.init(640, 480);
Laya.stage.scaleMode = Stage.SCALE_FIXED_HEIGHT;
Laya.stage.bgColor = "#ffffff";

//激活资源版本控制
MsgMgr.instance.init();
Laya.timer.once(1000,this,function():void{
beginLoad();
});
}

private function beginLoad():void {
//加载引擎需要的资源
Laya.loader.load("res/atlas/comp.atlas", Handler.create(this, onLoaded));
}

private function onLoaded():void {
//实例UI界面
var testView:TestView = new TestView();
Laya.stage.addChild(testView);
}
}
开发数据域接收主域透传消息处理类:
/**
* 事件派发监听管理类
* author xiaosong
* @date 2017-02-26
*/
public class MsgMgr
{
/**共享画布类型**/
public static var SHAREDRESIZE:String = "sharedresize";
private static var _i:MsgMgr = null;
public function MsgMgr()
{
super();
}
public static function get instance():MsgMgr
{
return _i ||= new MsgMgr();
}

/**初始化消息监听**/
public function init():void
{
//接收主域透传的数据
if(MiniAdpter.isZiYu && MiniAdpter.isPosMsgYu)
{
__JS__('wx').onMessage(function(message:Object):void{
trace(message);
if(message['isLoad'] == "filedata")
{
MiniFileMgr.ziyuFileData[message.url] = message.data;//文本数据
}else if(message['isLoad'] == "filenative")
{
//子域接收主域传递的文件信息
if(message.isAdd)
MiniFileMgr.filesListObj[message.url] = message.data;
else
delete MiniFileMgr.filesListObj[message.url];
}else if (message['type'] == "resizeShared")
{
__JS__('sharedCanvas').width = message.data.width;
__JS__('sharedCanvas').height = message.data.height;
var tempMatrix:Object = message.data.matrix;
var matrix:Matrix = new Matrix();
matrix.a = tempMatrix.a;
matrix.b = tempMatrix.b;
matrix.c = tempMatrix.c;
matrix.d = tempMatrix.d;
Laya.stage._canvasTransform = matrix;//重新设置矩阵
}
});
}
}

}
代码运行成功后在主域里可以绘制LayaAiride的UI示例,包括list列表。按钮点击等交互;
附近里上传了AS3代码示例,以及JS运行示例,有不明白的开发者欢迎留言。
压缩包说明:
AS3示例:
main1 主域项目;
main2 开发数据域项目;
main_minigame 微信项目;
已邀请:
这是官方答复的吗?官方为何不在技术文档那里更新,怎么在论坛里发表文章……

laya_Aaron

赞同来自:

非常清晰明了的文档,感谢题主

DemonWu

赞同来自:

我基于这个进行修改成TS版本的,List不能进行滑动

DemonWu

赞同来自:

这是DEMO,用的1.7.19类库

qq771472501

赞同来自:

感谢  原来我的项目一直报window的错误  现在知道了  少加了一个js文件

小数点_

赞同来自:

__JS__未定义,这个要怎么解决呢?
[img]https://img.layabox.com/questi ... c.PNG[/img]

Charles

赞同来自:

您好,请问开放域项目中取图集里的资源报错是怎么回事?
Uncaught TypeError: wx.getFileSystemManager is not a function
 

159*****656

赞同来自:

这个在
Laya.stage.scaleMode = "showall"模式下,还是不能滑动!其他模式都没有问题。

明天当男神

赞同来自:

不得不说一句,shareCanvas的宽高必须在主域里设置,不能像楼主写的在子域设置,否则设置无效果,适配不起作用。

zhou_xq

赞同来自:

[size=14]shareCanvas宽高怎么设的?[/size]

 

要回复问题请先

商务合作
商务合作