处理友好的火灾碰撞检测

Handle friendly fire collision detection

我想创建一个友好的射击机制。本质上,我的立方体会反复发射子弹来击中敌人。我还想检测子弹和另一个立方体(友军火力)之间的命中。为了避免子弹的边界与发射它的立方体重叠,在我的 "Cube" class 中我覆盖了 equals。每个 Cube 都有一个唯一的 id,在创建 Cube 时立即初始化。

问题是我有一个非常严重的错误。当我添加第一个立方体时,所有行为都正常,但是一旦我添加第二个立方体,即使它们没有相互射击,也会立即检测到两个立方体的子弹发生碰撞。即使我添加更多立方体也会发生这种情况。我检查了边界,它们看起来很好。

我放了一些代码:

碰撞检测

// check collisions between bullets and cubes (friendly fire)
    for(BaseBullet bullet : bullets) {
        for(BaseSquare square : squares) {
            // exclude collision between bullet and its own Cube
            if (!bullet.getBaseSquare().equals(square)) {
                // check if bounds overlap
                if (square.getBounds().overlaps(bullet.getBounds())) {
                    System.out.println("collision between bullet and qube");
                    // propagate the event to anyone is interested in it
                    EventsManager.qubeHitByQube(bullet, square);
                    bullet.remove();
                    bulletsToDestroy.add(bullet);
                }
            }
        }
    }

立方体的equals方法

@Override
public boolean equals(Object o) {
    if(!(o instanceof BaseSquare) || o == null) {
        return false;
    }
    BaseSquare baseSquare = (BaseSquare)o;
    return baseSquare.getUniqueID().equals(getUniqueID());
}

注意

"friendly fire" 我的意思是当你的物体击中自己而不是敌人时。

我怀疑问题更可能来自 'if (square.getBounds().overlaps(bullet.getBounds()))' 而不是 square 的 equals() 方法。

'BaseBullet' 和 'BaseSquare' 是否扩展了 LibGDX 的 Sprite class?您不应该调用 getBoundingRectangle() 吗?