libgdx - 与不同实体对象的碰撞

时间:2015-10-05 02:43:21

标签: libgdx listener box2d collision-detection

嗨我有一个由几个物体组成的物体,它们之间的区别在于某人是过滤器而其他人不是。 我希望我的演员在与物理侧碰撞时被摧毁,并且在与传感器碰撞时具有不同的效果。 那么,如果联系人发生在一个部分或另一个部分,我怎样才能检查我的碰撞监听器?

2 个答案:

答案 0 :(得分:0)

假设你有一张桌子和一堆奶牛,你想确定是否有奶牛与餐桌相撞。

Body table;
Array<Body> cows;

//define the table and cows

ContactListener listener = new ContactListener() {

  @Override
  public void beginContact(Contact contact) {
    Body bodyA = contact.getFixtureA().getBody();
    Body bodyB = contact.getFixtureB().getBody();

    for (Body cow : cows) {
      if (((cow == bodyA) || (cow == bodyB)) &&
         ((table == bodyA) || (table == bodyB))) {
          //do something
      }
    }
  }
};

这是一个通用的答案,但它告诉你如何检查哪些机构发生了碰撞,我认为这些机构可以回答你的问题。

答案 1 :(得分:0)

可能有很多方法可以做到这一点,但这里是我如何将物理学用于游戏对象映射。不是我坚持宗教的东西,但我试着 - 总有例外。

如果我有一个&#34;游戏对象&#34;,它有一个正文。 body用户数据设置为该对象。

如果我有一个&#34;游戏对象&#34;由部件组成,这些部件是游戏对象部件&#34;,它们将是身体固定装置的用户数据。

我的游戏对象&#34;是&#34; Part Objects&#34;的组合。与身体具有夹具部件的方式相同。

如果您有这样的东西,那么您可以轻松地在碰撞中区分对象的各个部分。如果你真的想要你的游戏对象&#34;由于其他原因由多个身体组成,然后我仍然会制作&#34;游戏对象&#34;有&#34;零件&#34;设置为组成它的实体的用户数据。希望有所帮助。

我还向前迈进了一步 - 我的游戏对象&#34;拥有自己的碰撞处理程序集合。因此,我的单个注册冲突侦听器获取userdata对象并使用相同的参数调用其冲突处理程序。利用多态性。现在我可以将给定对象的碰撞行为附加到该对象。我不必遍历所有对象来决定在我注册的碰撞监听器中做什么。