Java 用于NPC碰撞的Jbox2D isSensor

Java 用于NPC碰撞的Jbox2D isSensor,java,jbox2d,Java,Jbox2d,我有一个2D侧滚游戏,有点像metroid vania,我有一些NPC我想添加,我想在世界上用重力模拟它们(它们与地板碰撞),但我不想让它们与玩家碰撞 将fixture设置为isSensor=true会导致NPC从地板上跌落,将其设置为false会导致NPC与玩家发生碰撞 有什么方法可以在不模拟另一个世界然后检查位置的情况下实现这一点吗?使用Box2D的内置过滤器,您可以过滤碰撞,使它们不会碰撞 FixtureDef floorFixture floorFixture.filter.catego

我有一个2D侧滚游戏,有点像metroid vania,我有一些NPC我想添加,我想在世界上用重力模拟它们(它们与地板碰撞),但我不想让它们与玩家碰撞

将fixture设置为isSensor=true会导致NPC从地板上跌落,将其设置为false会导致NPC与玩家发生碰撞


有什么方法可以在不模拟另一个世界然后检查位置的情况下实现这一点吗?

使用Box2D的内置过滤器,您可以过滤碰撞,使它们不会碰撞

FixtureDef floorFixture
floorFixture.filter.categoryBits = 4

FixtureDef playerFixture
playerFixture.filter.catagoryBits = 2;
playerFixture.filter.maskBits = 4;

FixtureDef npcFixture
npcFixture.filter.catagoryBits = 2;
npcFixture.filter.maskBits = 4;
在本例中,玩家和NPC不应相互碰撞,但会与地板碰撞


在这里阅读更多内容(搜索过滤):

你不能做一些类似的事情:
如果(!whoiscolliding instanceof NPC)
我考虑过,但我不知道如何根据具体情况禁用碰撞,就像那样,Box2D假设如果你能与它碰撞,一切都会与它碰撞传感器忽略所有碰撞,而非传感器动力学会与其他动力学、运动学和静态对象发生碰撞。如果有办法的话,我不知道