Box2d 物体互相碰撞的条件
来源:互联网 发布:vivo手机库存软件 编辑:程序博客网 时间:2024/05/16 11:40
Box2d 物体互相碰撞的条件
- 两个物体的刚体属性都不是感应器: fixture.isSensor=false
- 两个物体的category和mask都是相互对应的
- 两个物体都是一个groupIndex下的
- 两个物体至少有一个必须是可动物体 b2_dynamicBody
- BOX2D_CategoryBits 和 BOX2D_MaskBits 最多支持16组数据, 所以超出的部分是无法执行碰撞的
- 如果想侦测碰撞, 必须配置b2ContactListener类侦测
- 监测碰撞点位置
b2WorldManifold *manifold = new b2WorldManifold();contact->GetWorldManifold(manifold);b2Vec2 contactPoint = manifold->points[0];//记住获得的是绝对点, 所以如果用到内部坐标需要自行转换
判断是否碰撞优先级
groupIndex > maskBit, 两个无任何关系
进行groupIndex判断的条件是:
- groupIndex必须相同且不为0, 此时设置任何maskBit无效
- groupIndex为正, 则相互碰撞, groupIndex为负则互相不碰撞
- 自定义碰撞过滤 Custom b2ContactFilter, 自定义碰撞过滤可通过重写 b2ContactFilter 来修改已知检测碰撞效果, 比如把 groupIndex 和 maskBits 揉捏在一起来实现更多种类的碰撞
可以从代码中明显看到:
if (filterA.groupIndex == filterB.groupIndex && filterA.groupIndex != 0) { return filterA.groupIndex > 0; } bool collide = (filterA.maskBits & filterB.categoryBits) != 0 && (filterA.categoryBits & filterB.maskBits) != 0; return collide;
碰撞注意事项:
- box2d的世界中创建和删除对象禁止发生在碰撞过程中
- 如果想通过碰撞删除body或者fixture, 请标记, 标记删除则在碰撞外执行, 譬如在world的update中监测
参考:
碰撞点位置检测
0 0
- Box2d 物体互相碰撞的条件
- Unity两个物体发生碰撞的条件
- Unity两个物体发生碰撞的条件(即调用碰撞函数的条件)
- Box2d的碰撞筛选
- box2d 模拟真实世界的物体碰撞 类似愤怒的小鸟
- 为啥box2d速度低的情况下, 碰撞不反弹, 贴着物体飞行??
- 【学习17】Box2D创建物体和碰撞检测
- box2d的碰撞控制FilterData
- box2d碰撞的一些细节
- Box2d弹性物体的制作
- 物体与曲面的碰撞
- UE4物体的碰撞检测
- Box2D的Edge Shape的碰撞处理
- Box2D 射线和AABB的碰撞检测
- Box2d碰撞粘滞的问题(java)
- &运算(关于box2d的碰撞过滤)
- Unity3d 物体碰撞检测前提条件(OnTrigger触发条件)
- Box2D获取鼠标单击处的物体
- iOS保存系统相册中的照片到应用沙盒中出现的问题--图片旋转90度,使用CGImageRelease造成应用崩溃
- Logistic Regression(逻辑斯特回归)
- JAVA 关键字小结
- 同步 异步 阻塞 非阻塞
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
- Box2d 物体互相碰撞的条件
- 计算机二级C语言-考试内容
- 黑马程序员——第十六篇:反射
- php小结---当解析变量的值分别为 null, "" ,0 ,"0" ,1 时的不同情况
- C语言实现常见的矩阵运算函数
- hdu 2050 折现分割平面(递归)
- 大坑!动态规划!SHU 1149 能量项链(区间DP)
- rk32_4_4没有LVDS问题
- swift-基础01-变量和常量