场景使用全局变量socket, 再次调用场景后,socket.on{}中调用当前场景中的结点报错

使用全局变量socket, 再次调用某一场景时,socket.on{}中调用当前场景中的结点报错,但是,socket.on{}之外的场景结点调用则没用任何问题。
scene1(socket连接)-> scene2(普通场景)->scene3(包含socket.on(){}语句的场景结点调用,设置) 然后返回到scene2,再次进入场景3,socket.on{}调用场景结点出错,而在socket.on{}之外的场景结点调用,没有问题.
出错提示:
Uncaught TypeError: Cannot read property ‘getChildByName’ of null
at r.socket.on.data (:7456/scripting/x/mo…cripts/3scene.js:62)
at r.emit (:7456/socket.io/socket.io.js:6)
at r.onevent (:7456/socket.io/socket.io.js:8)
at r.onpacket (:7456/socket.io/socket.io.js:8)
at r. (:7456/socket.io/socket.io.js:8)
at r.emit (:7456/socket.io/socket.io.js:6)
at r.ondecoded (:7456/socket.io/socket.io.js:6)
at a. (:7456/socket.io/socket.io.js:8)
at a.r.emit (:7456/socket.io/socket.io.js:6)
at a.add (:7456/socket.io/socket.io.js:6)

  • Creator 版本: <3.4.2>

  • 目标平台: <谷歌浏览器>

  • 重现方式:

  • 重现概率: <100%>

很明显是有空对象,某一点节点在场景切换之后被释放掉了,但是你的监听还在引用。

我不是又重新进入到这个场景了吗,这个场景的所有资源又被重新加载了,而且socket.on{}之外的当前程序文件中调用当前场景的语句就没有这个问题。问题好像只存在于socket.io的语句中。

资源重新加载了,但是它们在内存中的地址已经变了,你on注册的函数中使用的还是旧的,而其他地方已经变成了新的,你重新加载场景后应该重新注册。

请问,怎么重新注册?我这个socket是一个全局变量。不懂。谢谢

重新执行一下socket.on注册的逻辑。但是为什么socket的注册函数中会有UI节点,这本身就是不合理的。可以贴个代码看看具体该怎么改。

谢谢,我已经修改代码,把ui节点的相关数据移出的socket函数,另外我也发现,如果定义数组,并初始化,如果在socket函数中调用,也会出这种问题,如果将初始化数据也放入socket函数,就可以。所以,我修改代码后,尽量让socket函数只处理必要数据,涉及节点的,除非在socket函数内创建的,一律不在socket函数内调用,这样就没有问题了。非常感谢您的帮助。