【采坑】CocosCreator 微信开放数据域 主域/子域

注:我写这篇文章的时候用的CocosCreator版本2.0.10

一、子域被拉伸

子域被拉伸的根本原因就是挂载WXSubContextView组件的节点的宽高比和子域场景的宽高比不一致

1.宽高比保持一致

官方文档有提到这点

挂载WXSubContextView组件的节点的宽高比要和子域界面的宽高比一致,子域界面不要勾选Fit Width和Fit Height

2.进行视窗更新

有时候我们要手动设置挂载WXSubContextView组件的节点的大小,这时候就需要

使用updateSubContextViewport(),如果不起作用,试试reset()

进行视窗更新一定要在发消息给子域之前


二、子域不显示

1.查看子域有没有收到主域发的消息

2.如果没收到消息

自己查找原因

3.如果收到消息

1)查看收到的消息是否正确

此条是针对子域需要根据接收的消息的不同而进行不同操作的情况

例如:根据消息的message参数进入不同的子域场景

2)查看子域的代码是否全部执行

此条是针对主域有禁用WXSubContextView的操作的情况

我遇到的情况是:

this.wxSubContextView.getComponent(cc.WXSubContextView).enabled = false;
wx.postMessage({
    message: "mapRank",
})

setTimeout(function () {
    that.wxSubContextView.getComponent(cc.WXSubContextView).update();
}, 100);

在发消息给子域的前后,如果我们禁用组件,那么子域的代码有可能只会执行一半就不会再执行了,然后就造成子域不显示的问题

要确保子域代码执行完毕之后再禁用WXSubContextView组件

4.查看位置和层级是否正确

有时候可能子域确实显示出来了,可能是位置不对,不在屏幕的范围内;或者被其他节点完全遮住了,导致我们并没有看见子域画面


三、挂载WXSubContextView组件的节点无法设置位置

我的情况是直接用setPosition()设置挂载WXSubContextView组件的节点的位置并没有什么用,不知道是为什么,具体的情况我也没仔细研究,这里只说一下我的解决方法:

我直接设置挂载WXSubContextView组件的节点的父节点的位置,这样就能让这个节点位置改变了


四、包体过大

这一问题,是我在微信开发工具想要真机调试/预览的时候遇到的问题。

因为我一开始做的时候并没有注意微信对包体的大小有限制

解决方法,分包加载、引擎模块裁剪,资源部署到服务器

五、子域接收到多条消息

这一问题,是我在子域接收消息的把最后一个else写上的时候发现的

wx.onMessage(data => {
    if (data.message == "main") {
        console.log('收到的数据', data);
        if (data.openid) {
            global.openid = data.openid;
        }
    }
    else if (data.message == "mapRank") {
        console.log('收到消息','mapRank');
        cc.director.loadScene('mapRank');
    }
    else if (data.message == "levelRank") {
        console.log('收到消息','levelRank');
        cc.director.loadScene('levelRank');
    }
    else{
        console.error("message参数不正确!");
    }
})

我加上最后一个else之后,发现每次都会打印多条“message参数不正确!”的报错语句。

更惊奇的是,当把发消息的语句注释掉的时候,子域任然能接收到消息,输出报错语句。

我也不知道什么原因,在浏览Cocos论坛时发现有人遇到同样的问题,但官方没有给出答复

https://forum.cocos.org/t/onmessage/71891/8

猜你喜欢

转载自blog.csdn.net/weixin_41786574/article/details/103163471