如何在Box2D中建造圆形墙?

时间:2017-04-08 05:15:25

标签: collision-detection box2d

我知道要在Box2D中为四边建造一个墙/栅栏,我们只需要为每一边画一个边或一个矩形框。但是如果我想让我的精灵移动到一个圆形盒子里呢?还可以检测圆形壁内侧的碰撞?如果我试图制作一个圆形的身体,是否允许任何可移动的身体进入这个圆形体内?实现这一目标的正确方法是什么?

修改

我只需要AABB碰撞检测并且不需要关心恢复原状和摩擦力。但是如果我必须在Box2D中使用b2ChainShape,那么我正在寻找的是结合Box2D和简单几何碰撞的东西。这样我就可以使用Box2D进行圆圈内精灵的AABB碰撞,但是当我检查精灵与大圆形墙壁之间的碰撞时,我想使用简单的几何检查。我只是不知道这是否可行。我的情况是我把碰撞检测放在服务器上,所以通过使用Box2D,一切都是在Box2D,a.k.a" MKS"世界。现在,如果我使用简单的图形绘制圆形墙,并且我想检查精灵和墙之间的简单几何碰撞,我将不得不使用像素。

1 个答案:

答案 0 :(得分:0)

您可以通过使用b2ChainShape创建一个循环来构建一个圆形墙,并传递足够的顶点,使物理显示为您必须拥有的圆形。请注意,这并不完全是圆形的墙;只有一个近似值实际上是N边的多边形内部(其中N是你提供的顶点数)。

以这种方式创建一个墙将允许物体在其中,与它碰撞(就像身体与任何其他静态物体一样),并被它限制。只要这些物体(实际上这些物体的形状)至少基本上小于该壁的边界。是的,任何可移动的身体都将被允许进入这堵墙。

圆形墙可以用其他方式构建,但如果是我,我至少要从这个机制开始(b2ChainShape)。在库中附带的标准形状中,它是执行此操作的最有效的内存方式。或者,可以将b2Shape子类化,并开发所有其他必要的代码。或者编写所需的任何自定义代码来模拟所需的物理。那是"重新发明轮子"但是可以这么说(当然,除非Box2D中已经完成了所需的物理特性)。

希望这能回答你的问题。