为什么在碰撞回调里删除节点会出错?

我想实现两个2D刚体发生碰撞就消失,在碰撞回调里把它们从父节点移除,结果出错了,不知道是什么原因……

  • Creator 版本:3.4.2

  • 目标平台:Chrome

  • 重现方式:
    在 BEGIN_CONTACT 或 END_CONTACT 回调里(另外两个不知道为什么没被调用)测试:
    1、把 selfCollider 或 otherCollider 所在节点从父节点中删除就会出现第一个错误
    如果把 selfCollider 或 otherCollider 对应的节点的 active 设为 false ,也会出现第一个错误

2、发现修改 selfCollider 或 otherCollider 对应的刚体的类型,例如
selfRigidBody.type = ERigidBody2DType.Static;
也会出错,下面第二个错误

第二个错误

然后就停止执行了……

类似的问题有 https://forum.cocos.org/t/topic/135019/3
我觉得这只是掩盖了问题,并没有真正解决问题

不知道怎样解决了……

1赞

我昨天碰到这个问题,是我需要put(this.node)到对象池里,然后报错。一开始我也以为就是掩盖了问题,后面我测试发现节点是被正常回收了

try…catch… 确实可以,不过我担心会埋下隐患

还是有问题,
在碰撞回调里:1、销毁组件出错;2、添加子节点也出错

把节点和组件的增删改操作移出碰撞回调居然就可以了

您好, 移出具体是怎么移出呢?

我就是这个问题,改用3d碰撞就行了

setTimeout(()=> {}, 0) 或者 scheduleOnce

好的好的多谢

用定时器会不会有隐患啊

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