例如在一个台球桌上,多个球之间碰撞,假设球都是刚体,碰撞会交换移动方向和速度,那么
onCollisionEnter: function (other, self)
方法应该怎么写?如果直接写交换速度代码的话,实际上碰撞的彼此都会进入这个方法一次,导致交换速度交换了2次,相当于无效了。
有一个思路是每帧把碰撞过的节点记录下来,只碰撞一次,但是代码不知道怎么写。。
例如在一个台球桌上,多个球之间碰撞,假设球都是刚体,碰撞会交换移动方向和速度,那么
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天后自动关闭。不再允许新的回复。