我正在使用libgdx和box2d来检测碰撞,但我希望能够检测到一些碰撞,但不会发挥作用。
例如,我想检测角色何时与硬币碰撞但不希望硬币影响玩家的动作。
使用box2d甚至可以吗?如果是这样,我该怎么做呢?
答案 0 :(得分: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.
答案 1 :(得分:1)
引自:https://gamedev.stackexchange.com/a/22542
在Box2D手册中阅读碰撞过滤:
碰撞过滤可以防止灯具之间发生碰撞。 例如,假设您制作一个骑自行车的角色。你要 自行车与地形碰撞和角色碰撞 与地形,但你不希望角色碰撞 自行车(因为它们必须重叠)。 Box2D支持这种碰撞 使用类别和组进行过滤。
Box2D支持16种碰撞类别。对于每个夹具,你可以 指定它属于哪个类别。你还指定了其他什么 这个夹具可以碰撞的类别。例如,你可以 在多人游戏中指定所有玩家不会与每个玩家发生碰撞 其他和怪物不会相互碰撞,但是玩家和玩家 怪物应该碰撞
链接到手册here。 (搜索过滤) 。