Java Box2d过滤器(maskbits和categorybits)

Java Box2d过滤器(maskbits和categorybits),java,libgdx,bit-manipulation,game-physics,bitmask,Java,Libgdx,Bit Manipulation,Game Physics,Bitmask,我搜索了很多次,但我不确定为什么我的联系人筛选不起作用。我使用libgdx创建了这个简单的游戏。代码如下: public static final short BORDER_CATEGORY_BITS = 0x0001; public static final short PLAYER_CATEGORY_BITS = 0x0002; public static final short ENEMY_CATEGORY_BITS = 0x0003; public static final short

我搜索了很多次,但我不确定为什么我的联系人筛选不起作用。我使用libgdx创建了这个简单的游戏。代码如下:

public static final short BORDER_CATEGORY_BITS = 0x0001;
public static final short PLAYER_CATEGORY_BITS = 0x0002;
public static final short ENEMY_CATEGORY_BITS = 0x0003;
public static final short FOOD_CATEGORY_BITS = 0x0004;

public static final short BORDER_MASK_BITS = PLAYER_CATEGORY_BITS;
public static final short PLAYER_MASK_BITS = BORDER_CATEGORY_BITS | ENEMY_CATEGORY_BITS;
public static final short ENEMY_MASK_BITS = PLAYER_CATEGORY_BITS;
public static final short FOOD_MASK_BITS = PLAYER_CATEGORY_BITS;

我希望玩家击中边界和敌人,敌人只击中玩家,其他什么都不击中,但我有一个游戏循环,每3秒增加一个敌人,他们以不同的速度前进,并且互相攻击。我还没有真正的工作与食物,所以你可以忽略这一点

您的
敌方\u类别\u位
错误。
0x0003
实际上是
0x0001 | 0x0002
。那意味着你在说

ENEMY_CATEGORY_BITS = BORDER_CATERGORY_BITS | PLAYER_CATERGORY_BITS
所以你说
敌人
玩家
边界
,当
玩家
边界
碰撞时,
敌人
将与
边界
碰撞

要设置正确的位,您需要使用2的幂,如1、2、4、8、16、32

另外,始终确保两个对象相互碰撞,如果
Player
Border
碰撞,但
Border
Player
不碰撞,则不会发生Player Border碰撞。
我建议你读一下这本书