瘸腿蛤蟆笔记33-cocos2d-x-3.2 Box2d物理引擎Contact类介绍

转载标明出处:http://blog.csdn.net/notbaron/article/details/38689643

上篇回顾

本篇名言:要能感觉存在,就需加强对美的感受力[詹姆士·雷德非]

上篇中,我们学习了Box2d物理引擎dynamics模块中的Joint类,基本是根据官方文档进行的初步介绍。

接下去蛤蟆继续学习dynamics模块中的类,这次咱们学习Contact这个类。。

 

理论介绍

         Contact是Box2d 创建的用来管理两个Fixture发生碰撞的对象。

         根据不同的 F          ixture类型,会有不同的Contact类来管理。

蛤蟆介绍下和接触类相关的术语:

         点接触

         点接触是两个shape接触。

       普通接触

       普通接触,是一个单位向量,从一个shape指向另一个Shape.

         分离接触

         分离和渗透的相反含义。当shape重叠时,分离为负。后续Box2d可能会使用正分离。

         多样接触

         当两个复杂的多边形接触的时候,会有2个接触点,他们就会被分组到多样接触。

         正常冲量

         正常力是施加在接触点的,防止形状发生穿透的。正常脉冲只是正常的力乘以时间步长而已。

         切线冲量

         切线力是在接触点产生用于模拟摩擦的。该存储为冲量。

         接触ID

         Box2d会复用一个接触力。而这个ID包含了几何特性用于区分接触点。

Contact(接触)类

         Contact类是由Box2d创建的不是用于创建的。但是我们可以访问并与之交互。

访问接触

         我们可以通过WORLD类或者Body的结构体来访问Contact类。

         不过通过World和Body访问接触类,可能会错过一些短暂的接触。使用b2ContactListener监听就不会了(监听可以抓住每个短暂的接触)。

接触监听

         可以通过监听获取接触数据。监听提供了很多事件(events):包括开始,结束,预处理和后处理。

         开始接触事件:当两个Fixture重叠的时候会被调用。这个事件只在时间步内发生。

         结束接触事件:当两个Fixture停止重叠时候被调用。这个事件可以在时间步之外发生。

         预处理事件:这个调用发生在碰撞检测之后,碰撞处理之前。这个时间可以让我们有机会根据当前的配置禁用contact.

         后处理事件:这个事件用于收集碰撞冲突结果。

 

接触过滤

         我们通常不需要所有的物体进行碰撞。比如创建一个门只用于角色穿过。

         我们可以通过b2ContactFilter类 是实现接触过滤。需要我们定义一个ShouldCollide函数,当Shapes能发生碰撞的话就返回true.

在运行时,可以创建一个接触过滤实例,并通过b2World::SetContactFilter注册之。

        

总结

         本次蛤蟆学习了dynamcis模块中的Contact类,如果有疑问欢迎交流。接着蛤蟆学习Box2d中最霸气的world类。

你可能感兴趣的:(瘸腿蛤蟆笔记33-cocos2d-x-3.2 Box2d物理引擎Contact类介绍)