在cocos2dx中使用物理引擎的时候,对物理世界(PhysicsWorld)中的物体设置好碰撞检测的规则是很常见的需求,对Node调用其getPhysicsBody可以获得它的PhysicsBody,通过setGroup,setCategoryBitmask,setCollisionBitmask,setContactTestBitmask等API可以设置碰撞检测的规则,
下面进行一些总结:
void setGroup(int group)
其优先级比bit masks的优先级高。
如果两PhysicsBody的group是正数且相等的话,就一定碰撞;如果group是负数且相等的话,就一定不会碰撞。
void setCategoryBitmask(int bitmask)
这个是用来设置该PhysicsBody的类别的方法,类别用bitmask表示,bitmask为一个32位的整型变量,每一位代表一种类别。而每一个PhysicsBody可以属于多个类别。其默认值为0xFFFFFFFF,同时属于32个类别。
例如bitmask为0x03,即0011(此处只保留了最后四位),则表示该PhysicsBody属于最后两位代表的类别,同时属于0001和0010类。
void setCollisionBitmask(int bitmask)
设置此PhysicsBody能与哪些类别的PhysicsBody产生碰撞,例如设置为0x03(即0011),则能与0001和0010两类的物体产生碰撞。
默认值0xFFFFFFFF,即能与所有类别的PhysicsBody产生碰撞。
void setContactTestBitmask(int bitmask)
使用类似于CollisionBitmask的使用,用来触发cocos2d中EventListenerPhysicsContact的回调函数,不设置的话就不会响应EventListenerPhysicsContact的事件。
默认值0x00000000,即都不响应事件。但是只是不响应事件,如果setCollisionBitMask中使得此PhysicsBody能响应碰撞,则在物理引擎的表现中此PhysicsBody依然能够响应碰撞。