碰撞检测回调函数重复执行了怎么解决?

两个碰撞体碰撞的时候使用回调函数
onCollisionEnter: function (other, self) {
console.log(“碰撞了”);
this.node.destroy();
},
碰撞之后就执行一段代码,然后销毁碰撞体。照理说只能执行一次,但经常性的会打印出两个或三个console.log(“碰撞了”); 好像是还没来得及销毁就一下子就碰了三次,这个怎么解决?

加个bool值,调过了就不调用了

但是我这个代码是用来游戏中吃钱币用的,吃一个钱币加一分然后销毁钱币,现在经常出现吃一个加2分3分的情况,而且钱币很多,一秒中可能吃要好几个,也不能只加一次分啊。

加BOOL也试过,就是在钱币代码里开头设一个变量赋值false;碰撞代码里检测到这个变量是false然后加分,然后把变量改成true,也不行,还是会加2分后变量才变成true。

好像两次代码就同步执行的,没法用BOOL判断执行过一次后不执行第二次,要么两次都不执行,要么两次都执行。

碰撞的逻辑是这样的, 碰撞体根据FLAG彼此组成碰撞序列, 每帧检测这些序列, 若碰撞则回调相关函数.
在碰撞回调函数中立即销毁相关节点, 比如 active = false会回调碰撞组件删除相关碰撞体.
问题只能是你自己的代码问题.

你好好检查下,不会有同步执行的情况的,你这个情况初步看起来像是重复绑定了相同组件引起的,具体还是要你自己检查下了

坛友也发现和我类似的问题,是改变了节点的 scaleX造成的BUG,反馈一个物理碰撞的BUG

每个文章都有你的身影,大佬

没事干,给你们捣捣乱 :sweat_smile:

大佬你知道2d的碰撞怎么设置吗?照着文档设置了,碰撞的回调函数都没有起作用

我去,还有这种改变scale就能触发多次碰撞的bug。

真的会每帧检测吗