求助:相同tag的节点碰撞

例如在一个台球桌上,多个球之间碰撞,假设球都是刚体,碰撞会交换移动方向和速度,那么

onCollisionEnter: function (other, self)

方法应该怎么写?如果直接写交换速度代码的话,实际上碰撞的彼此都会进入这个方法一次,导致交换速度交换了2次,相当于无效了。
有一个思路是每帧把碰撞过的节点记录下来,只碰撞一次,但是代码不知道怎么写。。

想到一个办法,给节点加一个碰撞flag,每次update开始时设置所有节点的flag为false,在onCollisionEnter 里面只检查flag为false的节点,把self和other的flag设置为true。
不知道这样行不行,也不知道update和onCollisionEnter的执行顺序是并行的还是顺序的。。哪位大佬帮忙解答下。。

is_collisionOver = false; //我的碰撞标识

onCollisionEnter(other, self){

    this.is_collisionOver = true;   //执行碰撞回调了 两个碰撞回调总有一个先后

    if(other.node.getComponent("当前ts").is_collisionOver){       //如果我后执行

        //这里交换

        我的速度  对方速度

        //标识归位

        this.is_collisionOver =false;

        other.node.getComponent("当前ts").is_collisionOver = false;   

    }

}

应该是可以的,感谢大佬的思路~晚上试试

可以在组件里面弄个队列记录碰撞过的UUID,碰撞的时候检测对方的队列里面有没有自己,update的时候清除。

也是个思路,感谢大佬~

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