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

2019-01-05  本文已影响473人  伏波Rinnsio1xy

目前用的版本是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)
        })
    },

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

上一篇下一篇

猜你喜欢

热点阅读