当你用到box2d后,box2d的碰撞监听检测 是最常用的内容之一。

在这里简要说明一下,为后面的内容做点铺垫。呵呵

1.通过继承并实现b2ContactListener这个类,

class MyContactListener : publicb2ContactListener

{

……

}

2.进源代码你可以看到这个类中有 4个回调函数,

class MyContactListener : publicb2ContactListener

{

//碰撞开始 即发现物体间重叠点时通知

virtual void BeginContact(b2Contact*contact);///碰撞结束 结束重叠后通知

virtual void EndContact(b2Contact*contact) ;//碰撞处理前 即根据物理定律处理刚体前

virtual void PreSolve(b2Contact* contact, const b2Manifold*oldManifold);//碰撞处理后

virtual void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse);

}

重写这4个函数。在相关的函数中加入你想要碰撞处理的内容。 即可

3.把你这个监听类加入到世界中

world->SetContactListener(mContactListener);

你就可以监听碰撞事件了。

这里有几个注意的地方:

1。我们不能在上面这几个回调函数中删除摧毁刚体。因为上面调用都是在box2d的b2World::Step方法中,此时正在进行遍历物理世界的world->GetBodyList()

对物理时间世界进行演算。

官方说明:“你可能会以碰撞来施加伤害,并试图摧毁关联的角色和它的刚体。然而,Box2D 并不允许你在回调中改变物理世界,因 为你可能会摧毁 Box2D 正在运算的对象,造成野指针。”

如果强在里面加摧毁物体函数,你可能会发现world是被锁定的。如需要摧毁,只能用一个容器把需要的处理事件保存起来,带step方法执行完毕后再处理这些容器;具体的摧毁动态刚体的方法在下下章写。。。

2。如果你在PreSolve()里改变了物体的位置,比如使他们后退一点,他们互不碰撞,那么他们不会调用EndContact();

3。你有时候很希望他们可以选择碰撞的方向:比如 天上一堵墙 从下面可以穿过不会碰撞,上面接触会碰撞 不能穿过。这属于box2d中OneSidedPlatform的内容。具体的我会在下一章写。

但要注意 如果你想碰撞后修改成穿过的状态 应该用 contact->SetEnabled(false);   而不是 myShapeDef.isSensor = true;  你在代码里可以尝试下两个的区别。还是有点小明显。虽然isSensor 是让

传感器会侦测碰撞而不产生碰撞反应。

box2d单纯的碰撞检测还是比较好看明白。还是附个小例子吧~

下载例子dome :附件

box2d 碰撞检测_box2d 碰撞检测 - by 小Ka相关推荐

  1. (译)如何使用box2d来做碰撞检测(且仅用来做碰撞检测)

    原文链接地址:http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-i ...

  2. box2d 碰撞检测_(译)如何使用box2d来做碰撞检测(且仅用来做碰撞检测)

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  3. box2d 碰撞检测_Box2d新系列 第四章 碰撞模块

    注:此文章翻译自Box2D v2.2.0用户手册,仅供学习参考. 4.1  关于 碰撞模块包括了形状以及操作形状的方法.模块也包括了动态树(dynamic tree)和broad-phase算法来提高 ...

  4. 解决Unity物体速度过快无法进行碰撞检测(碰撞检测穿透)

    一.解决碰撞检测穿透方法一 首先我们知道只要是跟碰撞相关的基本都是离不开刚体 Rigidbody这个组件,刚体中有一个参数适用于检测碰撞的 如下图 Collision Detection就是碰撞检测. ...

  5. 碰撞检测 matlab,碰撞检测 - LearnOpenGL CN

    碰撞检测 Note 本节暂未进行完全的重写,错误可能会很多.如果可能的话,请对照原文进行阅读.如果有报告本节的错误,将会延迟至重写之后进行处理. 当试图判断两个物体之间是否有碰撞发生时,我们通常不使用 ...

  6. 碰撞检测之碰撞检测函数

    如何让两个游戏物体之间产生碰撞--至少一个刚体和两个碰撞器 如何让两个物体之间碰撞时表现出不同效果--通过物理材质 触发器的作用是:让两个物体碰撞没有物理效果,只进行碰撞处理 注意:碰撞和触发响应函数 ...

  7. 微信小程序-贪吃蛇开发9 滑动控制与碰撞检测

    本系列是作者自学实践过程的记录 本文是关于贪吃蛇的滑动控制 有问题欢迎讨论 目录 一.滑动控制 1.1 设计思想 1.2 代码实现 1.3 效果展示: 1.4 整体赋值 二.setInterval函数 ...

  8. 【自动驾驶】碰撞检测算法

    参考链接: [自动驾驶]碰撞检测算法 - 知乎 [规划]Box2d::HasOverlap() 碰撞检测接口详解_lemon_zy的博客-CSDN博客_box2d碰撞检测 一个常用方法即为超平面分离定 ...

  9. 如何用Python实现超级玛丽的人物行走和碰撞检测?

    作者 | marble_xu 编辑 | 郭芮 出品 | CSDN博客 在<如何用 Python 实现超级玛丽的界面和状态机?>这篇文章中我们讲解如何用代码实现界面和状态机,本文详解人物行走 ...

最新文章

  1. qt获取窗口的右上角位置_如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置...
  2. myeclipse如何修改tomcat的timeout
  3. 计算机科学概论ppt免费,计算机科学概论(第9版)Lecture_slide07.ppt
  4. Python 输出的空格问题
  5. laravel-admin配置安装完新手使用
  6. c语言学生成绩删除功能,c语言学生成绩管理系统程序设计,有添加,查找,删除,输出,修改,排序等功能!!!...
  7. Linux之yum安装lamp环境
  8. 各种移动GPU压缩纹理的使用方法
  9. DOM(十四):代理检测和事件处理(跨浏览器)
  10. STM32F103ZET6(野火霸道v2)串口烧录(mcuisp)
  11. 宏碁e5-572g重装linux,Acer-E5-572G笔记本U盘装原版win10系统教程
  12. 直播app源码开发,聊天服务器的搭建教程
  13. 如何查看局域网内所有IP
  14. ie浏览器html播放器,ie浏览器播放不了网页视频
  15. Java-图片处理 Gif转Jpg
  16. 信息检索1.3.学术搜索引擎--谷歌学术搜索引擎
  17. i春秋百度杯CTF比赛2016年12月场writeup
  18. 计算机 管理 mmc 注册表,我的注册表没有MMC文件
  19. Redis的Java客户端之Jedis(Jedis)
  20. GB28181国标2016版本协议文档(报送稿)解读(一)

热门文章

  1. android打印doc文件,安卓系统APP打印开发实例.doc
  2. 上百个Android开源项目分享 .
  3. 如何在5天内学会Vue?聊聊我的学习方法!
  4. sor迭代法代码matlab,SOR迭代法求线性方程组
  5. [转]论语新解(上篇)(2)
  6. oracle相关介绍
  7. 2019级C语言大作业 - 三国杀
  8. 站外营销经典方式之论坛发帖技巧
  9. 8bit 1GS/s 高速数据采集卡
  10. 可爱的小老鼠计算机教案,幼儿园大班鼠标小老鼠教案