【问题标题】:Using box2d to detect collisions, but ignore the forces使用 box2d 检测碰撞,但忽略力
【发布时间】:2015-02-19 03:34:19
【问题描述】:

我正在使用 libgdx 和 box2d 来检测碰撞,但我希望能检测到一些碰撞,但力不会发挥作用。

例如,我想检测角色何时与硬币碰撞,但不希望硬币影响玩家的动作。

这甚至可以使用 box2d 吗?如果是这样,我该怎么做?

【问题讨论】:

    标签: libgdx box2d collision


    【解决方案1】:

    我不确定你想要做什么,但如果我理解你想要做什么,你可以创建一个传感器夹具类型,这个伪示例:

    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 回调,但不会影响碰撞体 - 所以“角色”只是通过不受影响。
    【解决方案2】:

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

    阅读 Box2D 手册中的碰撞过滤:

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

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

    链接到手册here。 (搜索过滤) .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多