【Box2D】Box2d中关于body的一些使用

http://aaronstar5.blog.163.com/blog/static/1311079201242503448566/


最近在看Box2d,关于碰撞检测方面有些不大明白,网上看到一些网友的解释,感觉还不错,就在这里记录下。



1.当不需要处理碰撞时,调用SetActive(false),以提高效率。

  (PS:说使用SetAwake以使进入睡眠也是不处理碰撞,我调用却不生效,不知道为什么)


2.SetLinearVelocity是设置速度,ApplyLinearImpulse是在原来速度的基础上给一个脉冲,相当于给了一格加速度,同时角速度也是会被修改到。


3.两个 body需要检测碰撞,但是又不需要有碰撞反应,那需要设置b2FixtureDefisSensor true


4.box2d 刚体碰撞设定方法

fixtureDef.filter.categoryBits指自己所属的碰撞种类

fixtureDef.filter.maskBits指与其碰撞的种类


b2FixtureDef fixtureDef;

 注意 fixtureDef.filter.categoryBits的值必须是2的倍数假如有两个body 他们的 filter.categoryBits分别为24则另一个body要想与他们两个都发生碰撞则其filter.maskBits应该为: 2+4= 6

对于fixtureDef.filter.groupIndex 属性:当其为负值时,表示该组的对象不发生碰撞 为正值则表示该组的对象发生碰撞另外 要使两个对象不发生碰撞,则: groupIndex属性必须为负, 并且groupIndex的值一样,这样才能不发生碰撞 其他情况都会发生碰撞(即两个不相同的负值的body也会发生碰撞)


由上述可知:控制body是否发生碰撞有两种方法: 

1fixtureDef.filter.categoryBits(自己所属的碰撞种类)和 fixtureDef.filter.maskBits(指定碰撞种类) 

2:直接使用fixtureDef.filter.groupIndex即可当上述两种情况都使用的话,则由fixtureDef.filter.groupIndex决定因为fixtureDef.filter.groupIndex的优先级高些 

你可能感兴趣的:(【Box2D】Box2d中关于body的一些使用)