使用box2d检测碰撞,但忽略力的影响。

4
我正在使用libgdx和box2d来检测碰撞,但有些碰撞我希望被检测到但力量不会产生影响。
例如,我想检测角色与硬币的碰撞,但又不希望硬币影响玩家的移动。
是否可以通过box2d实现这一点?如果可以,如何操作呢?
2个回答

3

我不确定您想要做什么,但如果我理解您的意图,您可以创建一个传感器装置类型,以下是一个伪代码示例:

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) 后,“Coin”(在我的例子中)的身体将生成 begin/endContact 回调,但不会影响碰撞的物体 - 所以“Character”只是无影响地穿过。 - Townsfolk

1

引用自:https://gamedev.stackexchange.com/a/22542

在 Box2D 手册中了解碰撞过滤:

碰撞过滤允许您防止夹具之间的碰撞。 例如,假设您制作了一个骑自行车的角色。您希望自行车与地形发生碰撞,并且角色与地形发生碰撞,但您不希望角色与自行车发生碰撞(因为它们必须重叠)。Box2D 使用类别和组支持此类碰撞过滤。

Box2D 支持 16 种碰撞类别。对于每个夹具,您可以指定它属于哪个类别。您还可以指定该夹具可以与哪些其他类别发生碰撞。例如,在多人游戏中,您可以指定所有玩家不会相互碰撞,怪物也不会相互碰撞,但是玩家和怪物应该相互碰撞。

手册链接 here。(搜索 Filtering)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接