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
并且当 Player
与 Border
碰撞时,Enemy
将与Border
到。
要正确设置位,您需要使用 power of 2
s,例如 1, 2, 4, 8, 16, 32...
还要确保两个物体相互碰撞,如果 Player
与 Border
碰撞,但 Border
不与 Player
碰撞,则获胜不要成为玩家无聊的碰撞。
我建议你阅读 iForce2D Box2D tutorials
我搜索了多次,但我不确定为什么我的联系人过滤功能不起作用。我使用 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
并且当 Player
与 Border
碰撞时,Enemy
将与Border
到。
要正确设置位,您需要使用 power of 2
s,例如 1, 2, 4, 8, 16, 32...
还要确保两个物体相互碰撞,如果 Player
与 Border
碰撞,但 Border
不与 Player
碰撞,则获胜不要成为玩家无聊的碰撞。
我建议你阅读 iForce2D Box2D tutorials