碰撞后销毁节点报错了,这是啥问题?

这有点扯吧,单一的destroy没问题;如果有其他行为呢?0.1该做的都做完了,打标记吗?设置active吗?

也可以看看这边。

如果是想要在 box2d 的碰撞回调里面,进行 active 或者 destory 操作,需要隔帧操作。是会受限于 box2d 的第三方库。另外,设置 0.1秒,也是差不多隔帧操作。

另外 destory 销毁是隔帧生效的。使用 isValid 判断节点是否有效,如果在当前帧的话,也是会判定是有效的。如果 destory 后再次 destory 就会有 “ Y ouare trying to destory a object twice or more” 的报错提示

为什么延时一下就不会destroy多次呢?
按理来说,应该是同一帧执行了多次的onBeginContact函数的,所以即使延时了,应该也会多次调用destory函数的吧?

主要是碰撞回调的执行间隔时间比较短,再加上节点调用 destroy 之后不会在当前语句执行帧就立即销毁节点对象数据,而是会把准备销毁的节点记录到引擎的待销毁对象集中。然后统一等引擎下一帧自动进行销毁。在自动销毁之前,节点暂时还是会被判断为可用。但是实际上已经不可用了。

在这个前提下,不允许节点在同一帧中连续执行销毁,所以会给出报错。
目前可以通过延迟销毁规避这个问题。