加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于cocos2d中物理引擎碰撞掩码的设置

发布时间:2020-12-14 17:19:36 所属栏目:百科 来源:网络整理
导读:当物理引擎检测到两个Body发送的碰撞信息后,会调用相应的时间方法来通知系统,比如两个Body已经发生碰撞,两个Body已经分离。 接收碰撞事件的方法为onContactBegin; 接收分离事件的方法为onContactSeperate 一、碰撞掩码分为以下三种: 1.CategoryBitmask

当物理引擎检测到两个Body发送的碰撞信息后,会调用相应的时间方法来通知系统,比如两个Body已经发生碰撞,两个Body已经分离。
接收碰撞事件的方法为onContactBegin;
接收分离事件的方法为onContactSeperate
一、碰撞掩码分为以下三种:
1.CategoryBitmask:该掩码会与另一个物体的另外两个掩码ContactTestBitmask、CollisionBitmask按位与,来确定是否可以碰撞

2.ContactTestBitmask:确定两个物体碰撞时是否调用onContactBegin

3.CollisionBitmask:确定两个物体是否允许碰撞

如果希望A和B允许碰撞,则
A的CategoryBitmask与B的CollisionBitmask与运算结果为0
B的CategoryBitmask与A的CollisionBitmask与运算结果为0
否则A和B就不允许碰撞,接触后直接弹开

如果希望A和B发生碰撞检测,即调用onContactBegin,则
A的CategoryBitmask与B的ContactTestBitmask与运算结果不为0
B的CategoryBitmask与A的ContactTestBitmask与运算结果不为0

三个掩码的默认值如下:
CategoryBitmask:UINT_MAX
ContactTestBitmask:UINT_MAX
CollisionBitmask:0
即默认情况下A和B既允许碰撞,也允许碰撞后调用onContactBegin

示例:
(1)导弹的掩码:
CategoryBitmask:0x01
ContactTestBitmask:0x03
CollisionBitmask:0x03
(2)飞船的掩码:
CategoryBitmask:0x01
ContactTestBitmask:0x03
CollisionBitmask:0x01
(3)七边形的掩码:
CategoryBitmask:0x01
ContactTestBitmask:0x02
CollisionBitmask:0x00

从中可以看出导弹与飞船之间不允许碰撞,导弹、飞船与分别与七边形接触允许碰撞。
同时导弹、飞船以及七边形只要碰撞都可以调用onContactBegin的方法
注:会遇到使用默认值无法调用onContactBegin的方法,解决办法是对每个body重新设置三个掩码就能解决

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读