目前用的版本是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)
})
},
延迟调用的原因是让子域接收到关闭消息,已经把所有子域的界面关闭掉了,然后再禁止掉主域的微信显示组件即可,效果是可以接收的,略微有延迟。这样在性能和排行的显示做出很好的平衡
网友评论