用LayaAir可以非常方便的开发微信小游戏。但是微信为了防止开发者收集玩家的好友信息,搞了一个开放数据域OpenDataContext来提供有限制的好友功能。 可以把微信的开放数据域理解成一个阉割的程序环境,在域中开发者不能调用文件系统的功能,没有联网功能。只能通过微信提供的相关API来获取好友数据,然后绘制到一张shardeCanvas上, 主域通过这个共享画布来展示玩家的好友信息。
微信好友关系链的介绍:https://developers.weixin.qq.com/minigame/dev/tutorial/open-ability/open-data.html
LayaAir开发好友链的方式: https://ask.layabox.com/question/15086
用LayaAir开发好友、排行榜功能时,有很多坑需要注意。
1. 子域无法显示主域里的图集资源。
主域和子域都需要加载该图集才能正常显示。监听主域发来的消息,当主域加载图集时,会发送一个message.isLoad='filedata'的消息,只有执行了MiniFileMgr.ziyuFileData[message.url] = message.data;这行代码,子域才能正确显示图片。(写监听代码时,务必写正确, filedata 都是小写,我就因为有个字母大写了,造成没进判断。半天显示不出来图)
if(MiniAdpter.isZiYu && MiniAdpter.isPosMsgYu)
{
__JS__('wx').onMessage(function(message:Object):void{
trace(message);
if(message['isLoad'] == "filedata")
{
MiniFileMgr.ziyuFileData[message.url] = message.data;//文本数据
}
2. 在子域里使用List组件的滚动功能时,会报错。 我们一把设置List的vScrollBarSkin,或hScrollBarSkin 为''", 来让list可以滚动,但是在子域里要报错。 是因为我的LayaAir引擎比较老(1.17版), 需要在子域的Image类里,改点代码:
public function set skin( value:String):void
{
if( value=="''" || value == '""')
{
this.source = null;
return;
}
3. 子域 bitmap._addReference() 报错, 也是因为版本太老, 需要更新到最新引擎。 或则自己手动加个判断, 判下bitmap._addReference是否为null
4. 子域里 鼠标响应偏移,不能点中按钮。 我们一般是把子域显示在一个sprite容器上,但是子域的坐标系统也是从屏幕左上角开始算的。 需要重新new一个Matrix,重新设置子域的 Laya.stage._canvasTransform