http://aaronstar5.blog.163.com/blog/static/1311079201242503448566/
最近在看Box2d,关于碰撞检测方面有些不大明白,网上看到一些网友的解释,感觉还不错,就在这里记录下。
1.当不需要处理碰撞时,调用SetActive(false),以提高效率。
(PS:说使用SetAwake以使进入睡眠也是不处理碰撞,我调用却不生效,不知道为什么)
2.SetLinearVelocity是设置速度,ApplyLinearImpulse是在原来速度的基础上给一个脉冲,相当于给了一格加速度,同时角速度也是会被修改到。
3.两个 body需要检测碰撞,但是又不需要有碰撞反应,那需要设置b2FixtureDef的isSensor为 true
4.box2d 刚体碰撞设定方法
fixtureDef.filter.categoryBits指自己所属的碰撞种类
fixtureDef.filter.maskBits指与其碰撞的种类
b2FixtureDef fixtureDef;
注意 fixtureDef.filter.categoryBits的值必须是2的倍数假如有两个body 他们的 filter.categoryBits分别为2,4则另一个body要想与他们两个都发生碰撞则其filter.maskBits应该为: 2+4= 6;
对于fixtureDef.filter.groupIndex 属性:当其为负值时,表示该组的对象不发生碰撞 为正值则表示该组的对象发生碰撞另外 要使两个对象不发生碰撞,则: groupIndex属性必须为负, 并且groupIndex的值一样,这样才能不发生碰撞 其他情况都会发生碰撞(即两个不相同的负值的body也会发生碰撞)
由上述可知:控制body是否发生碰撞有两种方法:
法1:用fixtureDef.filter.categoryBits(自己所属的碰撞种类)和 fixtureDef.filter.maskBits(指定碰撞种类)
法2:直接使用fixtureDef.filter.groupIndex即可当上述两种情况都使用的话,则由fixtureDef.filter.groupIndex决定因为fixtureDef.filter.groupIndex的优先级高些。