美文网首页
CocosCreator-【微信小游戏】子域排行榜卡顿优化,不能

CocosCreator-【微信小游戏】子域排行榜卡顿优化,不能

作者: 伏波Rinnsio1xy | 来源:发表于2019-01-05 16:09 被阅读473次

    目前用的版本是2.x的2.0.6, 官方对微信小游戏的子域的使用方式和1.x有所变化。可以去看看官方文档。
    那我们这个笔记解决什么问题呢,因为坑啊!卡啊!子域排行界面残留!滑动问题只要主域的微信显示节点下文的
    subCanvas加入组件(cc.WXSubContextView)就可以滑动了,我这个问题是原因是用的早期的1.x的方式显示子域才有
    这个问题。

    一、解决子域显示

    1.主域加入一个sprite节点,命名为subCanvas
    2.给subCanvas加入cc.WXSubContextView组件
    3.子域排行正常的方式去做就好
    那么问题来了,在真机上跑,我的天,这帧率,无法接受啊。官方给出了这段说明:


    image.png

    我的处理方式:

      properties: {
            subCanvas: cc.Sprite,
      },
    
      this.subCanvas.getComponent(cc.WXSubContextView).enabled = false
      this.subCanvas.getComponent(cc.WXSubContextView).update()
    
    当这样去做的时候,打开子域排行后,关闭排行会有残留界面。这里我能想到的原因:
    当发送一个关闭的message到子域的时候,马上就调用了上面的2句代码,message 传递到子域应该是有延迟的,这就导致了子域名界面还没关闭
    主域的调用已经生效,然而这个时候cc.WXSubContextView已经不生效了,不再刷新,导致了子域的界面残留

    二、解决界面残留问题

    解决办法:延迟调用上面的代码

    /**
         * Sets the update wechat sub canvas.
         *
         * @param      {<type>}  bOn     { parameter_description }
         */
        setUpdateWechatSubCanvas: function(bOn) {
            var self = this
            cc.single.Utils.delayTime(this.node, 0.1, function() {
                if (self.subCanvas) {
                    self.subCanvas.getComponent(cc.WXSubContextView).enabled = bOn
                    self.subCanvas.getComponent(cc.WXSubContextView).update()
                }
                console.log("当前子域刷新状态:", bOn)
            })
        },
    

    延迟调用的原因是让子域接收到关闭消息,已经把所有子域的界面关闭掉了,然后再禁止掉主域的微信显示组件即可,效果是可以接收的,略微有延迟。这样在性能和排行的显示做出很好的平衡

    相关文章

      网友评论

          本文标题:CocosCreator-【微信小游戏】子域排行榜卡顿优化,不能

          本文链接:https://www.haomeiwen.com/subject/sjzrrqtx.html