微信小游戏排行榜卡顿或无法滑动

微信小游戏为了保护其社交关系链数据,增加了子域的概念,子域又叫 开放数据域,是一个单独的游戏执行环境。子域中的资源、引擎、程序,都和主游戏完全隔离,开发者只有在子域中才能访问微信提供的 wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 等API,用于实现一些例如排行榜的功能。
 

在我们制作子域过程中,会出现排行榜显示时,内存损耗会很高,官方给出的解释是:当开放数据域被唤起后,只要 WXSubContextView 组件 load 成功,开放数据域贴图就开始更新到主域并显示,之后每帧都会更新贴图。但是开放数据域贴图的更新有时可能损耗比较高,开发者设计的开放数据域又是静态界面(比如翻页式的界面),此时就不需要每帧更新贴图,可以尝试通过禁用组件来阻止每帧更新逻辑,并通过手动调用 update 函数来在需要的时候更新:

subContextView.enabled = false;
subContextView.update();

这样手动控制是性能最优的方案

 

事实上我们子域的scrollView组件会出现无法滑动也差不多是这个原因,在我们在主域关闭排行榜的时候,主域的虽然关掉了wxSubContextView组件,但是传递到子域会有延迟,这就导致了子域界面还没关闭主域的调用已经生效,但是这时的cc.WXSUBContexView已经不生效了,不会刷新,就会导致子域的界面残留,而我们再次打开排行榜的时候就出现了排行榜无法划动,

   解决方案:

         加一个延时

setUpdateWechatSubCanvas: function(boolValue) {
    var subContex=this.node.getChildByName('wxSubContex');
    setTimeout(function() {
        if (subContex) {
            subContex.getComponent(cc.WXSubContextView).enabled =boolValue;
            subContex.getComponent(cc.WXSubContextView).update();
        }
    },200);
},

在关闭或打开排行榜的时候调用该函数,排行榜就可以正常滑动了

     

发布了19 篇原创文章 · 获赞 6 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览