新手提问:想让两个刚体碰撞的时候消失,为什么会报错哇?


直接让节点消失就会报错。

但是如果延迟一毫秒就没问题了。希望大佬可以解答一下~ :joy:

image
延迟0.001秒也没报错

再下一帧执行

发现Creator里好多问题都是延迟一帧执行就能解决…

好多吗?哈哈 :rofl:又多了一个可尝试的bug修复方法呢

嗷!果然只能如此吗?顺便问下cocos有延迟一帧执行的方法吗?

lateUpdate 应该是这个吧

感谢~我还是用setTimeOut()吧,把延迟时间设置成一帧的时间 :rofl:,cocos手册里也没搜到类似的方法。

自己揣测。。。。估计是检测到碰撞的瞬间,物理引擎在计算反弹,质量,力什么的。如果在这时让该节点消失,这些个物理引擎的计算就会中断报错,等物理引擎的程序执行完,再让节点消失就不会报错了。不知道对不对

我揣测你的揣测是对的。我印象中点击事件中添加对当前节点的销毁也会有类似的报错。

1赞

director.once(Director.EVENT_AFTER_PHYSICS,()=>{

        otherCollider.node.destroy();

    },this);
1赞

scheduleOnce(() => { … }),延迟参数不写,就是默认延迟一帧

1赞

物理系统回调是在物理更新执行过程中,回调里面不能执行增删刚体的操作,类似遍历数组的时候不能增删数组元素。box2d 里面检测到这个行为直接报错了

试下先移除碰撞组件,再移除组件

之前试过了还是会报错,组件成功移除了,但是在节点移除的时候还是会报错的

感谢,又长知识了~

那为什么ab碰撞,c无法创建刚体呢?我一开始也是自己揣测跟你想的一样,按你所说ab碰撞应该是计算ab和c无关,直到遇到现在这问题,发现自己瞎猜不如直接问正确的原理