【问题标题】:Box2d filter (maskbits and categorybits)Box2d 过滤器(掩码位和类别位)
【发布时间】:2015-09-20 15:42:42
【问题描述】:

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

【问题讨论】:

    标签: java libgdx bit-manipulation game-physics bitmask


    【解决方案1】:

    您的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 发生碰撞,则不会发生 Player-Boreder-Collision。
    我建议你阅读iForce2D Box2D tutorials

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多