来回切换场景后,获取不到UI组件。

场景2脚本
cc.Class({
extends: cc.Component,

properties: {
    tXT:cc.Label,
},

onLoad: function () {
    cc.vv.socket.emit("demo",'你好');

    var self = this;
    //初始房间状态
    cc.vv.socket.on("demoinfo",function(data){
        cc.log(data);
        //房间设置
        self.SET_Config(data);
    })
},

SET_Config(info){
    cc.log(info);
    this.tXT.string = info;
},

cs2()
{
    cc.director.loadScene("cs1");
},

});

场景一脚本
cs2()
{
cc.director.loadScene(“cs2”);
},

服务端
socket.on(“demo”,function(info){
that.sockets.emit(“demoinfo”,info);
})

来回切换场景,报错获取不到UI组件,头疼

你需要在场景切换时,将cc.vv.socket.on("demoinfo“)的监听给移除 。
你的场景切走的,旧场景节点被释放了,再切换回来时,你的脚本还会收到demoinfo消息,这时已经是无效节点了。

多谢兄弟,我这是一个棋牌,某个用户退出了,服务端清掉了此房间用户信息,下发给客户端其他人,这些消息客户端都收得到,但桌子没刷新,还得手动在代码里最上头初始状态,UI里的状态好像不行。

具体逻辑我不太清楚,你可以尝试下面的方案

SET_Config(info){
    cc.log(info);
    //检查组件是否在效
    if(!this.tXT.isValid) {
        //在这里移除网络事件监听
        cc.vv.socket.off("demoinfo")
        return;
    } 
    this.tXT.string = info;
},

移除监听,这个可以了,我在切换场景时OFF了。我的默认UI组件状态都是在界面上设置好了显藏。用代码再设置一次有些麻烦。

客户端收到了服务端发来的有用户退出后的消息。为啥桌面就是不刷新呢。我底下有重置UI组件。

搞定了,初始放下面接收信息地方就可以了。非常感谢。

又遇到了个问题,就是客户端发个消息到服务端,服务端传回四张牌,我用预制体动态添加展示出来了。然后我按发第五张牌,服务器给了第五张牌,客户端显示了五张牌的同时,也显示了前面四张牌。怎样清掉前面这四张牌啊。http://forum.cocos.com/t/topic/56112