【发布时间】:2015-02-19 03:34:19
【问题描述】:
我正在使用 libgdx 和 box2d 来检测碰撞,但我希望能检测到一些碰撞,但力不会发挥作用。
例如,我想检测角色何时与硬币碰撞,但不希望硬币影响玩家的动作。
这甚至可以使用 box2d 吗?如果是这样,我该怎么做?
【问题讨论】:
我正在使用 libgdx 和 box2d 来检测碰撞,但我希望能检测到一些碰撞,但力不会发挥作用。
例如,我想检测角色何时与硬币碰撞,但不希望硬币影响玩家的动作。
这甚至可以使用 box2d 吗?如果是这样,我该怎么做?
【问题讨论】:
我不确定你想要做什么,但如果我理解你想要做什么,你可以创建一个传感器夹具类型,这个伪示例:
FixtureDef fd1 = new FixtureDef();
//fd1.friction = 0.5f;
PolygonShape pSTest = new PolygonShape();
//size you want for example:
pSTest.setAsBox(4f / PIXEL_POR_METRO,
1f / PIXEL_POR_METRO,
new Vector2(22f / PIXEL_POR_METRO, -1f / PIXEL_POR_METRO),
0f);
fd1.shape = pSTest;
fd1.isSensor = true;
yourBody.createFixture(fd1).setUserData("yourId");
看起来是 ContactListener 接口,例如 preSolve
注意那个传感器,这不是传感器的要求。
信息
setAsBox(float hx, float hy, Vector2 center, float angle)
Parameters:
hx the half-width.
hy the half-height.
center the center of the box in local coordinates.
angle the rotation in radians of the box in local coordinates.
【讨论】:
BodyFixture.setSensor(true),“硬币”的主体(在我的示例中)将生成begin/endContact 回调,但不会影响碰撞体 - 所以“角色”只是通过不受影响。
引用自:https://gamedev.stackexchange.com/a/22542
阅读 Box2D 手册中的碰撞过滤:
碰撞过滤允许您防止灯具之间的碰撞。 例如,假设您制作了一个骑自行车的角色。你要 与地形碰撞的自行车和要碰撞的角色 与地形,但您不希望角色与 自行车(因为它们必须重叠)。 Box2D 支持这种碰撞 使用类别和组进行过滤。
Box2D 支持 16 种碰撞类别。对于每个夹具,您可以 指定它属于哪个类别。您还指定其他什么 这个夹具可以碰撞的类别。例如,您可以 在多人游戏中指定所有玩家不会与每个玩家发生冲突 other 和 monsters 不会互相碰撞,但是玩家和 怪物应该碰撞
链接到手册here。 (搜索过滤) .
【讨论】: