当物理引擎检测到两个Body发送的碰撞信息后,会调用相应的时间方法来通知系统,比如两个Body已经发生碰撞,两个Body已经分离。 @H_301_2@ 接收碰撞事件的方法为onContactBegin; @H_301_2@ 接收分离事件的方法为onContactSeperate @H_301_2@ 一、碰撞掩码分为以下三种: @H_301_2@ 1.CategoryBitmask:该掩码会与另一个物体的另外两个掩码ContactTestBitmask、CollisionBitmask按位与,来确定是否可以碰撞
2.ContactTestBitmask:确定两个物体碰撞时是否调用onContactBegin
3.CollisionBitmask:确定两个物体是否允许碰撞
如果希望A和B允许碰撞,则 @H_301_2@ A的CategoryBitmask与B的CollisionBitmask与运算结果为0 @H_301_2@ B的CategoryBitmask与A的CollisionBitmask与运算结果为0 @H_301_2@ 否则A和B就不允许碰撞,接触后直接弹开
如果希望A和B发生碰撞检测,即调用onContactBegin,则 @H_301_2@ A的CategoryBitmask与B的ContactTestBitmask与运算结果不为0 @H_301_2@ B的CategoryBitmask与A的ContactTestBitmask与运算结果不为0
三个掩码的默认值如下: @H_301_2@ CategoryBitmask:UINT_MAX @H_301_2@ ContactTestBitmask:UINT_MAX @H_301_2@ CollisionBitmask:0 @H_301_2@ 即默认情况下A和B既允许碰撞,也允许碰撞后调用onContactBegin
示例: @H_301_2@ (1)导弹的掩码: @H_301_2@ CategoryBitmask:0x01 @H_301_2@ ContactTestBitmask:0x03 @H_301_2@ CollisionBitmask:0x03 @H_301_2@ (2)飞船的掩码: @H_301_2@ CategoryBitmask:0x01 @H_301_2@ ContactTestBitmask:0x03 @H_301_2@ CollisionBitmask:0x01 @H_301_2@ (3)七边形的掩码: @H_301_2@ CategoryBitmask:0x01 @H_301_2@ ContactTestBitmask:0x02 @H_301_2@ CollisionBitmask:0x00
从中可以看出导弹与飞船之间不允许碰撞,导弹、飞船与分别与七边形接触允许碰撞。 @H_301_2@ 同时导弹、飞船以及七边形只要碰撞都可以调用onContactBegin的方法 @H_301_2@ 注:会遇到使用默认值无法调用onContactBegin的方法,解决办法是对每个body重新设置三个掩码就能解决