Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在LibGDX box2D中具有筛选器的实体之间使用联系人侦听器_Java_Libgdx_Box2d_Collision - Fatal编程技术网

Java 在LibGDX box2D中具有筛选器的实体之间使用联系人侦听器

Java 在LibGDX box2D中具有筛选器的实体之间使用联系人侦听器,java,libgdx,box2d,collision,Java,Libgdx,Box2d,Collision,我将libGDX与box2D一起使用,我有两个具有碰撞过滤的实体,因此它们不能相互碰撞 我使用groupIndex过滤器来过滤那些身体,你可以想象 但是我想检测与联系人侦听器的身体碰撞,即使它们不能相互碰撞 有办法吗 我没有写任何代码,因为这是一个问题,我认为没有必要,至少现在 如果你能帮助我,谢谢你 使用ContactsetEnabled方法。 在ContactListener中: @Override // In preSolve method. Not beginContact, it ma

我将libGDX与box2D一起使用,我有两个具有碰撞过滤的实体,因此它们不能相互碰撞

我使用groupIndex过滤器来过滤那些身体,你可以想象

但是我想检测与联系人侦听器的身体碰撞,即使它们不能相互碰撞

有办法吗

我没有写任何代码,因为这是一个问题,我认为没有必要,至少现在


如果你能帮助我,谢谢你

使用Contact
setEnabled
方法。

在ContactListener中:

@Override // In preSolve method. Not beginContact, it matters
public void preSolve(Contact contact, Manifold manifold) {
       short firstBit = contact.getFixtureA().getFilterData().categoryBits;
       short secondBit = contact.getFixtureB().getFilterData().categoryBits;

       if ((firstBit | secondBit) == (BOX_BIT | GROUND_BIT)) {
            System.out.println("Contact " + firstBit + " " + secondBit);
            contact.setEnabled(false);
       }
  }
这些比特
BOX\u比特
GROUND\u比特
是你身体上不应该碰撞的比特,但ContactListener会捕捉到它们之间的接触,设置为:

fixturedef.filter.categoryBits = GROUND_BIT;
为应该碰撞的物体设置一些其他位


希望有帮助。

谢谢你的回复,将他们的装置设置为传感器,但我无法将其设置为传感器,因为我只是不想在这两个物体之间发生碰撞。如果我把它放在传感器上,身体就不会与没有身体的物体碰撞,我不想这样。正如我所说,我只是想避免这两个物体之间的碰撞。没别的了,哇!问题解决了!。让我看看我是否理解这个条件的作用,通过预解,我可以检测出哪种过滤器发生碰撞。如果我记得清楚的话,我用categoryBits和maskBits设置了什么样的物体应该相互碰撞。我不确定,但是,如果将contact设置为false,则预解算器检测到的两个物体固定装置不应该碰撞,请告诉我我是否擅长于此。