您的位置:首页 > 其它

box2d碰撞规则说明

2011-09-05 16:47 411 查看
有三个几个参数说明 groupIndex和categoryBits还有maskBits

有两种判断是否碰撞的方法

一个是是否同一种群

二 当不是同一种群是使用种类和掩码值进行判断

要注意的是群 和 种类之间没有关系 他们是并列关系

只不过判断碰撞的时候先判断从种群入手符合的时候就不进行下面的判断了

如果不符合就对掩码和种类的关系进行判断

这是文件里定义组索引groupIndex

还有后面的

两个参数一个是碰撞种类的值categoryBits

另外一个是碰撞掩码值的设定maskBits

const int16 k_smallGroup = 1;

const int16 k_largeGroup = -1;

const uint16 k_defaultCategory = 0x0001;

const uint16 k_triangleCategory = 0x0002;

const uint16 k_boxCategory = 0x0004;

const uint16 k_circleCategory = 0x0008;

这是一段代码指定了一个物体的碰撞规则使用到了三个参数

triangleShapeDef.filter.groupIndex = k_smallGroup;

triangleShapeDef.filter.categoryBits = k_triangleCategory;

triangleShapeDef.filter.maskBits = k_triangleMask;

1组优先规则

组优先即程序会先判断组索引相同的物体之间的碰撞然后在确定不相同的物体之间的关系

判断所属的组索引如果两个物体的组索引同为正则永远发生碰撞

如果两个组索引的值都是负 且相同则永远不发生碰撞 如果不相同那么还是会发生碰撞

2:种群和掩码规则(如果不同种群之间的接触需要的规则,当两个物体属于的种群都是负的时候而且种群的负值不相同这时候就要使用这个判断)

如果组索引不同是的规则就和种类和掩码有关系了

种类的定义只能是2的倍数否则有些碰撞就不在我们控制之内原因解释http://blog.sina.com.cn/s/blog_6a2061a20100n0or.html

如果需要一个种类a的某物体和另外一个或者多个种类的物体碰撞计算方法是这样

a的掩码值=(a种类的的值+b种类的的值+c种类的的值+d种类的的值)注意的是啊与括号内的所有物体都进行碰撞

如果还有物体m n 不设在此 那么他们之间接触不进行碰撞

了解怎么设定碰撞后在看看代码例子中的那些设定是不是就明白了啊

至于为什么这样用大家多想想就明白了用途其实恨广的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: