Cocos物理引擎刚体的3种掩码
来源:互联网 发布:淘宝详情页模板怎么做 编辑:程序博客网 时间:2024/06/07 04:54
在一些物理世界游戏的设计中,肯定会涉及到一些刚体的接触,那么这些刚体的接触我们是可以决定到底碰撞与否,接触的时候是否调用回调函数来进行一些处理,那么下面我们就来介绍一下刚体的3种掩码值。
首先看下面3个函数
triangle->getPhysicsBody()->setCategoryBitmask(0x08); // 1000
这个函数是设置刚体的种类掩码值,掩码值最多可以用32位的2进制表示,所以掩码值得最大值是0xFFFFFFFF,这也是默认的掩码值,一般简单游戏用到8位我估计差不多了。
triangle->getPhysicsBody()->setContactTestBitmask(0x02); // 0010
这个函数设置刚体接触后的分组掩码值,干脆就叫做“接触掩码值”吧,这个值决定的是两个刚体接触后会不会产生一个物理代理(可以查看代理模式),其实简单点就是回调函数,产生这个回调函数大家就可以做很多接触代码处理。注意这个所谓的接触不是碰撞,两个物体会接触,但是不一定会碰撞,也就是接触后直接穿透了。默认值0x00000000.
triangle->getPhysicsBody()->setCollisionBitmask(0x01); // 0001
这里是设置碰撞掩码,也就是判断两个是直接穿透互不影响还是产生一个碰撞的过程,影响各自的速度,运动过程等。默认值0xffffffff。如何判断?
上面解释函数的大概意思,那么到底怎么使用,系统如何判断是否碰撞或产生回调函数? 下面给大家举个例子:
triangle->getPhysicsBody()->setCategoryBitmask(0x08); // 1000triangle->getPhysicsBody()->setContactTestBitmask(0x02); // 0010triangle->getPhysicsBody()->setCollisionBitmask(0x01); // 0001box->getPhysicsBody()->setCategoryBitmask(0x02); // 0010box->getPhysicsBody()->setContactTestBitmask(0x08); // 1000box->getPhysicsBody()->setCollisionBitmask(0x01); // 0001
上面涉及到两种刚体,一个是方块,一个三角。那他们接触的时候会不会产生回调函数和碰撞过程?
1.回调函数:三角的接触掩码是0010,方块的类别掩码是0010,让他们做逻辑与运算为0010,结果是非0. 再看方块的接触掩码1000,三角类别掩码1000,逻辑与运算非0. 同时满足这两个条件,就可以产生回调函数。也就是将两种刚体的接触掩码分别与另外一个刚体的类别掩码做逻辑与运算,如果结果都是非0,那么可以响应回调函数。
2. 那么又要问了,怎么用这个回调函数,很简单,跟触摸监听器一下,下面代码:
auto contactListener = EventListenerPhysicsContact::create(); contactListener->onContactBegin = CC_CALLBACK_1(PhysicsContactTest::onContactBegin, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);
onContactBegin大家只要重写这个函数就行了,很简单,具体可以看cocos3.7的Test CPP的PhysicsContactTest类。
3.产生碰撞过程,和上面的回调函数是一样的。三角的碰撞掩码是0001,方块的类别掩码是0010,让他们做逻辑与运算为0,结果是0. 看到这个就已经可以判断两个刚体接触不会产生碰撞了,总结就是将两种刚体的碰撞掩码分别与另外一个刚体的类别掩码做逻辑与运算,如果结果都是非0,那么可以产生碰撞。
- Cocos物理引擎刚体的3种掩码
- 物理引擎Box2D之刚体
- Havok物理引擎-刚体介绍
- Unity3D物理引擎中刚体组件的运用
- cocos Box2D物理引擎
- Unity 3D 物理引擎之刚体与碰撞器
- 关于cocos2d中物理引擎碰撞掩码的设置
- flash与物理引擎:销毁刚体
- 物理引擎——刚体Rigidbody(一)
- 物理引擎——刚体Rigidbody(二)
- cocos2dx 物理引擎 刚体重叠问题
- Unity——物理引擎之刚体
- unity3d 第四天 物理引擎 刚体
- cocos中的Box2d物理引擎
- 基于JBox2D物理引擎开发的“雷电”小游戏(六)——刚体的销毁
- 【Unity 3D】学习笔记三十六:物理引擎——刚体
- Cocos2d-x3.3 Physics物理引擎模块解决了刚体穿透问题
- Cocos2d-x3.3 Physics物理引擎模块解决了刚体穿透问题------沈大海
- K-means聚类算法
- jquery刷新iframe页面的方法
- Verilog中$fopen $fdisplay $fclose的用法
- FragmentActivity和Activity的区别
- Java笔记17:导出可执行jar包
- Cocos物理引擎刚体的3种掩码
- Android系统信息和安全机制(学习笔记)
- GIT HOOKS
- 防止系统清理
- JS 刷新页面
- opencv实现最基本的图像配准
- Android 学习记录之requestWindowFeature属性解析
- android仿12306图片验证码选择——自定义控件
- Android 用Canvas 画几何图形,画出小黄人