首页 > 代码库 > 瘸腿蛤蟆笔记28-cocos2d-x-3.2 Box2d物理引擎collision模块介绍

瘸腿蛤蟆笔记28-cocos2d-x-3.2 Box2d物理引擎collision模块介绍

上篇回顾

本篇名言:绝不测量山的高度除非你已到达顶峰,那时你就会知道山有多低。 [哈马绍]

上篇中,我们学习了Box2d物理引擎的三大模块之一的common模块,该模块主要包含设置,内存管理和向量数学。

这次蛤蟆接着学习collison模块。

理论介绍

         这个collision模块包括了shapes和函数。同时包括一个动态树和broad-phase(蛤蟆不知道怎么解释这个)用于加速碰撞系统。这个模块设计的时候是在动态系统之外使用的。

       Shape

         这里的shapes描述了碰撞几何,可以独立于物理仿真使用的。

         每个shape都有一个类型成员和半径。半径甚至适用于多边形。

         我们需要记住如下2点即可:

1. 当一个形状不附属于body,它的顶点被表达在世界空间。

2. 当形状附着在body,它的顶点被表达的局部坐标。

         圆形,有一个位置坐标和直径。

         多边形至少需要3个以上的顶点。(这些顶点是逆时针方向保存的,多边形最多8个值,是有b2_maxPolygonVetices变量确定的。)

         定义一个多边形我们可以这样如下:

b2Vec2 vertices[3];

vertices[0].Set(0.0f, 0.0f);

vertices[1].Set(1.0f, 0.0f);

vertices[2].Set(0.0f, 1.0f);

int32 count = 3;

b2PolygonShape polygon;

polygon.Set(vertices, count);

         边缘形状其实就是线状。它能与圆形,多边形发生碰撞,但是不能和边缘形状发生碰撞。

         链形状提供了一个搞笑的链接边缘的方法,以构建一个静态的游戏世界。链形状记得不要相互交叉哦。

 

函数方面

         函数方面主要是一些碰撞检测,如两个形状之间的距离,是否重叠等。这块虽然是这个collison模块的核心,但是蛤蟆觉得以后续咱们具体例子介绍为宜。

        

动态树

         动态树类用于高效管理大量的形状。

Broad-phase

         碰撞过程在物理步骤上可以分为:narrow-phase和Broad-phase。

         目前阶段,咱们记住如果使用narrow-phase的话,碰撞需要进行大量的计算,而使用Broad-phase可以大大减少narrow-phase 调用。我们不需要和Broad-phase直接打交道,了解一下即可。

        

总结

         本次是蛤蟆对开源的Box2d物理引擎中的其中一个模块-collision的学习和记录,内容比较少,希望不要扔砖。ok,接下去蛤蟆会继续学习Dynamics模块。