新开一局游戏node莫名变成null了,查不到原因,求助

新提问:什么情况下一个node会变成null?
我的出问题的代码的工作逻辑是这样的:在node A下创建一堆prefab为子节点,然后点按钮进行各种游戏过程后把这些子节点给destory掉。期间我有个大概不是很好的做法,就是cocos的destroy不是实际上是延迟进行的么,我发觉直接destroy会影响我的逻辑,就先把这些子节点给挂到另一个空节点node B上,然后在那里做destory的操作。运行下来,在游戏进行的过程中没有出现问题,重开新一局的时候,一开始创建prefab的时候依然没问题,但是当我第一次点按钮进行游戏时,这个node A和node B就突然变成null了。

这个我就不是很理解了,我很确定在我点击那个按钮后,进行的都只是数据层的计算,没有操作过UI上的东西,怎么会在重开一局游戏的时候,在这个过程中把node给变成null呢?

以下是原提问,但应该是问错了,可以忽略了

可能我的代码写的有点乱的缘故,一个node本来是有很多可爱的孩子node,正常游戏的时候也没问题,但重开一局的时候,这位伟大的父亲node就被绝后变成null了。我肉眼查了半天不知道问题在哪儿,在想如果有办法跟踪变化打印log出来,就能找到犯罪现场了。如果是普通的值的变化,那eventlistener就行,但这种node的操作,有什么办法监听打log么?

更新:
我感觉好像是我理解错误我的报错了,如果有下面这条报错的话,是不是意味着不是子节点被删除了,而是那个父节点奇怪的变成了null?我的意思是,父节点不是一个‘没有子节点的节点’,而是就一个null,艹,这又是怎么搞的。。。
Uncaught TypeError: Cannot read property ‘childrenCount’ of null

这是英语,用的机器翻译成的中文吗?

cc.Node.prototype.onDestory = function() {log(xxxx)}
大概这么个意思 就是重载下Node的销毁方法 你试试行不行

哈哈,我只是想写的好玩一点,没想到读起来竟然是这个赶脚

我试试看,刚才我也想到一个办法,就是监听childrenCount的变化,这样貌似eventlistener那种就可以用了。但想了下还是不够,就是。。。怎么能看出是哪儿的代码做了这件事呢?要是能打印出是哪里的代码造成了这个不管是childrenCount还是你建议的destroy,就好了。

打上断点,调试一下,就能知道哪里是空了

断点打了,但真没找到哪里操作了。

我现在怀疑是不是注册的自定义事件未清除造成的?我去清一下事件试试看先。

我去,我把事件监听的方式从xxxx.on(“aaaa”, (value: boolean) => {//做了一些事情});
改成
xxxx.on(“aaaa”, this.test, this)
这个问题就没了…

我猜大概是因为上面那种写法,在destory的时候,不会被自动off掉,下面的会,所以改完了之后我都没主动加off,就好了。

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。