请教下,box2d创建的一个正方形,能否只设置一个上面有碰撞,别的物体可以在两边不碰撞,可以穿过物体。但是从上面掉下的会有碰撞。
可以尝试刚体的physicsBody不设置为正方形,而是四个线段(segment)拼成一个正方形,每一个线段是一个physicsBody,然后针对四个线段设置他们的CategoryBitmsk,ContactTestBitmask和CollisionBitmask,来决定是否与刚体发生碰撞。
我试过顶面单独一条线了,但是从旁边还是会撞到线的两边顶点。
几种碰撞是同时发生的吗?还是非同时发生,如果非同时发生的话可以根据碰撞发生的情况动态的改变三个bitmask的值。
就算改变了旁边几条边的bitmash值,一条线从上面落下,还是从下面跳向上不是都会碰撞吗?一条线也是有两面的
contact中有一个normal值,代表的是碰撞的方向向量,从上面落下和从下面跳上去的时候这个normal值不一样的,一个为正,一个为负,你可以过滤掉其中你不要的方向的接触事件
这是典型的单边碰撞效果
这一点可以通过在b2Contactlistener中,根据碰撞发生的方向,使用b2Contact.isEnable = false来取消当前碰撞
具体详细方法,欢迎随时和我交流,qq:328800655
如6楼所说,按照碰撞法线进行判定并处理就哦了。
嗯,对了,就是这样的PreSolve(b2Contact* contact, const b2Manifold* oldManifold),检查碰撞检测之前设置contact->SetEnabled(false);
是的,非常正确