首页 > 代码库 > 瘸腿蛤蟆笔记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模块。