【问题标题】:Box2D detect collisions without causing a collision between certain pairs of objectsBox2D 检测碰撞而不导致某些对象对之间的碰撞
【发布时间】:2014-05-23 17:52:00
【问题描述】:

我正在使用 box2d 和 libgdx 开发游戏。我有一个角色,它是一个从墙上反弹的球。有些敌人会杀死玩家 - 他们也会从墙上反弹。我正在尝试增强无敌能力,这样当玩家无敌时,玩家应该穿过敌人(而不是与他们相撞)并摧毁他们。这意味着我需要通知玩家和敌人之间的碰撞(为了消灭敌人),但不应该发生碰撞(玩家不应该从敌人身上反弹)。我的问题是:实现这一点的最佳方法是什么?

我不认为传感器会起作用,因为玩家和敌人仍然需要与墙壁碰撞,因此将其中任何一个作为传感器都无法解决问题。我不认为碰撞位掩码会起作用,因为当玩家和敌人发生碰撞时我仍然需要生成碰撞事件。

谢谢

【问题讨论】:

    标签: box2d


    【解决方案1】:

    传感器可以为您工作。 您可以为您的播放器创建两个固定装置而不是一个。

    • 为与墙壁(而不是敌人)碰撞的玩家创建一个固定装置
    • 为与敌人(而不是墙壁)碰撞的玩家创建另一个固定装置

    然后,您只需将与敌人碰撞的灯具设置为在无敌加电激活时进行感应。

    【讨论】:

      【解决方案2】:

      正如丹尼斯所说,您可以使用传感器轻松完成此操作。你的身体不会与其他身体发生物理碰撞,但它会记录碰撞。 您甚至可以使用过滤器指定它们是否属于同一碰撞类别/组,以更具体地了解哪些物体相互碰撞。

      FixtureDef myFixtureDef = new FixtureDef();
      CircleShape myCircle = new CircleShape();
      myCircle.setRadius(myRadius);
      myFixtureDef.shape = myCircle;
      myFixtureDef.isSensor = true;
      myFixtureDef.filter.categoryBits = = 0x0002; // 0000000000000010 in binary
      myFixtureDef.filter.maskBits = 0x0001; // 0000000000000001 in binary
      myBody.createFixture(myFixtureDef);
      

      在本例中,您的身体属于 0x0002 类别/组,并且只会与匹配 0x0001 类别/组的身体发生碰撞。

      【讨论】:

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