Box2d 过滤器(maskbits 和 categorybits)

Box2d filter (maskbits and categorybits)

我搜索了多次,但我不确定为什么我的联系人过滤功能不起作用。我使用 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 秒添加一个敌人,他们以不同的速度前进并互相击中。我还没有真正处理过食物,所以你可以忽略它。

你的ENEMY_CATEGORY_BITS错了。
0x0003 实际上是 0x0001 | 0x0002。这意味着你在说

ENEMY_CATEGORY_BITS = BORDER_CATERGORY_BITS | PLAYER_CATERGORY_BITS

所以你说 Enemy 是一个 Player 和一个 Border 并且当 PlayerBorder 碰撞时,Enemy 将与Border 到。

要正确设置位,您需要使用 power of 2s,例如 1, 2, 4, 8, 16, 32...

还要确保两个物体相互碰撞,如果 PlayerBorder 碰撞,但 Border 不与 Player 碰撞,则获胜不要成为玩家无聊的碰撞。
我建议你阅读 iForce2D Box2D tutorials