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

微信小游戏为了保护其社交关系链数据,增加了子域的概念,子域又叫 开放数据域,是一个单独的游戏执行环境。子域中的资源、引擎、程序,都和主游戏完全隔离,开发者只有在子域中才能访问微信提供的 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);
},

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

     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值